业界的浮躁
打开B站学习编程,各种XXX源码解析、深入理解XXX源码的视频五花八门(大部分内容粗制滥造,尤其是图灵、马士兵这俩机构的视频,妥妥营销号,标题党!令人作呕!);培训机构也喜欢贩卖焦虑,推出各种源码讲解课程;去知乎上逛逛也是讲:要看XX源码,深入学习才能成为大神。
图灵 | 马士兵 |
---|---|
![]() | ![]() |
看源码正确步骤?
那些直接叫你看源码的人一定是没有看过源码的人。
源码不是学习教材,是一个工业化的产物!所以其中必然包括了处理各种业务场景的复杂逻辑,直接看源码势必绕进这繁琐的细节当中,迷失在了源码里,也迷失了自己从初心。且不说这种复杂逻辑难以看懂,就算看懂了又能学到到多少东西呢?投入产出比又是多少呢?
应用(XXX的功能)–>原理(基本设计思想与架构)—>源码(具体技术实现)
-
看XXX的源码,首先要知道XXX怎么用?都有哪些功能?起码要做到熟练应用吧。这些功能对XXX的开发者来说就是需求。我们自己写代码首先也是要先理解需求嘛。
-
有了需求,首先是概要设计啊,架构是怎么样的?数据结构是怎样的?业务流程是怎么样的?我看想要了解XXX的具体实现,首先要明白其基本原理(架构、数据结构、基本流程……)。先把对于XXX的认知框架搭建起来,理解XXX的主干。对于主干的理解,去百度别人现成的总结就行,不要试图从源码细节中归纳出主干,这是个愚蠢的行为。
-
看源码细节,要带着问题去看,这个问题越具体越细节看源码的效率越高,投入产出比越高。因为问题精确,就能精确定位到需要理解代码片段。看一段代码要比看整个框架代码容易的多啊。而且看代码之前,一定要先看注释,这非常有助于理解源码作者的意图!如果直接去看源码到头来大概率会迷失。同时要使用idea生成类图,分析继承树,会更容易理解。
我看了三四天的Spring IOC源码解析视频,看老师debug基本上一行行分析Spring干了点啥,到最后我是清楚了IOC容器的基本原理,但是投入产出比太低了。换句话说,如果我要把IOC容器启动全流程的源码细节看懂,三四天是远远不够的。而且我看源码的时候,没有一个具体的问题,导致我只是流水账似得跟着老师一行行的走,看的过程中没有思考,相当于白看了。
看源码为了什么?
- 看源码不是为了装逼的!不要觉得看了XX源码就牛逼了,不存在的。所以首先要放平看源码的心态的。
- 看XXX源码是为了更好的使用XXX,理解其原理与具体技术实现后,使用起来肯定会更加得心应手,出了问题也更好排查。更高级点,还能拓展XXX,给XXX写插件。(比如基于Spring写点自己的工具,MyBatis的作者就肯定看过Spring的源码)
- 看XXX源码是为了能实现一个与XXX相似的东西,如果我要实现某个功能,不妨先看看已有的产品是如何实现的。
- 看XXX源码不是为了面试的,为了面试直接去看别人总结好的就行了,实在理解不了,就死记硬背,能背下来也差不多能糊弄过去。
最后
一定是先弄清基本原理(架构),详细原理(业务流程、数据结构),有了具体的细节的问题再去看源码片段(最好以debug的方式)。不要,不要,不要直接看整个源码!