2

如何高效地阅读开源项目源代码

 1 year ago
source link: https://vearne.cc/archives/40003
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

这篇文章是萌叔对阅读开源项目源代码的一般思路和方法的总结。

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 数据流&控制流

绝大多工具或者服务都可以看做过滤器
620becba-5114-11ed-9d78-5626e1cdcfe2.png
所以我们只要关注数据在系统中的流动就可以了,还有的系统除了数据流之外,还有单独的控制流

6.2 状态机

一些系统内部有比较多的状态,比如订单系统,这种情况我们可以手绘一下状态机,多关注一下状态变换所需要触发的条件。

14025c32-5116-11ed-a100-5626e1cdcfe2.png

7. 举一反三,多做对比

比如我们再看RocketMQ源码的时候,我们就可以想想它和kafka在架构上有什么不同,各有什么优点缺点。

8. 多做分享

人们对一个知识的理解程度往往可以分为三个层次。

633ff6fe-5118-11ed-8e7e-5626e1cdcfe2.png

当你能够把看完的一个开源项目,并能够给其他人讲明白的时候,你才算是真的搞明白了。另外分享的过程也是查余补缺的过程,一些原先你没有关注的点,可以重新熟悉起来。在分享的过程中,与他人交流的过程,思想的碰撞往往带来新的火花。

萌叔认为 技术分享是利人利己的好事,大家可以多做。

以上就是萌叔的阅读源代码的经验总结,希望对大家有所帮助。


微信公众号

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK