第一章 导论
1.有选择的阅读代码,要有目标。想学习新的模式、编码风格还是满足某些需求的方法?
2.充分利用调试器、编译器的警告,系统调用跟踪器、数据库结构化查询语言的日志机制、包转储工具和Windows的信息侦查程序,定位bug
3.向系统添加新功能时,首要的任务就是找到实现类似特性的代码,将它作为待实现功能的模板。[不能再正确,一般就是最低限度找到类似的功能代码,然后照搬实现现在所需功能。]
4.阅读代码寻找重构机会时,首先从系统架构开始,然后逐步细化,能够获得最大的效益。
阅读代码的方式和原因:文献,范例,维护,严谨,重用,检查
[作者强调了阅读代码时,要带着目标,不要漫无重点。重构时可以从架构开始细化,重用时可以适度扩大粒度。]
第二章 基本编程元素
1.第一次分析程序时,main是很好的起点。
2.[运行,找到重点,基于猜测修改代码时要有验证猜测的流程,比如断言或测试用例。]
3.养成遇到库元素就去阅读相关文档的习惯,会增强阅读和编写代码的能力。
4.阅读代码时养成添加注释的习惯
第三章 高级C数据类型
1.使用全局或static局部变量的函数大多数情况下不可被重入
[第二章和第三章介绍了C的语法元素,包括控制语句以及高级特性,见目录。]
第四章 C数据结构
[用C语言表示常见数据结构]
第五章 高级控制流程
1.推理递归函数时,应从基准范例测试开始,并且论证每次递归调用如何逐渐接近非递归基准测试范例代码。
2.尾递归调用邓同一个回到函数开始处的循环。
[从目录看出,介绍的高级控制流程有递归,异常机制,并行,信号和非局部跳转宏替换都C语言针对性强]
第六章 应对大型项目
1.通过浏览源代码树来分析一个项目的组织方式。
2.源代码树经常是该应用程序的部署结构的镜像。
3.首次接触大项目,要花时间熟悉目录树结构
4.大型项目的编译过程中的一般声明皆有依赖关系来说明。依赖关系由工具程序转换成具体的编译行为。makefile通常由配置步骤动态生成。
[大项目相关知识,见目录,包括组织,编译,配置,版本控制,测试等]
第七章 编码规范和约定
[良好的开源项目都有其明确规定的风格指南]
第八章 文档
1.[文档很重要]尽可能利用任何文档,一小时代码不如一分钟文档。
2.软件需求说明是阅读和评估代码的基准。
3.系统的设计规格说明是认知代码结构的路线图
4.文档还会包含问题和bug
第九章 架构
1.深度分析一个构建于某种框架上的应用程序时,最好的方式就是对这个框架本身进行学习。
[很重要的一章,拍照存,这章介绍的内容比较系统的补缺了我所不太了解的部分。目录也很重要。]
第十章 代码阅读工具
[正则表达式,标签,grep,fgrep,diff——都不太理解,并且平台没准备好,因此实验不成功。以后用时再学。]
1.为了理解复杂的算法或者微妙的数据结构,可以选择一个平和安静的环境,并且全神贯注,不要从计算机或其他机器设备中获得任何帮助。
第十一章 完整示例
[很重要的实例,体现了如何在一个大型软件上添加一个小功能(要求很高),以后水平再好一些可以再回头学习和实践。作者详细的呈现了具体过程,包括查找可以参考的函数,如何寻找该函数相关信息,从中找出重点,从各个角度搜索来解决问题。其中解决问题部分,尤其是编译相关的部分。]
1.沿着类似的实体(类、函数、模块)来对软件进行建模,在相似的现存实体中,挑选具有不寻常名称的一个从而简化代码库中的文本搜索。
2.任何精确分析代码的企图,通常都会分支处众多的类、文件以及模块,并且快速将你淹没,因此,主动尝试将需要理解的代码减少到最小。
3.采用广度优先的搜索策略,从多个方向分析代码阅读中的问题,直到其中一个解决为止。
代码阅读有自身的一套技能,重要的是能够确定什么时候使用哪项技术。在这本书中作者使用600多个现实的例子,向读者展示如何区分好的(和坏的)代码,如何阅读,应该注意什么,以及如何使用这些知识改进自己的代码。养成阅读高品质代码的习惯,可以提高编写代码的能力。
阅读代码是程序员的基本技能,同时也是软件开发、维护、演进、审查和重用过程中不可或缺的组成部分。本书首次将阅读代码作为一项独立课题,系统性地加以论述。本书引用的代码均取材于开放源码项目——所有程序员都应该珍视的宝库。本书围绕代码阅读,详细论述了相关的知识与技能。“他山之石、可以攻玉”,通过仔细阅读并学习本书,可以快速地提高读者代码阅读的技能与技巧,进而从现有的优秀代码、算法、构架、设计中汲取营养,提高自身的开发与设计能力。