关于源码浅读😎
👉 引言:读源码是一种思维逻辑能力或者叫思维方式和方法论,而不是一种背诵能力,这是一个废物关于源码阅读的一些想法(吐槽),但或许能让你共鸣,不妨往下看看~
1. 程序员应不应该具备读源码的能力?
相信对于这一点,很多人跟我一样的答案,【应该】 在我从业期间遇到了形形色色的人,大部分自己具备此种能力,却不“自知”,这一类人有相当多。 怎么如此说呢?且听我鬼扯~
其实很多人接手的项目不是从0-1的,就算你入职一家公司之后,接到新的需求,也大概率不是从0-1去开发的。 那么你势必需要去阅读你这个岗位【前任】的代码,这何尝不是在阅读源码呢?
那这样看其实程序员都应该具备此种能力,那我为什么还要来谈论这个呢?
因为,现在非常多的码农都不“自知”,之所以不“自知”其实和如今程序员这一行的面试有关系。 但请相信我,不全是你的问题!看我怎么继续鬼辩~ 我说【不全是你的问题】基于如下假设或现实
几乎所有框架核心原理会写在官网,也就是人家的架构和核心逻辑。
大部分面试官分不清楚核心原理和源码的区别。也不清楚想要考察候选人什么能力。
大部分面试官没有可能有足够的时间和耐心去探索你。
大部分面试过程是在匹配你和面试官对于同一个八股知识点的记忆。
人太多,纯八股面试,卷出来的结果。
工作中,其实更需要的是阅读源码的能力。
人不可能清楚所有的源码知识点。
基于以上,我们继续聊
注意
我这里并不是在抨击八股取士,八股有相当的意义,因为它的确能够快速弥补一些前端基础的缺失。 但八股不应该被你死记硬背,死记硬背的确有效,但并不代表这是健康的。
2. 现在的面试真的是想考察你读源码的能力吗?
情况一:【面试官非常清楚他想要考察的是你的源码阅读能力,还是具体知识点】 我不敢说所有,因为的确有相当数量的面试官是真的能分辨出来你的关于源码的回答,到底是基于你的阅读能力,还是基于你的记忆能力,也就是说就算你和面试官看的不是同一篇八股,他也能通过你的答案或者是追问,推敲,对齐等其他方式判断出你是否具备他想要考察的能力,知道你究竟是理解了知识点还是背诵了知识点。而他想要的是你的理解知识点的能力本身,而不是知识点的记忆。 这一类面试官很清楚,如果团队需要你会Vue技术栈,那么他会关心你是否知道Vue核心原理,如果团队需要你的源码阅读能力,比如一些偏low level的开发工作,就需要你阅读源码的能力,而不是某一个知识点的记忆。
情况二:【面试官自己也不知道自己想要考察什么,就是拿你照镜子】 大部分面试官应该是属于这一类,因为其实不是每一个面试官都对候选者有足够耐心的,还要去挖掘去推敲你的回答是否是理解了知识点的。评判你的能力的标准,就是单纯看看,你的答案是否和他一样。 而这个时候如果你是真正理解的那一方,你说出具体细节时,他可能并不了解,他知道的一些细节,你可能忽略了,那就全凭天意了~
3. 读源码能力是什么?有高低之分吗?
先抛个观点:【笔者认为,阅读源码的能力有清晰和模糊的区别,没有高低之分,这取决于你是否总结过自己的一套源码阅读方法,因为其实方法有很多,条条大路通罗马,但是阅读量和经验上却有多寡的区别,从而拉开对比之时的高低差别】
因为是一篇偏入门的交流学习,对照论证,我先献丑,抛出自己的阅读方法,以其抛砖引玉。
首先你要有想要弄清楚的部分
(我并不推荐因为面试去阅读,那会败掉你的兴趣和求知欲,如果是面试,我推荐你去掌握核心原理部分,大都可以从官网了解到)把想要了解的源码版本repo拉到本地
阅读repo的contribution
(因为基本都会在这里告诉你如何跑起来项目和调试)用官方的测试用例或者自己写,在你想要理解的地方打上breakpoint
开始debug,记录下来call stack和scope
(流程其实只需要关注调用栈,但是个别框架还有一些标志位变量或者其他逻辑变量放在了全局,所以scope中的全局作用域,你不妨留意一下,记录可以使用drawio,excalidraw等画图工具,甚至你可以截图或拍照)到repo里索引源码部分,根据call stack和scope的记录来读
(这里就是真正开始阅读源码了)记录流程外你感兴趣的其他部分
(一些非你这次关注的逻辑之外,你感兴趣的点)
以上就是我平时阅读的方法了,非常期望你能和我分享你的一些阅读经验~
🖥️写在最后:
阅读源码就像是读书,沿着各个源码作者的编码思路进行探索的过程,一万个读者就有一万个哈姆雷特。