如何阅读大型代码库?

jopen 10年前

  英文原文:Reading Large Codebases

  Casey 问我:“对于新手,有什么有针对性的诀窍来阅读大型代码库吗?”

  碰巧,我认为这是一个非常好的问题。我觉得想要成为一个优秀的开发者,阅读代码库并弄清清楚内部是怎么回事的能力非常重要。在你的职业生涯中你会中途加入一个现有的项目并被要求迅速融入进去。或者,甚至更难,会有一个项目丢给你让你自己一个人搞清楚。

  最坏的情景就是你被带入一个项目,要你替换掉让工程运行失败的“那些肆无忌惮的*杂种”,并且让工程运行起来。不过更常见的情景是你被要求维护 一个已经离职的员工写的代码库。最后,当然,如果你用了任何开源的项目,很大的可能是被要求“你可以扩展它让它也能做这个功能吗?”亦或者你只是好奇。

  尤其是新手程序员,我强烈建议阅读代码库,看看以下我是怎么做的,然后你需要实际的去阅读代码。

  当我接触到新的代码库时,我常常忽略文档和表面的细节。目的是摒弃先入为主的关于它怎么运行的想法。我试图从文件结构上找出项目的结构。仅仅这个就能告诉你很多,我常常试图找出它的结构。这是整个系统的核心吗?它是怎么分割的?等等。

  之后我会找到最底层的代码然后开始阅读。我常常用字典序来读。找到一个文件,读完它,然后读下一个文件。我尽量记录下来关于这些东西是如何连接 在一起的(你可以在博客里找到关于记笔记的例子),但我做的最多的找到对这个代码的感觉。有很多代码常常是项目风格的一部分,比如预处理检查,日志记录, 抓取错误等等。你可以先了解这部分内容,之后就可以忽略它们阅读有趣的部分。

  我通常不在某一点上阅读太深,我会试图宏观的找到感觉。比如:这个文件通过调用Y和Z返回了X,但在这个点上阅读每一个细节对我来讲并不真的重 要。哦对了,我还记录笔记,很多笔记。往往它们不是真的笔记而更像是问题清单,在这里我理解的越多,加入的问题和写入的回答也就更多。在阅读完我能找到的 最底层代码之后,我会做一个纵向的比较。这是最让我能弄清楚事情是如何布局和工作的。这就意味着下一次我来看这部分的时候,对于代码结构我会有更好的想 法。

  接下来,我会找有意思的部分。系统当中对我有意思的部分而不是被我束之高阁的部分。

  这部分内容很多,但其实要做的并不多。我仅仅是通读一遍代码首先找到结构,之后我会认真研读独一无二的部分并找出他们是如何写的。

  在这期间,尤其是遇到难点的时候,我会试图寻找任何文档(只要有的话)。对于这一点,我应当首先知道代码是如何组织的,这样我才能更快的阅读文档。

  原作者注:我一开始只写了肆无忌惮,不过这样更有趣。

  翻译: 伯乐在线 - 孑良 译文链接: http://blog.jobbole.com/51973/