云服务器

程序员自我修炼(三) - 源码阅读

2017-12-25 11:30:14 0

作为程序员,每天都爻和代码打交道。经过数年的基础教育和职业修炼,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这种怪状,真要追究起来,怪不得程序员这个群体本身 —— 它是两个原因造成的:

  • 我们所有的教育和学习大部分都在强调怎么写代码,并没有教大家如何读代码。
  • 大多数工作场景都是一个萝卜一个坑,我们只需要了解一个系统的局部便能开展工作,读不相干的代码,似乎没用。

我常常把写代码和写作进行类比,因为二者有很多相通之处。但从培养写代码和写作的过程来看,二者又有很多不同。我们的写作能力,是建立在大量基础阅读的基础上的,是除了学习语法、文法等知识外,经年累月,通过阅读各种不同层次的名家的作品,再加上各种各样的写作训练,累积出来的;而我们的写代码的能力,是在了解和掌握了语法/文法之后跳过了大量阅读名家作品的过程,直接动手实践从而自动养成的。这样略过大量阅读代码的阶段有三个害处:
  • 写代码的基础不牢靠。 —— 道理很简单,前辈们踩过的坑,总结的经验教训,你都不得不亲自用最慢的法子一点点试着踩一遍。
  • 很容易养成拿来主义的写代码习惯 —— 遇到不知如何写的代码,从网上找现成的答案,找个高票的复制粘贴改吧改吧,凑活着完成功能再说。写代码的过程中遇到问题,开启调试模式,要么设置无数断点一步步跟踪,要么到处打印信息试图为满是窟窿的代码打上补丁,导致整个写代码的过程是一部调代码的血泪史。
  • 你身边最强的工程师开发水平上限决定了你的水平上限。

因此,学会阅读源码,对于职业能力的提升跟发展有着非常重要而积极的意义。以下是我通过自己多年的经验,总结出来的一些源码阅读思路:
  1. 学会读根目录下的 readme,或者任何看上去撩拨着你让你戳它的文件。这就跟书本的「序」一样,能够帮你更进一步了解这份代码的意图;
  2. 需要聚焦在代码的目录结构,和每个源码的文件名。他们就像书本的目录页。如果每个目录下有 readme,也可快速阅读之。很多语言和框架,有约定俗成的目录结构(Convention by Contract),因此,通过目录我们就可以快速知道哪些是可以略过的部分,比如 django 的 management/commands 目录,elixir 的 mix/tasks 目录,这些目录,承载着支线剧情,需要的时候,或者闲得无聊时再读也不迟;
  3. 然后我们开始从入口梳理主线。不同语言和框架的主线不太一样,比如 C 的入口是 main(),erlang/elixir otp app 的入口是 app:start,nodejs 往往是根目录下的 index.js,等等。一般而言,application 的主线比较清晰,一路下来,会走到一个 mainloop,而 framework 的主线会晦涩一些,因为 framework 往往是 application 抽象出来的部分。
 
上一篇: 无

微信关注

获取更多技术咨询