扎实的基础知识+正确的方法是快速阅读源码的关键
上一篇我们快速的复习了阅读源码的步骤,同时对比了JUnit3和JUnit4之间的差异。
本篇是《如何高效阅读源码》专题的第十四篇,也是最后一篇,对专题内容做一次总结。
首先,专题第一篇文章描述了几种不正确的阅读源码的方式:
-
在不了解项目的情况下就去阅读源码
-
直接就读最新版本的源码
-
一行一行的读完整的源码
-
通过debug的方式阅读源码
这几种方式之所以是错误的方式,是由于我们的记忆所决定的:我们的记忆可以分为「短时记忆」和「长时记忆」!对于「短时记忆」来说,一般正常人一次只能记忆7(加减2)个左右的无规律信息。上面的四种方式实际就是在做无规律记忆。可没有哪个项目的行数是7行左右的,所以上述阅读源码的方式,是很难读完项目源码的。
接着,专题第二篇提供了15种提高源码阅读效率的小技巧:
-
了解作者开发项目的目的:知道了靶子,才知道方向
-
先熟练使用起来:先学会走,再去跑
-
阅读官方文档:最了解项目的还是作者本人,好好读读文档
-
先理解概念:我们实际都是在通过概念来理解这个世界
-
了解版本技术背景:了解技术限制,版本迭代改变的不一定是需求,可能只是技术本身
-
没必要读最新版本的代码:新版本的功能多,但核心功能实际并没有变化
-
不需要读完所有的源码:少则几万,多则几百上千万行的代码量你能读完?
-
多版本比较阅读:了解版本间的差异,能更好的理解项目
-
自顶向下梳理:先梳理整体流程
-
自底向上归纳:总结很重要
-
先做减法,再做加法:先找出核心模型,基于核心模型扩展
-
从接口找关系:接口是对外协议,可以快速定位调用方
-
画图辅助阅读:90%的信息来源于视觉
-
设计模式辅助阅读:理解设计模式能加速代码的理解
-
debug只是辅助:debug只是用来验证梳理的流程是否正确
这15个小技巧的目的,就是在建立对目标项目的印象和模型。
最后,我们梳理了详细的阅读源码的步骤:
-
「HelloWorld的大用途:通过demo,构建黑盒模型」:我们解释了什么是黑盒模型以及如何通过demo来构建黑盒模型
-
「如何通过阅读文档,构建概念模型?」:我们解释了为什么要阅读文档;到哪里去阅读文档以及如何阅读文档。同时阐述了如何构建概念模型,最后通过概念模型验证和完善黑盒模型
-
「聚焦核心模块,少阅读80%的「无用」代码」:我们解释了为什么要找核心模块以及定位核心模块的方法
-
「高效阅读源码的关键:构建核心抽象模型」:我们解释了什么是抽象模型;为什么要构建抽象模型,以及如何构建抽象模型。最后通过JUnit4演示如何构建抽象模型
-
「无需debug,通过抽象模型快速梳理代码核心流程」:我们演示了如何通过抽象模型来梳理核心流程
-
「通过对抽象模型和概念模型的整合,细化项目整体流程」:我们解释了为什么要绘图;如何绘制核心流程图;以及如何将抽象模型和概念模型进行整合
-
「模型的威力:基于模型,快速梳理源码」:我们解释了如何确定调用类;并通过梳理调用类来完善项目流程。
-
「提出问题,解答问题!这才是理解代码设计的正确方法」:通过回答前面提出的问题,来理解代码的设计
-
「Spring是如何整合JUnit的?JUnit源码关联延伸阅读」:我们梳理了TestRunner的执行流程以及Spring如何整合JUnit
-
「同一项目、不同版本之间源码的阅读」:通过对JUnit3源码的快速梳理复习了一遍前面的阅读步骤,并对JUnit3和JUnit4进行比较。
从上面的流程,你会发现,我们实际是在:
-
不断的对源码进行建模
-
再将模型代入到流程中,对流程进行细化
不断的重复这两个步骤,从核心模块到非核心模块一点点对流程进行细化完善,最终得到完整的项目流程。
读源码是个主动探索的过程,需要不停的根据代码来构建你的流程模型。当你发现你在机械的跟着代码StepIn、StepOver的时候,不妨喝口咖啡、上个厕所、歇一歇,这样反而能提高你阅读源码的效率。
同时,你的基础越扎实,阅读源码的效率就越高,在「提出问题,解答问题!这才是理解代码设计的正确方法」一文中你应该深有体会,在熟悉设计模式的情况下,能快速的理解代码设计。相应的,如果你的算法知识扎实,你就能很快理解语言里集合的设计;如果你的IO和并发知识扎实,你就能快速的理解Netty的设计、Redis的IO模型。
最后希望本专题提供的阅读源码的方法能助你读完第一个开源项目!