Via 由 [ ] 提供

从哪里开始读起,怎么读

这个问题简单,程序从哪里开始就哪里开始读起。譬如,C 代码,当然是从 main(),其他语言也是类似的。但阅读的时候,要带着问题去读。

带着最简单的问题,开始阅读源码。

拿到一个别人写的代码,或多或少,细节有很多,不可能一开始就能把所有的细节都吃透,所以需要一个简单的问题先把整个代码系统的阅读一遍,知道里面的整体框架是怎么样的。譬如 Memcache/Redis 这种 key/value 系统,当它们收到一个 set/get key 请求,是如何做相应的呢?整个服务是如何运作起来的?譬如 Django,当它拿到一个 HTTP 请求,是如何做相应的呢?带着这些简单的问题,浏览源代码能更快了解它们的代码框架是怎么样的,对于之后继续阅读里面的模块,也是非常有好处的。

读源代码,框架才是最先需要了解的,细节才是最重要的。

看到一个函数, 首先要做的是知道这个函数到底做了什么, 而不是他底层是怎么实现的。这有点类似于英语中的阅读理解,遇到文中陌生的单词,首先是根据上下文来判断它是什么意思,到最后真的不能理解再回头拿字典去查单词。

忽略变量声明。好的开源 C 代码会将所有变量提前声明,即放在函数的开头。实际上,没必要例会这一大坨的变量,等遇到用到这个变量的时候自然就能懂得这个参数是用来做什么,而不用我们首次见到就猜测它的用处。 画出函数的调用链,用自己认为最合适的图表说明问题。有时候 Redis 里面的调用链比较长,经常画满一张 A4 纸。在每个函数旁边都标注它所完成的事情,这是收集线索的一个过程,可能会非常的枯燥。

我会在小册子的最后推荐几款源码阅读的软件。

上一篇: 源码日志 下一篇: 不在浮沙筑高台