-
打个分吧:

如何学习源码、如何高效学习一个新知识

学习轮子源码是提升自我技术的有效途径,也是高阶程序员的必备技能。这套方法也适用于绝大多数知识体系的学习~

3分钟阅读
-
-

什么时候看源码

对于复杂的开源项目,一上来就看源码是不合理的,可能导致效率低下,适得其反。

往往看一个开源项目源码前,我们会经历以下几个阶段:

  • 刚接触一个开源项目,跟着官方文档,运行一些demo实例
  • 在工作项目中应用、实践、踩坑
  • 能够熟练使用,了解它的一些设计思想,但是还不知道设计原理

经历过以上几个阶段后,就是开始看源码的最佳时期

如何看源码

1. 检索收集信息

如果你不是一个走在行业最前端的人,那么你踩过的坑,一定有前人踩过。你想学的东西,也一定有前辈早已研究透彻。

如果一定有人走过我们要走的路,那么我们就应该利用好这个互联网大世界,在踏出征途前,先从无数优秀前辈身上,汲取一些“旅行攻略”。

不光是学习源码,对于绝大多数我们即将要做的事情来说,检索收集信息都应该是第一步,甚至要放在计划制定之前。

学习开源项目源码之前,带着它的名称 + “如何学习” 作为关键词,检索信息,对于我们程序员,甚至可以先搜一搜这个项目相关的面试题。

这有助于我们用最短的时间,去了解这个项目最值得我们学习的地方,让我们更加清楚我们想要什么;也有助于我们收集学习资料,提高学习效率。

2. 宏观了解

从全局的视角去了解整个项目,这有助于形成整体的知识结构,上来就从细微处硬啃,效率极低。

可以从以下几个方面着手:

  • 项目的背景、项目作者亲述的背后的故事、项目纪录片
  • 项目解决的问题
  • 浏览代码仓库,了解其Issue报告规则、PR规则、贡献规则、开发环境...
  • 源码的目录结构
  • 项目的元数据。例如package.json,看看项目的依赖/脚本
  • 构建方式,运行环境,入口,构建输出
  • 项目的历史版本和当前版本的区别,未来的发展方向
  • 项目的技术选型:项目的技术依赖,优化方案,类型控制,格式检查,代码规范,API接口设计,单元测试等

3. 重点切入

有了你对项目的熟练使用,有了对项目设计思想的了解,有了对项目整体的认知,那么我们就可以开始带着问题细啃源码,去了解这个项目的重点的实现原理。

  • 比如这个项目最重要的核心思想,是如何实现的;
  • 比如你在实践中经常踩坑的点,是如何产生的;
  • 比如那道最高频的面试题,面试官到底想考我们什么;
  • 比如那些你在实践中经常用到的特性,是如何实现的
  • ...

带着这些切入点去看源码,逐一击破,最终就可以建立一个完整的知识体系。

4. 模仿实现

当掌握了项目的宏观结构 + 重点特性的实现原理后。就可以开始自己动手,尝试实现一个类似的简单小项目。

这个项目不需要完整的重复造轮子,不需要完美的关注细节,只需要把我们所学到的结构应用其中,把关键特性模仿实现即可。

这个过程有助于我们查漏补缺,在自己动手踩坑的过程当中,把学到知识融会贯通。

5. 开源贡献

当我们掌握了知识之后,根据费曼以教为学的方法,我们最后应该做的就是输出。比如:

  • 输出学习总结
  • 反馈项目社区:参与共建,做开源贡献,解决issue,做插件开发

举一反三

这套方法其实适用于绝大多数知识体系的学习

上次更新:

评论区