对于百万行代码级别的大型程序,应该如何去学习和看代码才更高效呢?哪些代码是需要重点看,哪些代码可以暂时忽略不看呢?
打卡Day39:今天学习了《98|高效学习:如何学习和阅读代码》,我的收获如下:
读文档还是读代码
- 想知道人为什么要这么搞,看书(像Effective C++、Code Complete、Design Pattern、Thinking in Java等),看文档。你能了解到思想,方法,原理,思路,经验。
- 想知道让机器干了什么,看代码(像Linus去看zlib的代码来找性能问题)。您能了解到具体细节,如某协程实现、某模块性能、某算法实现。
- 新手,多读代码,多动手写代码。要的不是做漂亮,而是做出来,这个阶段你会喜欢GitHub这样的东西。
- 老手,多找牛人交流(读牛人的书,是一种特殊的人与人的交流)。这个阶段你会喜欢读好的书和文章。
- 对于计算机行业,我们每个人都既是新手,也是老手。
如何阅读源代码
准备工作
- 基础知识。相关的语言和基础技术。
- 软件功能。先读一遍用户手册,然后让软件跑起来,先用一下感受一下。
- 相关文档。Readme、Release Notes、Design、Wiki。
- 代码的组织结构。目录、文档、框架。
代码构成
- 接口抽象定义。数据结构或业务实体间的关系。
- 模块粘合层。中间件、Promise模式、回调Callback、代理委托、依赖注入。
- 业务流程。不要进入细节,画高层流程图或时序图。
- 具体实现。
- 代码逻辑。业务逻辑、控制逻辑(多线程处理、异步控制、远程通讯、序列化)要分开,避免代码混乱。
- 出错处理。把处理错误的代码全部删掉,排除干扰。
- 数据处理。倒腾数据的代码冗长无聊(如DAO、DTO,JSON、XML),不是主要逻辑,可以不理。
- 重要算法。如索引表,全局唯一ID、信息推荐、统计等。核心,难读,但最有技术含量。
- 底层交互。如和操作系统或是JVM的交互,没有底层技术知识,很难读懂。
- 运行时调试。用日志,debug设置断点,实际看一下运行过程。
阅读代码你需要一个很好的IDE,查看代码间相互的调用reference。