如何学习和阅读源代码
看文档与看代码
- 文档或书里边有会有很多想法和比较,会告诉代码要实现什么,为什么这样写
- 代码里都是一些细节,你只能从代码中推到出目的,并且不一定是准确的
所以当你想知道why 的时候,你应该去文档或书,当你想了解程序都干了什么,怎么干的,你就需要去读代码
在你刚开始学习的时候,你需要知识又感性的认识,需要自己多写,当你有了很多经验,有了足够的感性认识后,你需要去看作者的思想,技术的原理,从而让自己有理性的认识
阅读源代码
-
基础知识:需要你有相关语言和基础技术的知识,没有相关技术的基础,你也看不懂里边的内容
-
软件功能:你先要知道软件有哪些功能、那些特性、那些配置项,然后让软件跑起来,感受一下,有一个感性的认识
-
相关文档:readme、内部文档、wiki,这些可以让你知道软件的方方面面
-
代码的结构:也就是每个文件夹都是干什么的,下面是一些内容
- 接口抽象定义:任何代码都有很多接口或抽象定义。其中描述了代码需要处理的数据结构或者业务实体,以及他们直接的关系,理清这些非常重要
- 模块粘合层:代码中有很多是用来粘合代码的,如中间件、钩子、依赖注入、promises 模式、回调、代理委托等,这些代码模块间的粘合非常重要,因为这些将平铺值述的代码分离开来,让你不容易看懂
- 业务流程:这是代码运行的过程。一开始我们不需要深入细节,需要在高层弄懂业务是什么样的,在这个过程中,代码是怎样被传递和处理的。一般来说我们需要画程序流程图和时序处理图
- 具体实现:有了上边三点,已经对真个框架和逻辑有了大致的认识。这个时候就可以深入代码的具体实现了。你需要知道下面的一些事实,有助于你在阅读代码时,找到重点
- 代码逻辑:一般分业务逻辑和控制逻辑,业务逻辑是真正处理业务的,控制逻辑则是控制程序流转的,有些代码看起来非常乱,就是将这两种混在一起了
- 出错处理:根据二八原则,20%的代码是正常的逻辑,80%的代码是处理各种错误的。所以你在读代码是完全可以将处理的错误的代码删掉,留下干净、简单的代码,提高阅读相率
- 数据处理:只要你仔细观察,就会发现,很多时候,我们的代码就是在那倒腾数据,xml、JSON、DAO、DTO,这些代码冗长无聊,不是主要逻辑,不用理会
- 重要的算法:排序、搜索算法、一些索引表的算法、全局唯一ID的算法、统计算法、信息推荐算法、通读算法等,这些核心的算法,往往非常难度,但确实程序中最有技术含量的部分
- 底层交互:有些代码是和底层进行交互的,需要你有一定的底层基础,如跟操作系统、JVM交互的代码,不然就没法读懂这些代码
- 运行时调试:很多时候,只有代码运行起来的时候,才能真正知道发生了什么,日志也好、debug的断点调试也好,是了解代码很好的方式