前言
对于读源码这件事,每个人心中都有一个哈姆雷特,今天这篇文章聊聊我对读源码这件事的一点拙见
为什么读源码
读源码的时候,可以先问一下自己为什么读源码?是为了解决问题,还是单纯只是想了解源码的来龙去脉,更甚者仅仅只是为了面试,毕竟面试造火箭,不懂点源码,都没法去忽悠面试官
读源码首先要弄清楚自己的读源码的动机,以及通过读源码想达到什么目的
读源码的心态
读源码是一件很枯燥的事情,很多时候我们会因为一时鸡血,翻下源码,然后发现跟看天书一样
如何让读源码不那么枯燥,我们可以先定一个小目标
我们可以先把源码拆分成几个小章节,每阅读完,可以给自己奖励下,比如玩把游戏,吃个大餐,或者干一下你想做却没做的事情,让大脑得到一个正向反馈,即我做完这个事情,我会得到一些好处。源码有时候枯燥,是因为我们没有得到一个积极的反馈,更多时候是
读源码不能抱有急躁的心态,心急吃不了热豆腐
什么时候适合读源码
在我看来,读源码是建立在你对这个源码的编程语言已经很熟悉的情况,比如你想看k8s的源码,但是你对go语言一窍不通,你就一头钻进去研究,我想你大概后面的结局是
其次是你已经对这个源码的基本功能有个清楚的认知,知道他的应用场景,能利用他的一些特性来做一些编码,比如你会使用spring的依赖注入,AOP等
最后你对这个源码已经产生一点兴趣,有研究的欲望了,而不是别人强迫你去读,内在的自驱力以及兴趣,是做好事情的原动力
如何读源码
源码分为两种情况
第一种:很多人已经在研究的源码
像这种其实没必要一开始就钻进源码看,而是你可以针对你这个源码感兴趣的点,通过搜索引擎查找一下。你也可以通过processon搜一下相关的源码图,比如
不过这种有个不好地方,等于是别人把东西嚼碎了再喂给你,你想想那个画面。最后你还得通过源码验证一下,因为不确定别人分析的是不是正确的,而且看源码的时候,必须得格外关注一下你看源码的版本,比如你看spring2.5和spring5的版本,会有发现会有很多区别。
直接通过搜索引擎找源码,有个好处就是你可以很快找到你感兴趣调试的源码入口,以及一些相对比较核心的代码块。
如果这种大家都研究过的源码,你也不想通过搜索找答案,就是只想速成,也有方法的,就是花钱
找个培训机构或者付费教程,基本上这些机构都会教一些主流技术的源码。如果你只想白嫖,也可以去B站搜一下
但不管怎样,你吸收这些后,最后还得自己去跟踪调试验证下,因为只有源码不会骗人
第二种:偏门或者新出的技术
如果你研究的东西,大家研究比较少,要么是这个技术不是主流技术,要么就是这个技术未来可能是主流,只是目前受众比较少。
像这种源码,你也不用急着一开始就钻进源码,而是去官网溜一圈,看看这个技术的一些背景,特性,应用场景,入门案例。基本上每个技术的出现,是要解决某些问题,而这种技术的出现,正常会伴随和竞品的对比,而这种竞品正常也是大家耳熟能详的东西。比如redisJson和mongdb的对比。对这个技术有个整体的了解后,你可以看下他们的代码仓是否有提供完整的example或者单元测试,这些example正常提供就是这个技术的一个个功能点,你对这些功能点了解后,你就可以通过断点调试,通过调用栈查看相应的类。具体调试你就可以直接通过在单元测试或者提供的example那边打断点
总结
看完源码后,最好能形成一张源码知识地图,以便后续查阅。
聊完源码后,我说一点题外话,本来这篇文章是对之前自定义spi文章的收尾总结,后面是因为有朋友说想知道我是怎么读源码的,就干脆写一篇文章。我很少写这种理论的东西,希望对大家有一点帮助。