# 如何读源码
# 读不懂的原因
- 缺乏必要的背景知识,犹如阅读天书
- 不理解项目架构、设计理念,始终不得要领
- 目标不够聚焦,阅读过程容易复杂化
- 容易陷入细节,在不重要的问题上纠结半天
- 容易追着分支流程跑,分散注意力
- 没有及时记录笔记和总结,没有把知识碾碎、重组、内化成自己的东西
- 没有处理过特别复杂问题的经历,潜在的不自信心理
- 个人毅力、韧性不足,或者目标感不够强烈,遇到困难容易放弃
- 等等
# 弄清目标
- 第一层,先弄清楚为啥要阅读源码?可能的原因有很多,例如:
为了增进对框架的认知深度,提升个人能力 为了应对面试 为了解决当下某个棘手的 bug 或性能问题 基于某些原因,需要对框架做二次改造 反正闲着,也不知道该学点啥,试试呗。。。 好奇
- 第二层,读者如果已经有了明确、具体、可衡量的目标,不妨在开始之前先自问几个问题:
当下确实需要以阅读源码的方式增进自己对框架的认知深度吗?有没有一些更轻量级,迭代速度更快的学习方式? 你所选定的框架,其复杂度、技术难度是否与你当下的能力匹配?最好的状态是你自认为踮踮脚就能够到,过高,不具有可行性;过低,ROI 不值当。
# 阅读技巧
# 了解背景知识
# 六步循环分析
- 理解项目结构
- 寻找合适的切入点
- 就着切入点查阅文章资料
- 就着切入点分析代码流程
- 局部深入研究
- 及时总结
- 之后,再继续设定切入点,重复执行上述流程直到透彻地理解了问题 这是一套在 「总-分-总」 视角之间反复横跳最终构建出完整视角的方法论,重点就在于告诉读者在什么阶段应该关注什么,忽略什么,输入什么,输出什么,我个人就是按照这个方法慢慢摸索出包括 Webpack、Babel、Vue、Vetur、mxGraph 在内的各种开源框架的实现原理。
# 理解项目结构
# 最佳实践
- 设定好具体、可衡量的目标,不要为了学习而学习,如果有切实的强诉求,那就别由于彷徨,马上去做
- 磨刀不误砍柴工,不要上来就对着源码疯狂输出,一定要花点时间站在高层视角去看框架的背景和生态
- 抓大放小,忽略哪些还不熟悉的概念、语句、工具、分支逻辑,你要认识到复杂事物的学习模型往往螺旋上升,逐步深入的,不可能过一遍就能掌握所有细节和精髓,如果一开始就过度关注细节,通常会让整个学习周期拉到无限长。要弄清楚啥时候,什么情况下应该忽略细节,什么时候应该抓住不放 —— 这与你的目标和切入点有很大的关系
- 随时笔记:一旦有任何新发现、新问题,做好笔记,记录下来,这些都会成为继续探索的重要线索
- 随时总结: 笔记记录当下的、零碎的发现,总结则将这些线索串联形成知识点。 总结过程你会发现更多认知漏洞,提出更多问题,可以反过来继续挖掘 好记性不如烂笔头,探索的结果落到纸面上才会真正成为你自己的东西,极端一点看,没有形成输出的学习过程往往会随着时间的流逝,变成徒劳
TIP
如何阅读源码 —— 以 Vetur 为例 ⭐️ https://mp.weixin.qq.com/s/ScSzuq-5Jvtanx6ks3hQkg/ (opens new window)