# 如何读源码

# 读不懂的原因

  • 缺乏必要的背景知识,犹如阅读天书
  • 不理解项目架构、设计理念,始终不得要领
  • 目标不够聚焦,阅读过程容易复杂化
  • 容易陷入细节,在不重要的问题上纠结半天
  • 容易追着分支流程跑,分散注意力
  • 没有及时记录笔记和总结,没有把知识碾碎、重组、内化成自己的东西
  • 没有处理过特别复杂问题的经历,潜在的不自信心理
  • 个人毅力、韧性不足,或者目标感不够强烈,遇到困难容易放弃
  • 等等

# 弄清目标

  • 第一层,先弄清楚为啥要阅读源码?可能的原因有很多,例如:

为了增进对框架的认知深度,提升个人能力 为了应对面试 为了解决当下某个棘手的 bug 或性能问题 基于某些原因,需要对框架做二次改造 反正闲着,也不知道该学点啥,试试呗。。。 好奇

  • 第二层,读者如果已经有了明确、具体、可衡量的目标,不妨在开始之前先自问几个问题:

当下确实需要以阅读源码的方式增进自己对框架的认知深度吗?有没有一些更轻量级,迭代速度更快的学习方式? 你所选定的框架,其复杂度、技术难度是否与你当下的能力匹配?最好的状态是你自认为踮踮脚就能够到,过高,不具有可行性;过低,ROI 不值当。

# 阅读技巧

# 了解背景知识

# 六步循环分析

  • 理解项目结构
  • 寻找合适的切入点
  • 就着切入点查阅文章资料
  • 就着切入点分析代码流程
  • 局部深入研究
  • 及时总结
  • 之后,再继续设定切入点,重复执行上述流程直到透彻地理解了问题 这是一套在 「总-分-总」 视角之间反复横跳最终构建出完整视角的方法论,重点就在于告诉读者在什么阶段应该关注什么,忽略什么,输入什么,输出什么,我个人就是按照这个方法慢慢摸索出包括 Webpack、Babel、Vue、Vetur、mxGraph 在内的各种开源框架的实现原理。

# 理解项目结构

# 最佳实践

  • 设定好具体、可衡量的目标,不要为了学习而学习,如果有切实的强诉求,那就别由于彷徨,马上去做
  • 磨刀不误砍柴工,不要上来就对着源码疯狂输出,一定要花点时间站在高层视角去看框架的背景和生态
  • 抓大放小,忽略哪些还不熟悉的概念、语句、工具、分支逻辑,你要认识到复杂事物的学习模型往往螺旋上升,逐步深入的,不可能过一遍就能掌握所有细节和精髓,如果一开始就过度关注细节,通常会让整个学习周期拉到无限长。要弄清楚啥时候,什么情况下应该忽略细节,什么时候应该抓住不放 —— 这与你的目标和切入点有很大的关系
  • 随时笔记:一旦有任何新发现、新问题,做好笔记,记录下来,这些都会成为继续探索的重要线索
  • 随时总结: 笔记记录当下的、零碎的发现,总结则将这些线索串联形成知识点。 总结过程你会发现更多认知漏洞,提出更多问题,可以反过来继续挖掘 好记性不如烂笔头,探索的结果落到纸面上才会真正成为你自己的东西,极端一点看,没有形成输出的学习过程往往会随着时间的流逝,变成徒劳

TIP

如何阅读源码 —— 以 Vetur 为例 ⭐️ https://mp.weixin.qq.com/s/ScSzuq-5Jvtanx6ks3hQkg/ (opens new window)