程序设计(programming)是一项技能,需要向他人学习来提高自己。如同作家需要阅读他人著作,画家研究他人绘画作品一样,程序员也能通过阅读他人高品质的代码来提高自身编写伟大代码的能力。
今天小编为大家介绍一本教大家如何阅读代码的书:《代码阅读方法与实践》Diomidis Spinellis写的 Code Reading:The Open Source Perspecitve。这本书充满闪光的思想,以幽默的表述道出了很多经验。
书中的源代码实例都来自于以强调正确的设计和编写良好的代码为目标的NetBSD的源代码。NetBSD是一个免费的高度可移植的类UNIX操作系统,适用于多种平台,从64位AMD Athlon服务器和桌面系统到手持设备和嵌入式设备。作者通过对600多段开源代码的分析,指出每段代码的技巧、缺陷、和习惯。大家可以学会如何区分好代码,如何阅读代码,如何运用知识改进代码。
下面来看看阅读代码的格言吧。感谢本书中文版译者赵学良。
第一章 导论
-
要养成一个习惯,经常花时间阅读别人编写的高质量代码。
-
要注意并重视代码中特殊的非功能性需求,这些需求也许会导致特定的实现风格。
-
请将从开放源代码软件中的到的益处看作是一项贷款;尽可能的寻找各种方式来回报开放源代码社团。
-
多数情况下,如果您想要了解“别人会如何完成这个功能呢?”,除了阅读代码以外,没有更好的方法。
-
对于那些大型且组织良好的系统,您治需要最低限度的了解它的全部功能,就能够对它作出修改。
第二章 基本编程元素
-
在分析重要的程序时,最好首先识别出重要的组成部分。
-
了解局部的命名约定,利用它们来猜测变量和函数的功能用途。
-
解决困难的代码要从容易的部分入手。
-
代码阅读有很多可选择的策略:自底向上和自顶向下的分析、应用试探法和检查注释和外部文档,应该依据问题的需要尝试所有这些方法。
-
不需要为了效率,牺牲代码的易读性。
第三章 高级C数据类型
-
了解特定语言构造所服务的功能之后,就能够更好地理解使用它们的代码。
-
识别并归类使用指针的理由。
第四章 C数据结构
-
根据底层的抽象数据类型理解显式的数据机构操作。
-
递归数据结构经常用递归算法来处理。
-
重要的数据结构操作算法一般用函数参数或者模板参数来参数化。
第五章 高级控制流程
-
采用递归定义的算法和数据结构经常用递归的函数定义来实现。
-
在多处理器计算机上运行的代码常常围绕进程或线程进行组织。
-
竞争条件很难捉摸,相关的代码常常会将竞争条件扩散到多个函数或模块;因而,很难隔离由于竞争条件导致的问题。
第六章 应对大型项目
-
我们可以通过浏览项目的源代码树---包含项目源代码的层次目录结构,来分析一个项目的组织方式。源码树常常能够反映出项目在构架和软件过程上的结构。
-
不要被庞大的源代码集合吓到;它们一般比小型的专门项目组织得更出色。
第七章编码规范和约定
-
可以使用代码块的缩进,快速地掌握代码的总体结构。
-
在审查代码的可移植性,或以某种给定的编码规范作为指南时,要注意了解规范对可移植性需求的界定与限制。
-
当检查系统的发布过程时,常常可以将相应发行格式的需求作为基准。
第八章文档
-
阅读代码时,应该尽可能地利用任何能够得到的文档。
-
软件需求规格说明是阅读和评估代码的基准。
-
测试规格说明文档为我们提供可以用来对代码进行预演的数据。
-
文档的变更能够标出那些故障点。
好的程序就是一种优雅的艺术品,希望读这篇小文的你也写出巧妙、完美的代码。
想要获得详细信息,欢迎下载我的泡泡糖幻灯片《代码阅读方法与代码质量》。