01.23 Day 39 - 高效学习:如何学习和阅读代码

大家好,我是 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 交互的代码,读之前需要一定的底层技术知识。

运行时调试

使用日志或设置断点跟踪来看代码的运行过程,是了解代码的好方式。
 

阅读代码的方法

  • 自顶向下,从总体到细节的阅读法;
  • 画程序流程图、调用时序图以及模块组织图等等;
  • 归类代码逻辑、排除杂音;
  • 调试跟踪代码以了解其运行过程。
     

末了

重新总结了一下文中提到的内容:读文档读代码、读书/文档以了解思想/方法/原理、读代码以了解具体细节、阅读代码的方法以及技巧。

发布了77 篇原创文章 · 获赞 6 · 访问量 1611

猜你喜欢

转载自blog.csdn.net/stevenchen1989/article/details/104073855