对于百万行代码级别的大型程序,应该如何去学习和看代码才更高效呢?哪些代码是需要重点看,哪些代码可以暂时忽略不看呢?

打卡Day39:今天学习了《98|高效学习:如何学习和阅读代码》,我的收获如下:

读文档还是读代码

  1. 想知道人为什么要这么搞,看书(像Effective C++、Code Complete、Design Pattern、Thinking in Java等),看文档。你能了解到思想,方法,原理,思路,经验。
  2. 想知道让机器干了什么,看代码(像Linus去看zlib的代码来找性能问题)。您能了解到具体细节,如某协程实现、某模块性能、某算法实现。
  3. 新手,多读代码,多动手写代码。要的不是做漂亮,而是做出来,这个阶段你会喜欢GitHub这样的东西。
  4. 老手,多找牛人交流(读牛人的书,是一种特殊的人与人的交流)。这个阶段你会喜欢读好的书和文章。
  5. 对于计算机行业,我们每个人都既是新手,也是老手。

如何阅读源代码

准备工作

  1. 基础知识。相关的语言和基础技术。
  2. 软件功能。先读一遍用户手册,然后让软件跑起来,先用一下感受一下。
  3. 相关文档。Readme、Release Notes、Design、Wiki。
  4. 代码的组织结构。目录、文档、框架。

代码构成

  1. 接口抽象定义。数据结构或业务实体间的关系。
  2. 模块粘合层。中间件、Promise模式、回调Callback、代理委托、依赖注入。
  3. 业务流程。不要进入细节,画高层流程图或时序图。
  4. 具体实现。
    • 代码逻辑。业务逻辑、控制逻辑(多线程处理、异步控制、远程通讯、序列化)要分开,避免代码混乱。
    • 出错处理。把处理错误的代码全部删掉,排除干扰。
    • 数据处理。倒腾数据的代码冗长无聊(如DAO、DTO,JSON、XML),不是主要逻辑,可以不理。
    • 重要算法。如索引表,全局唯一ID、信息推荐、统计等。核心,难读,但最有技术含量。
    • 底层交互。如和操作系统或是JVM的交互,没有底层技术知识,很难读懂。
  5. 运行时调试。用日志,debug设置断点,实际看一下运行过程。

阅读代码你需要一个很好的IDE,查看代码间相互的调用reference。

左耳朵耗子带你重学《左耳听风》

https://time.geekbang.org/column/article/14380