如何阅读源码

December 14, 2023
测试
测试
测试
测试
1 分钟阅读

从哪里开始读起,怎么读

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

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

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

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

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

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

什么样的源代码适合阅读

一般是“麻雀虽小五脏俱全”的项目适合阅读,在这里 C/C++ 方面的可以推荐几个供读者参考

TinyXML cJSON Libevent Memcached Redis Leveldb Nginx Lua …… Python Web 框架方面:

Flask Django JavaScript 方面:

jQuery

不在浮沙筑高台

并不推荐一上来就是看源码,一般是当你在某个方向上有一定的基本知识积累了才开始去尝试阅读。譬如c 服务器的后台代码,当然是需要对 linux 下的网络/系统编程有一定的认识,甚至读过 W.Richard Stevens 的几本经典之作。譬如 Django Web 框架,当然是需要对 Python 和 Web 方面有一定的认识。不然,完全的新人去阅读代码,只会信心受打击。

推荐每一位初学者在某一技术方向上有基本的积累后,可以找一个优秀的开源项目,并试着阅读。不懂没有关系,既然是优秀且开源的项目,网上必定会有很多的资料以及文档,这些都能为你读懂源码提供很多的帮助。你会有很多的收获,首先可以见识业界的编程规范如何,这是程序员的基本素质;可以接触到一些优秀的框架或者模式,这些是前人在大量的实践中总结出来的,必定是行而有效的,夯实你在某个技术方向上的认知;最后,就是练就你的耐心和毅力了。阅读源码本身是枯燥乏味的过程,我经常看一个模块一两天,来来回回往往复复,假使心浮气躁,容易浅尝辄止,半途而废。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多