PB15061359 王亚正
对这本书的内容做一个小的总结:
一, 第一章
1. 将代码作为文献:
注意要有选择地阅读代码, 同时, 还要有自己的目标. 明白自己是想学习新的模式, 编码风格, 还是满足某些需求的方法? 或者, 只是在浏览代码, 获得其中的某些亮点. 所以一定要有目的性.
2. 将代码作为范例:
要想了解一个特定的功能是如何实现的, 想要了解 "别人会如何完成这个功能呢?", 除了阅读代码以外, 没有更好的方法.
3. 维护:
在寻找 BUG 时, 请从问题的表现形式到问题的根源来分析代码. 不要沿着不相关的路径(误入歧途).
4. 演进:
在多数情况下, 代码阅读不是为了修复缺陷, 而是为了增加新的功能, 修改现有的特性, 调整代码使其适应新的环境和需求, 抑或是重构以加强代码的非功能性质量.
5. 重用:
代码阅读也可能是为了寻找可供重用的部件.
6. 复查:
通过阅读代码找出功能和逻辑上的错误.
二, 第二章
将基本编程元素和第三四章 C 语言类型和结构, 主要是复习拓展了之前学习的知识.
三, 第五章
讲高级控制流程, 首先讲到递归, 作者认为递归不仅是一种方法, 更是对整个程序流程的一个掌控. 之后谈到异常处理机制在程序中也是必不可少的. 这一节还提到了多线程, 最后介绍了宏替换, 宏可以解决不必要的重复赋值, 节省许多重复工作.
四, 第六章
应对大型项目, 讲解了一个大型项目主要的一些元素, 阅读一个大型项目, 第一主要的是先要看这个大型项目的架构, 架构分析清楚, 这个大型的项目就一目了然. 然而还有一些深层次的问题, 比如程序的编译过程, 运行该程序时的需要的系统配置. 编写完程序后, 测试部分也是非常重要的. 经过测试的程序, 能够经的起推敲, 不会在后期的使用中出现意料之外的状况和程序员们无法解决的错误.
五, 第七章
介绍编码时的一些规范, 比如阅读代码时, 首先要确保编辑器或优美打印程序的 tab 设置, 与代码遵循的风格规范一致, 等等.
六, 第八章
介绍了如何利用好文档以及在文档中经常出现的错误. 文档可以帮助人很快的了解一个系统的大体情况, 理解提供特定功能的程序代码. 但是文档常常会提供不恰当的信息, 误导我们对源代码的理解. 两种不同类型的歪曲是未记录的特性和理想化表述, 所以总是要以批判的态度来看待文档.
总的来说读完这本书, 得到最大的收获是读别人代码的重要性, 以及书中给出一些代码的结构以及流程等等, 可以帮助我更容易的读他人代码.
以下是个人心得:
1. 分析一个程序时, main 是一个好的起始点; 层叠 if-else if-...-else 序列可以看作是由互斥选择项组成的选择结构.; 在分析重要的程序时, 最好首先识别出重要的组成部分.; 解决困难的代码要从容易的部分入手; 要养成遇到库元素就去阅读相关文档的习惯, 这将会增强我们的阅读和编写代码的能力;
2. 我们要养成一个经常花时间阅读别人编写的高品质代码的习惯, 因为阅读高品质的代码可以提高我们的编写代码的水准; 要有选择地阅读代码, 同时, 还要有自己的目标; 要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特定的实现风格; 如果在现有的代码上工作时, 要与作者或维护人员进行必须的协调, 以避免重复劳动或因此而产生厌恶情绪
3. C 语言中, 一般使用内建的数组类型实现向量, 不再对底层实现进行抽象; 表达式 sizeof(x)总会得到用 memset 或 memcpy 处理数组 x(不是指针)所需的正确字节数; 不对称区间中元素的数目等于高位边界与低位边界的差; 动态分配的矩阵一般存储为指向数组列的指针或指向元素指针的指针, 这两种类型都可以按照二维数组进行访问; 数组可以通过存储供程序内的抽象机 (abstract machine) 或虚拟机 (virtual machine) 使用的数据或代码, 控制程序的运作; 如果结构中含有指向结构自身 | 名为 next 的元素, 一般说来, 该结构定义的是单向链表的结点
来源: http://www.bubuko.com/infodetail-2644869.html