开源项目源码学习过程
1 准备工作
1.1 相关文档:
阅读代码时, 应该尽可能地利用任何能够得到的文档,如果已经有相关书籍,将会得到更大的帮助。
- 使用文档:清楚目标项目的使用方法、功能列表;
- 架构文档:一个系统可以(在重大的系统中也确实如此)同时出多种不同的构架类型. 以不同的方式检查同一系统,分析系统的不同部分,或使用不同级别的分解, 都有可能发现不同的构架类型
- 对比选型:寻找同类竞品的对比文档,清楚目标项目的优势与特色
- 社区讨论:顺着讨论思路,一个问题点切入,便于快速进入状态并找到归属感
1.2 相关工具:
- 阅读工具:VS Code、IDEA
- 版本工具:Git、SourceTree
- UML工具:可以将源代码输入到建模工具中, 逆向推导出系统的构架,如:EnterpriseArchitecture、IDEA
1.3 心态
在阅读向导生成的代码时, 不要期望太高, 否则您会感到失望,阅读有收获即可
2 操作过程
2.1 安装
通过安装过程,获取如下关键信息:
- 依赖组件:目标项目的实现通过哪些工具;
- 安装目录:提供一些使用和运行的基本信息
- 工具类库:项目提供了哪些工具方便我们使用
2.2 运行
运行系统关注两个地方:
- 命令行或者API功能:目标项目的提供的功能,建议首先熟悉核心功能的基本使用方式
- 配置文件:目标项目预留的参数,建议首先学习各个配置文件都起到哪些作用。
2.3 原理
关键特性的基本实现原理
- 相关原理:理解理论基础,如果有必要,快速学习下目标项目的理论基础;
- 相关模式:如果核心功能使用了设计模式等,如果不熟悉或者遗忘,快速复习下基本知识点;
- 实现原理:通过文档快速理解项目的基本组成结构和设计思想;
- 对比分析:优缺点对比分析,得到项目在设计和实现过程中的取舍;
2.4 测试
测试用例很关键,优先查看项目的测试用例:单元测试、集成测试;
2.5 阅读
源码不是第一步,而是最后一步。不要一上来就去看源码,而是要基本掌握了功能、原理、关键设计之后再去看源码,看源码的主要目的是为了学习其代码的写作方式,以及关键技术的实现。
- 确定阅读范围:不建议通读所有源码。
- 跟踪核心流程:通过示例,查看具体的调用栈
- 不用只关注数据接口和算法:Nginx 使用红黑树来管理定时器,只要知道这点就够了,并不需要去研究 Nginx 实现红黑树的源码是如何写的,除非你需要修改这部分,但我认为极少人会有这个需求。