当前位置 : 主页 > 编程语言 > 其它开发 >

扎实的基础知识+正确的方法是快速阅读源码的关键

来源:互联网 收集:自由互联 发布时间:2022-06-11
上一篇我们快速的复习了阅读源码的步骤,同时对比了JUnit3和JUnit4之间的差异。 本篇是《如何高效阅读源码》专题的第十四篇,也是最后一篇,对专题内容做一次总结。 首先,专题第

上一篇我们快速的复习了阅读源码的步骤,同时对比了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模型。

最后希望本专题提供的阅读源码的方法能助你读完第一个开源项目!

公众号:一瑜一琂
网友评论