我先说下自己的经历吧。
我比较完整的读过的有wordpress,ttserver(tokyotyrant+tokyocabinet),memcached,redis的源码,最近正在系统地读nginx的源码。
相信重复的力量
读源码过程中最深的一点体会就是,重复重复再重复。当年读ttserver源码是刚入行,本来对C就不熟,ttserver里有很多比较奇怪的代码习惯,于是硬着头皮vim一行一行一遍一遍地看,有些不懂的地方,看十来遍,还真就懂了,可能算是量变引发质变吧。
从数据结构入手,先想后读
然后后来我学聪明了一点,不再从main函数一行一行的开始,学着先读 .h 文件,了解数据结构,结合能找着的文档,脑补作者的思路,在这个基础上再去读源码,看自己和作者想的有什么不一样,经常能发现自己错误或者不周全的地方,偶尔也能窃喜和大师们的不谋而合。
善用工具
再后来发现原来有ctags这类东西,如有神助,加上这时对C语言的基本写法有了一些了解,读码效率顿时提升。今年下半年在lua和nginx中选了先读nginx代码,目前结合一些工具做记录,也颇有成效。
理论与实践结合
当然,我读过的所有源码,都不是为了读而读,基本都是我工作中经常会用到,会面对的一些东西。所以这里有一点也很重要,建议最好先了解你这个东西的功用,再去读源码,否则真的很难读懂。最最好的当然是经常用到的东西,自己对其本身的功能已经很熟悉了,甚至说内部实现机理都能略说一二,这时候读起来肯定更省力。
教就是学
读码之后写文章也不错,有时候你以为自己读懂了,真提笔要写一个模块分析的时候,突然发现还有东西是模糊的,或者前后逻辑串起来是矛盾的,这种事也常有。于是我一直认为,能真正写出一篇让人看得懂,没有问题的分析文章,才真的算是读懂了一个模块。
我就先扯到这,期待更多牛人们的分享!