本文环绕代码阅读,详细论述了干系的知识与技能。“他山之石、可以攻玉”,通过仔细阅读并学习本文,可以快速地提高读者代码阅读的技能与技巧,进而从现有的精良代码、算法、构架、设计中汲取营养,提高自身的开拓与设计能力。
代码阅读有自身的一套技能,主要的是能够确定什么时候利用哪项技能。本文利用多个现实的例子,向读者展示如何区分好的(和坏的)代码,如何阅读,该当把稳什么,以及如何利用这些知识改进自己的代码。
养成阅读高品质代码的习气,可以提高编写代码的能力。

有一扇窗,从未打开,却要永久关闭;有一些人,确实存在,我们却无缘相见;有一种生活,还没有到来,我们却已永久离开。
好代码:美妙如音乐好的程序就犹如好的音乐一样,它们完成得那么奥妙,那么完美,表示出完备没有词华的俏丽。就犹如好的音乐能够改变你对人生的意见,让你重新核阅你的生活,和多年前的人进行跨时空的互换一样。
作为软件开拓职员,好的程序,所能够带来的感想熏染,丝毫不逊于音乐给你带来的冲击。
更难堪得的是,这些宝贵的程序每每并非由"威信人士"、"享誉海内外的专家"所编写,它们是由一个个普通的程序员写就。这些程序员和读者没有什么不同。虽然这些程序员并非气吞山河的人物,但专业造就了专家,永劫光集中在某个领域中,就能够创建出所有程序员都该当器重的财富。
就犹如古代的米爽朗基罗,比较于当时那些声名显赫的主教、贵族来说,他是多么的微不足道,但时至今日,那些人和他们的的名字都随风飘逝,昔日的荣光都随韶光而暗淡,而米爽朗基罗的名字却铭刻在大多数乃至是普通人的心中,许多人的脑海中都能浮现出那些完美的雕塑---"大卫"、"创世纪"。这分光彩在文艺史上可能无人能及。
万事万物都是从量变到质变的我们是程序员。我们的事情(许多情形下,还有我们的激情)是通过编写代码来创造新的事物。PRD、UED 稿、大量的图示、详尽的项目进度表、一堆堆厚厚的设计十文档并不能知足用户的需求。这些都是欲望,设计,表达出我们希望实现的东西。我们只有通过编写代码才能交付真正知足用户需求的东西:代码才是现实的、实在的、踏实的。
恐怕,没有哪个伟大的小说家,从未读过其他人的著作,没有哪个伟大的画家,从未研究过他人的绘画作品,没有哪个技能闇练的外科年夜夫,从未不雅观摩过同等事如何动手术,没有哪个机长不是首先在副驾驶员的位置上不雅观看如何实际操作的。
由此及彼地类比,我们可以随意马虎理解到:编写伟大代码的办法是阅读代码,阅读大量的代码:高品质的代码、低品质的代码; 汇编措辞代码、C 代码、C++代码、Java 代码、PHP代码、Go 代码、Kotlin 代码、TypeScript 代码、Haskell代码、Lisp 代码,千里之外的陌生人所写的代码,以及我们自己上周刚刚编写的代码。由于,如果不这样,我们就会不断地重做别人已经经完成的事情,重复过去已经发生过的成功和缺点。
阅读代码我们所不雅观测到的不是自然本身,而是大自然在我们所用的不雅观察方法下展现出来的特性。—Werner Heisenberg
通过精确地代码审查,可以创造 90%的软件缺点。
程序员花费在软件上的韶光,超过一半是在阅读、掩护别人的代码上。
代码阅读成为当今软件工程师的一项基本技能。此外,阅读实际的、编写良好的代码,可以更加深人地理解如何布局与编写主要的系统,仅仅编写小型的程序学不到这种能力。
程序员的事情中,很大一部分内容是阅读、理解、以及修正最初的(自己写的和别人写的)代码。遗留代码持续不断、不可避免的累积,对软件重用的强调,软件行业中职员的高流动性等等成分,都造成了事情繁芜性极高、寻衅极大。
要养成常常花韶光阅读别人编写的高品质代码的好习气。
就像阅读高品质的散文能够丰富词汇、引发想像力、扩展思维一样,剖析设计良好的软件系统的内部构造可以学到新的构架模式、数据构造、编码方法、算法、风格和文档规范、运用程序编程接口(API),乃至新的打算机措辞。
阅读高品质的代码,还可以提高您编写代码的水准。
代码可读性我很遗憾地见告大家,就在最近,我再次查看了我的程序(质因子和井字游戏),它们没有任何形式的注释或文档。I regret to report that I've just recently looked again at my programs for prime factors and tic-tac-toe, and they are entirely free of any sort of comments or documentation.—Donald E. Knuth
在编写程序时就该当考虑到使之易于阅读,并且,不管程序是否随意马虎阅读,人们都须要去阅读它们。
写可读性良好的代码,于人于己,都是功在当代,利在千秋的大好事。
重用阅读代码也可能是为了探求可供重用的元件。但不要期望太高。代码的可重用性很诱人,但难以节制。降落期望就不会感到失落失落望。
编写可重用的代码很困难。
多年来,只有比较少的软件经受住韶光的磨练,在多种不同的办理方案中被重复利用。软件部件一样平常要经由逐渐地扩展,并重复改写以适用于两个或三个不同系统之后,才会成为可重用的部件。
专为特殊的目的而开拓的软件很少知足这些条件。实际上,根据软件本钱模型(software cost model),编写可重用的软件可能会增加50%的开拓事情量。
阅读代码的格言第一次剖析一个程序时,main 是一个好的起始点。要养成,常常花韶光阅读别人编写的高品质代码的好习气。要把稳并重视代码中分外的非功能性需求,这些需求大概会导导致特定的实现风格。在探求bug时,请从问题的表现形式到问题的根源来剖析代码。不要沿着不干系的路径(误入岐途)。要充分利用调试器、编译器给出的警告或输出的符号代码马、系统调用跟踪器、日志机制、包转储工具和侦查程序,定位bug的位置。从特性的功能描述到代码的实现,可以利用关键词来搜索干系代码。重构时,从一个能够正常事情的系统开始做起,并确保结束时,系统能够正常事情。一套恰当的自动化测试用例(test case) 非常必要。在上手一个新的软件系统时,要把稳,系统是由很多部分组成的,不仅仅只是实行语句。还要把稳剖析以下内容:文件和目录构造、天生和配置过程、用户界面和系统的文档。代码阅读有许多可选择的策略:自底向上和自顶向下的剖析、运用试探法和检讨注释和外部文档,该当依据问题的须要,考试测验所有这些方法。创造性的代码布局可以用来提高代码的易读性。可以利用空格、临时变量和括号提高表达式的易读性。可以用好的缩进以及对变量名称的明智选择,提高编写欠佳佳的程序的易读性。编写、阅读代码时,要养成添加注释的习气。天下大事,必作于细;天下难事,必作于易。办理困难的代码要从容易的部分入手。结语夕阳西下的薄暮,泡上一杯茶,合上条记本,揉下坐久了的老腰,伸展双臂,眺望窗外的远山。这是不是有一些"采菊东篱下,悠然见南山"的意境呢?只不过陶渊明种的是菊花,我们播种与收成的是代码而已。