如何高效地阅读开源项目源代码
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
1.引言
这篇文章是萌叔对阅读开源项目源代码的一般思路和方法的总结。
2. 带着问题去阅读?
首先需要搞清楚为什么你要阅读这个项目的源代码?你想从阅读这个开源项目获得什么?
- 是看项目的代码如何布局?
- 以RocketMQ为例,你是想了解为什么RocketMQ有强大的吞吐能力?
- 以RocketMQ为例,Clustering模式下,同组的消费者如何保证负载均衡?
- 以RocketMQ为例,你是想了解死信队列的作用?
总之需要在阅读之前多给自己提问题?在阅读的过程中也要给自己不断的提问题。
一个成熟的开源项目的源代码动辄就是上万行。根据二八法则,其实核心的代码顶多就是20%,剩下的大量都是参数解析,判断各种条件,处理错误、异常情况等防御性编码。在阅读时,要学会跳过这些代码,只关注自己感兴趣的代码,以节约时间。
3. 阅读官方文档并使用一段时间后,再去阅读源代码
"没有调查,没有发言权"--李德胜
建议先阅读官方文档,并针对开源项目对应的工具或者服务使用一段时间,再去看源码。官方文档中往往会有关于这个服务的架构说明,核心原理的讲解,有的还会给出最佳实践,这对于我们快速理解这个项目的有很大的帮助。
使用一段时间有助于加深对项目的理解,了解它的应用场景,优点和缺点,也可以在脑海中产生更多的问题。如果是服务,能够亲手搭建一次最好,特别是要关注配置文件中的参数说明,留意哪些参数可能对服务性能造成的影响。
4. 站在巨人的肩膀上
充分借鉴前人的智慧,搜搜已经公开的资料,看有没有诸如
- "xxx源码解析"
- "xxx原理"
- "xxx总结"
- "xxx过程分析"
如果运气好,已经有人对你疑惑的问题做出了解答。如果运气再好点,说不定还会把核心代码涉及的文件、函数列得清清楚楚,这样通常我们只需要沿着文章的脉络把核心代码再看一遍即可。
5. 从哪里开始?
5.1 顺着接口往里看
对于有接口的服务,可以顺着接口往里看,从接收到请求开始,到最后输出响应结果
5.2 从数据库看起
对于有数据库的服务,还可以从数据库表结构看起,看都针对数据库表都有哪些操作
5.3 从Example和单元测试看起
example和单元测试往往都是侧重一个场景。从特定场景入手会比较好理解
6. 抓住核心脉络
6.1 数据流&控制流
绝大多工具或者服务都可以看做过滤器
所以我们只要关注数据在系统中的流动就可以了,还有的系统除了数据流之外,还有单独的控制流
6.2 状态机
一些系统内部有比较多的状态,比如订单系统,这种情况我们可以手绘一下状态机,多关注一下状态变换所需要触发的条件。
7. 举一反三,多做对比
比如我们再看RocketMQ源码的时候,我们就可以想想它和kafka在架构上有什么不同,各有什么优点缺点。
8. 多做分享
人们对一个知识的理解程度往往可以分为三个层次。
当你能够把看完的一个开源项目,并能够给其他人讲明白的时候,你才算是真的搞明白了。另外分享的过程也是查余补缺的过程,一些原先你没有关注的点,可以重新熟悉起来。在分享的过程中,与他人交流的过程,思想的碰撞往往带来新的火花。
萌叔认为 技术分享是利人利己的好事,大家可以多做。
总结
以上就是萌叔的阅读源代码的经验总结,希望对大家有所帮助。