代码方法与实践(一)

学习编写伟大代码的方式是阅读代码。
Robert Glass:“通过正确的使用(代码)审查,软件产品中90%以上的错误能够在测试之前消除。”
本书分析了几百个代码片段,支出其中的技巧、陷阱和(同等重要的)习惯用法。

前言:
今天,我们从阅读中得到的东西,甚至相当于我们在过去14年中的亲身体会。
我想介绍有可能出现在软件开发人员面前,与代码相关的大部分概念,包括编程构造、数据类型、数据结构、控制流程、项目组织、代码规范、文档和构架。
本书中提供的许多源代码示例都来自NetBSD的源代码。NetBSD主要的目标就是强调正确的设计和编写良好的代码,这使得它成为提供源代码示例的最佳选择。
第一章   导论
我很遗憾地告诉大家,就在最近,我再次察看了我的程序(质因子和井字游戏),它
们没有任何形式的注释或文档。
阅读实际的、编写良好的代码,可以更加深入地了解如何构造与编写重要的系统,仅仅编写小型的程序学不到的这种能力。
掌握了本书的内容之后,您将:
能够阅读和理解重要软件的代码;领会许多重要的软件开发概念;知道如何探索大型的代码体;拥有大多数重要的高级、低级编程语言的阅读能力;认识到现实软件醒目的错综复杂性。
1.1为什么以及如何阅读代码
将代码作为文献;要养成一个习惯,经常花时间阅读别人编写的高品质代码。就像阅读高品质的散文能够丰富词汇、激发想象力、扩展思维一样,分析设计良好的软件系统的内部结构可以学到新的构架模式、数据结构、编码方法、算法、风格和文档规范、应用程序编程接口(API),甚至新的计算机语言。阅读高品质的代码还可以提高您编写代码的水准。
通过下面的这些征兆,可以容易地识别出低品质的代码:
编程风格不一致;结构不必要的复杂或难以理解;明星的逻辑错误或疏忽;过度使用不可移植的构造;缺乏维护。
要有选择的阅读代码,同时,还要有自己的目标。
模式pattern编码风格coding style 设计模式design pattern
要注意并重视代码中特殊的非功能性需求,这些需求也许会导致特定的实现风格。对可移植性、时间和空间效率、易读性、甚至迷惑性的需求都可能导致代码具有非常特殊的特征。
Slicing 切片
关于维护:从问题的表现形式到问题的根源来分析代码。不要沿着不相干的路径误入歧途。编译程序时请加入调试支持,并使用调试器的栈跟踪机制、单步执行、以及数据和代码断点来缩小搜索的范围。
关于演进:关键的思想是对所分析的代码的范围有所选择;大多数情况下,实际需要理解的代码只是系统全部实现的很小一部分。在实际工作中,通过选择性地了解与更改一两个文件,就能够修改一个具有上百万行代码的系统(如典型内核或窗口系统);我强烈建议,读者应尽可能地亲身体会一下这种操作的成功所带来的令人愉悦的感受。在有选择地处理大型系统的各个组成部分时,应该采用的策略概括如下:定位到感兴趣的代码;单独了解各个特定的部分;推断节选出的代码与其余代码的关系。
当向系统中增加新功能时,首先的任务就是找到实现类似特性的代码,将它作为待实现功能的模板。相似的,当修改一个现存的特性时,首先需要定位底层的代码。从特性的功能描述定位到代码的实现,可以按照字符串消息,或使用关键字来搜索代码。
定位到该特性后,就可以开始研究它的实现(跟踪所有相关的代码)、设计新的特性或增加新的功能,以及定位可能影响到的区域――代码中与新代码发生交互的其他部分。在大多数情况下,您只需要彻底了解这些代码就足够了。
阅读代码寻找重构机会时,先从系统的架构开始,然后逐步细化,能够获得最大的效益。
关于重用:不要期望太高。代码的可重用性是一个很诱人,但难以掌握的思想;降低期望就不会感到失望。编写可重用的软件可能会增加50%的开发工作量。

原文地址:https://www.cnblogs.com/revenge/p/5037708.html