大家好,我是 Snow Hide,作为《左耳听风》这个专栏的学员之一,这是我打卡的第 39 天,也是我第 42 次进行这种操作。
今天我温习了该专栏里一篇叫《高效学习:如何学习和阅读代码》的文章。
关键词总结:读文档还是读代码(代码、文档/书、人人对话、人机对话、看书或代码的目的、看代码而不看文档的原因、从感性认识到理性认识)、如何阅读源代码(阅读代码的前提(基础知识、软件功能、相关文档、代码的组织结构)、代码组成部分(接口抽象定义、模块粘合层、业务流程、具体实现(代码逻辑、出错处理、数据处理、关键算法、底层交互)、运行时调试))、阅读代码的方法。
所学总结:
读文档还是读代码
代码
What(实现什么), How(怎么实现) & Details(实现细节)。
代码会告诉你细节。细节是魔鬼,它决定成败。
文档/书
What(实现什么), How(怎么实现) & Why(为什么这么实现)。
代码并不会告诉你 Why。它能让人一通百通,也是能让人醍醐灌顶的东西。
人人对话
书和文档是人对人说的话。
如果你想知道为什么要这样做,那么应该去看书,看文档。
人机对话
代码是人对机器说的话。如果你想知道机器都干了什么,那你应该看代码。
看书或代码的目的
- 如果你想了解一种思想、方法、原理、思路、经验,那么阅读书籍和文档会更高效;
- 如果你想了解的是具体细节,比如协程的实现、模块的性能、算法的实现,那么阅读代码是比较靠谱的。
看代码或看文档的原因
- 当没有文档或文档质量较低时,需要看代码;
- 当掌握的知识既不系统,也不结构化时,需要看书;
- 在不了解原理,读不懂代码或误解代码用意时,需要了解技术原理方面的基础知识;
- 当不清楚一个算法的实现时,需要先看这个算法的设计思想,再看代码;
- 当自己写的代码别扭时,需要看别人是怎么实现的。
从感性到理性
- 如果你是新的,那应该多读代码,多写代码,你需要的是 “感性认识”。所以,新手阶段的你会喜欢 Github;
- 如果你是老手,已经有多年的 “感性认识”,那你接下来需要的则是更多的 “理性认识”。所以,该阶段的你会喜欢读高质量的书籍以及文章。
如何阅读源代码
阅读代码的前提
基础知识
相关语言和基础技术的知识。
软件功能
有哪些特性、配置项。先读一遍使用手册,感受一下运行起来的软件是什么样的。
相关文档
相关的内部文档,Readme、Release Notes、Design 或 Wiki。
代码的组织结构
每个目录实现什么功能,每个文档是做什么的。如果要读的是在某种标准框架下组织的程序,那代码就不难理解了。
代码组成部分
接口抽象定义
代码有很多接口或抽象定义,了解来龙去脉是非常关键的。
模块粘合层
中间件(middleware)、Promises 模式、毁掉(Callback)、代理委托、依赖注入等等。这些技术将平铺直述的代码分裂了,所以不容易看明白其中缘由。
业务流程
数据是如何被传递和处理的。需要用到程序流程图或时序处理图。
具体实现
深入细节,阅读代码的具体实现。
代码逻辑
- 业务逻辑:处理业务的代码;
- 控制逻辑:控制变量、多线程处理、异步控制、远程通讯以及对象序列化反序列化等等。
出错处理
阅读代码时将处理错误的代码删掉。
数据处理
大部分代码是做数据传输的。例如 DAO、DTO、JSON 或 XML 等等。
关键算法
索引表、全局唯一 ID、信息推荐、统计以及通读(Gossip)等最有技术含量的核心算法。
底层交互
与操作系统或 JVM 交互的代码,读之前需要一定的底层技术知识。
运行时调试
使用日志或设置断点跟踪来看代码的运行过程,是了解代码的好方式。
阅读代码的方法
- 自顶向下,从总体到细节的阅读法;
- 画程序流程图、调用时序图以及模块组织图等等;
- 归类代码逻辑、排除杂音;
- 调试跟踪代码以了解其运行过程。
末了
重新总结了一下文中提到的内容:读文档读代码、读书/文档以了解思想/方法/原理、读代码以了解具体细节、阅读代码的方法以及技巧。