《代码阅读方法与实践之读书笔记之一》

                                                                              《代码阅读方法与实践之读书笔记之一》

   阅读代码是程序员的基本技能,同时也是软件开发、维护、演进、审查和重用过程中不可或缺的组成部分。《代码阅读方法与实践之读书笔记之一》这本书围绕代码阅读,详细论述了相关的知识与技能。我希望通过仔细阅读并学习本书,可以快速地提高我的代码阅读的技能与技巧,进而从现有的优秀代码、算法、构架、设计中汲取营养,提高自身的开发与设计能力。此次读了此书的前四章,以下是我从中汲取到的宝贵养分:

  从第一章《导论》一节中我体会到了我们要养成一个经常花时间阅读别人编写的高品质代码的习惯,因为阅读高品质的代码可以提高我们的编写代码的水准; 要有选择地阅读代码,同时,还要有自己的目标;要注意并重视代码中特殊的非功能性需求,这些需求也许会导致特定的实现风格;如果在现有的代码上工作时,要与作者或维护人员进行必须的协调,以避免重复劳动或因此而产生厌恶情绪;在寻找BUG时,要从问题的表现形式到问题的根源来分析代码,不要误入歧途;寻找bug,这种情况下,关键的思想是使用工具,我们要充分利用调试器,编译器给出的警告或输出的符号代码,系统调用跟踪器,数据库结构化查询语言(SQL)的日志机制、包转储工具和Windows的消息侦查程序,定出BUG的位置;当向系统中增加新功能时,首先的任务就是找到实现类似特性的代码,将它作为待实现功能的模板;在移植代码或修改接口时, 可以通过编译器直接定位出问题涉及的范围,从而减少代码阅读的工作量;阅读代码寻找重构机会时,先从系统的构架开始,然后逐步细化,能够获得最大的效益;软件部件一般要经过逐渐地扩展,并重复改写以适用于两个或三个不同系统之后,才会成为可重用的部件;在复查软件系统时,要注意,系统是由很多部分组成的,不仅仅只是执行语句,还要注意分析以下内容:文件和目录结构、生成和配置过程、用户界面和系统的文档,可以将软件复查作为一个学习、讲授、援之以手和接受帮助的机会。

   从第二章《基本编程元素》中我再次温习了之前学习的知识:分析一个程序时, main是一个好的起始点;层叠if-else if-...-else序列可以看作是由互斥选择项组成的选择结构.;在分析重要的程序时最好首先识别出重要的组成部分.;解决困难的代码要从容易的部分入手;要养成遇到库元素就去阅读相关文档的习惯,这将会增强我们的阅读和编写代码的能力;.for (i=0; i<n; i++)形式的循环执行n次;高效的算法和特殊的优化确实有可能使得代码更为复杂从而更难理解但这并不意味着使代码更为紧凑和不易读会提高它的效率;do循环的循环体至少执行一次;每次只分析一个控制结构将它的内容看作是一个黑盒;return, goto, breakcontinue语句还有异常都会影响结构化的执行流程.,由于这些语句一般都会终止或重新开始正在进行的循环,因此要单独推理它们的行为。

   第三章高级《C数据类型》让我对C语言又有了更进一步的认识:只有了解特定语言构造所服务的功能之后才能够更好地理解使用它们的代码;在C程序中指针一般用来构造链式数据结构|动态分配的数据结构|实现引用调用|访问和迭代数据元素|传递数组参数|引用函数|作为其他值的别名|代表字符串|以及直接访问系统内存;指向数组元素地址的指针可以访问位于特定索引位置的元素;C语言中的结构将多个数据元素集合在一起使得它们可以作为一个整体来使用用来从函数中返回多个数据元素|构造链式数据结构|映射数据在硬件设备|网络链接和存储介质上的组织方式|实现抽象数据类型|以及以面向对象的方式编程;共用体在C程序中主要用于优化存储空间的利用|实现多态|以及访问数据不同的内部表达方式;动态分配的内在块可以电焊工地释放或在程序结束时释放或由垃圾回收器来完成回收,在栈上分配的内存块当分配它的函数退出后释放;可以将typedef声明理解成变量定义变量的名称就是类型的名称,变量的类型就是与该名称对应的类型。

   我从第四章《C数据结构》中获取到以下精华:C语言中一般使用内建的数组类型实现向量不再对底层实现进行抽象;表达式sizeof(x)总会得到用memsetmemcpy处理数组x(不是指针)所需的正确字节数;不对称区间中元素的数目等于高位边界与低位边界的差;动态分配的矩阵一般存储为指向数组列的指针或指向元素指针的指针,这两种类型都可以按照二维数组进行访问;数组可以通过存储供程序内的抽象机(abstract machine)或虚拟机(virtual machine)使用的数据或代码控制程序的运作;如果结构中含有指向结构自身|名为next的元素一般说来该结构定义的是单向链表的结点;包含指向自身的nextprev指针的结构可能是双向链表的结点;图的结点常常顺序地存储在数组中链接到链表中或通过图的边链接起来;.在无向图中表达数据时应该将所有的结点看作是等同的类似地进行处理任务的代码也不应该基于它们的方向来区分边;在非连通图中执行遍历代码应该能够接通孤立的子图;处理包含回路的图时遍历代码应该避免在处理图的回路进入循环;复杂的图结构中可能隐藏着其他类型的独立结构。

 

posted @ 2015-10-09 21:03  Twinklelittlestar  阅读(335)  评论(0编辑  收藏  举报