【编者按】起初我是在2010年5月为Fuel Your Coding网站写的这篇文章。然后这个网站现在已经不存在了,为了让爱好编程的人们能够继续受益,所以在这里重新发表这篇文章。我考虑过是否要按照现如今的情况来对这篇文章进行修改,但是我认为它已经足够经得住检验了。只有少许的部分可能不尽人意。尽情的欣赏这篇文章吧。
正如每个人都知道的那样,写更多的代码是提高编程能力最显著方法。但是我所确信的另外一种可以提高编程能力的方法是与写代码完全相反的。我将要尽可能清楚的陈述这种方法。
只有大量的阅读别人的代码才能显著的提高你自己的编程能力。
不论你是否相信,但是我觉得你可以试一下,你会觉得自己所花的时间是完全值得的。
在这篇文章里我将会教你如何选择阅读的内容以及教会你如何阅读。如果你已经知道如何阅读代码,或许你已经发现通过你的努力可以获取更多。如果你还不知道如何很好的阅读代码,那么请一定继续往下看。
读什么
我们很难决定阅读什么样的代码,也很难给别人建议。我不会简单的给你指出你应该读什么样的代码,因为它最终还是取决于你喜欢读什么。我会给你提供一些参考,使得你能够有所侧重的去选择阅读什么代码。
阅读你信赖的代码
你已经在使用的插件或者库会是很好的选择。
一个你十分喜欢的WordPress plugin
一个你已经发现很有用处的Ruby gem
一个你会经常回顾的jQuery plugin
这些都是极其不错的可以作为候选的地方。如果你已经对其公开的APIs十分的熟悉,那么理解其内在的工作原理已经不再是一件困难的事情。另外,作为一个代码的使用者,你有机会为其添加文件,实现一个新的功能,或者对原来的项目提出修改的建议。
阅读那些能够让你眼前一亮的代码
我还记得第一次看 280 Slides 的时候就心想这些代码让我眼前一亮。随后我迅速发现这个网站的源代码是Cappuccino的开源项目。当这一信息在我的大脑深处徘徊的时候我猛然想起另外一个让我印象深刻的软件也是运行在Cappuccino上的,这时候我知道了有一个我可以学习到很多东西的项目了。有什么是让你最近印象深刻的?它是一个开源项目吗?如果是的话,那么它将会是一个值得你去读的代码,因为这些代码会像最终的应用一样吸引你。
读那些你认为是大牛所写的代码
如果你已经用开源项目的软件编程了一段时间,
那么肯定有发现其他能够让你印象深刻的程序员。
我的脑海中有那么几个能够写出让我十分羡慕的代码的程序员。
如果你的印象里还没有这样的开发者,只要你愿意的话是很容易找到一个的。他/她或许在过去已经写了属于以下2个类型中的代码。(一种是你所依赖的,另一种是令你印象深刻的)
读那些你可以意会的代码
如果你勇于冒险的话,那么有可能会考虑深入研究类似Ruby on Rails, Drupal, 或者 jQuery的大项目。我建议你现在最好不要接触类似的项目,除非你在阅读代码方面已经很有经验了。
大的项目有很多可以移动的模块,你可能会纠结于很多概念而无法及时学到很多知识。疑惑会令人泄气,在阅读大的项目的过程中更加容易产生疑惑和泄气的负面情绪。从一个小的项目入手的好处在于整个程序的完整逻辑可以在脑海中浮现。剩下的就是去探索其细节并从中学习。
如何阅读代码
既然你已经选择了一些要读的代码,那么什么是最好的阅读方式呢?我在过去阅读了许多的代码,因此可以给你推荐一些可以最大化投资回报率的方法。
下面请看这张大图
假设你已经在阅读代码方面达到了一个突出的水平了。如果没有,那么建议你去查看项目的网站、使用说明书、文件或是任何除了代码外帮助你理解的内容。
那么,我首先建议的是使自己的脑海里有这个项目清晰的框架。其工作量是基于你所选取的代码库的大小。但是只要是大于一个文件的项目都会消耗一定的时间。
首先对文件的结构加以注释。如果一个编者的文件具有像TextMate一样的可视化视图结构将会极大的帮助这一步骤的完成。譬如这里有一个Twitter Ruby gem的完美概要。
这一步骤的目标是为了让你更加的熟悉代码。找出那些文件包含/需要/加载其他的文件,以及代码主题的位置,是否用过命名空间,或是其他诸如此类的东西。如果你已经了解了大的架构,那么你就可以深入去关注其细节了。
记录下你所发现的东西
阅读代码应该是一个主动的行为。我鼓励你根据自己的想法增加一些评论,当你理解程序的流程的时候记录下你的假设以及自己的结论。那么刚开始的时候你的评论可能是这样的:
当你的理解不断的进步的时候你会减少那些碎片化的评论并且能够增加一些更加有意义或权威的评论,这些评论或许能够对完善原来的项目有所帮助。
使用测试,Luke
但愿你选择的项目有测试的套件,如果没有的话你可以完全跳过这一部分(或者重新选择一个有的项目)。
测试是一个很好的地方能够让你随时阅读别人的代码因为它们记录了这些代码需要实现的功能。一些测试能够提供很多的信息,但是不论写的有多好,你在测试里可以比在执行里更好的发现作者的意图。在你阅读代码的时候尽量让其测试的套件成功运行。这会让你的开发环境得到合理的配置,也会让你更加自信的去做出一些改变。
执行,调整,再执行
谁说看代码的时候就不能执行代码?只有将一切东西拆解再将其恢复原样才能真正的理解其本质。还记得那些你所经历的测试吗?在失败后,增加一些代码,或者在不破坏的前提下改变其执行的情况。尝试增加一些你觉得很酷的小属性,或者在项目范围内增加一些记录,这样你就可以在编写代码的不同阶段打印输出。这些还仅仅是阅读代码吗?
这是毫无疑问的,但是从这个角度看更像是一段奇妙的经历而不是阅读一篇神秘的小说。这是一件非常好的事情。
冲洗和重复
一旦你阅读完一个代码库,立即选取另外一个并重复之前的步骤。你只有阅读足够多的代码,才能提高阅读新的代码的效率。你会发现你的投入产出比在不断的上升并且发现这是一个十分有趣的学习过程。
从哪里开始
在我的代码阅读资源中,GitHub是对我影响最大的。在这个网站里,你能够很快找到新项目以及其作者,如果你不使用这个网站那么对你来说是一个很大的损失。我建议先从GitHub上开始直到你能够找到一个可以学习的项目。记住下面这段话并开始阅读吧。
你是怎么看的?你是把阅读代码当成一种学习的手段吗?你会给别人推荐哪些项目?最近是否阅读过很好的代码?
因为The Wayback Machine的缘故你可以阅读到原来的文章。
作者介绍:Jerod Santo是Changelog Media的主编和合伙人。他联合主编了旗舰博客—The Changelog,他领导了所有使得Changelog变得更加酷炫的项目。他也经营着自己的订制软件公司Object Lateral。
数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!
本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。
文章原标题《One Sure-Fire Way to Improve Your Coding》,作者:Jerod Santo