借这个机会总结一下我今年的实习吧。
其实看源码最好的方式,是去看和你项目相关的代码。而不是漫无目标,见到源码就读。再好的开源代码,也是人写的,一波人有一波人的代码规范和要求。哪怕同一个开源项目下,不同的模块用到的代码模式都是差异很大的。
最好的当然是问一下懂你要看的代码块部分的人,让他们给你拉一个大致的方式,讲讲背后的decisions。这样读起来脉络就要比自己一头扎进去要高效不知道多少倍。
我个人总结的读源码的方式有两种,一种是从头缕到尾,这样的可能更合适那种代码库比较少的。另外就是从尾开始读,最好就是读你需要写代码的地方和周边。
善用blame history,可以看到历史版本迭代,还能看到各个commit的历史细节,抓大放小。还是要把主干抓到,然后再去细读关键的函数和逻辑。
还有就是要带着目标去读。比如说你需要实现某个功能,那你就看看commit里面有没有相关的feature,这个feature在哪些文件里面写了代码,这样一来,你需要加的代码,大致也需要在这几地方添加内容。
然后还有一点就是,需要了解自己项目里面最关键的关键词和关键函数,先把这些搞个七七八八,这样读起来的时候,也更容易了解内容。
还有就是去读你常用的语言里面的各种数据结构的实现也是一个很好的开始。学Java的人,肯定都会遇到HashMap,这种源码的解读随便搜也是一大把。先从这种地方入手,知道怎么追踪代码,然后看人家是如何实现细节的。轮子哥 @vczh 说的方式就很好呀,自己手动去实现一下HashMap,考虑一下都需要实现哪些函数,需要哪些变量,然后就去实现。
然后这些简单的数据结构,其实在Leetcode上面就有呢。自己实现了之后,再去看看官方是如何实现的。