当前位置:网站首页>如何学习和阅读代码
如何学习和阅读代码
2022-07-01 01:11:00 【冥王哈迪尔】
如何阅读代码
- 软件功能。你先要知道这个软件完成的是什么样的功能,有哪些特性,哪些配置项。你先要读一遍用户手册,然后让软件跑起来,自己先用一下感受一下。
- 相关文档。读一下相关的内部文档,Readme 也好,Release Notes 也好,Design 也好,Wiki 也好,这些文档可以让你明白整个软件的方方面面。如果你的软件没有文档,那么,你只能指望这个软件的原作者还在,而且他还乐于交流。
- 代码的组织结构。也就是代码目录中每个目录是什么样的功能,每个文档是干什么的。如果你要读的程序是在某种标准的框架下组织的,比如:Java 的 Spring 框架,那么恭喜你,这些代码不难读了。
代码的构成部分
- 接口抽象定义。任何代码都会有很多接口或抽象定义,其描述了代码需要处理的数据结构或者业务实体,以及它们之间的关系,理清这些关系至关重要。
- 模块粘合层。我们的代码有很多都是用来粘合代码的,比如中间件、Promises模式、回调、代理委托、依赖注入等。它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。
- 业务流程。这是代码运行的过程。一开始,我们不要进入细节,但需要在高层搞清楚整个业务的流程是什么样的,在这个流程中,数据是怎么被传递和处理的。一般来说,我们需要画程序流程图或者时序处理图。
- 具体实现。了解上述三个方面的内容后,就可以开始深入细节,阅读具体实现的代码。从以下几个方面入手。
- 代码逻辑。业务逻辑:业务的处理逻辑;控制逻辑:控制程序流转。要把这两种逻辑分开。
- 出错处理。20%的代码是正常的逻辑,80%的代码是在处理各种错误。读代码时,可以把处理错误的代码全部删除,只留下比较干净和简单的正常逻辑的代码。
- 数据处理。过于冗长,而且不是主要逻辑,可以不理。
- 重要的算法。不一定是什么排序或者什么搜索算法,可能是一些其他的核心算法,比如索引表的算法,全局唯一ID的算法,信息推荐的算法,统计算法,通读算法(如Gossip)。最有技术含量的部分。
- 底层交互。一般来说是和OS或者JVM的交互。阅读这些代码需要一定的底层技术知识。
阅读代码的方法
一般采用自顶向下,从总体到细节的“剥洋葱皮”的读法。
画图是必要的,程序流程图,调用时序图,模块组织图……
代码逻辑归一下类,排除杂音,主要逻辑才会更清楚。
debug 跟踪一下代码是了解代码在执行中发生了什么的最好方式。
边栏推荐
- 一站式洞察行业热点,飞瓜数据B站新功能「流量大盘」上线!
- org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms)错误解决
- [deepin] common sets
- [Qt5 basics] random number display
- Microbial safety and health, what is biological treatment?
- 正向代理和反向代理快速理解
- Applet Custom Grid
- Mathematical knowledge: finding combinatorial number IV - finding combinatorial number
- 视频教程 | 长安链推出系列视频教程合集(入门)
- 工厂+策略模式
猜你喜欢

Electron pit Addon

45 year old programmer tells you: why do programmers want to change jobs? It's too true

Unknown database connection database error

工作八年的程序员,却拿着毕业三年的工资,再不开窍就真晚了...

物业怎么发短信通知给业主?

Zero of DC learning notes -- overview and basic process introduction

小程序中实现excel数据的批量导入

The argument type 'function' can't be assigned to the parameter type 'void function()‘

Complete software development process

软件开发中的上游和下游
随机推荐
工作6年,来盘点一下职场人混迹职场的黄金法则
More pragmatic in business
[无线通信基础-14]:图解移动通信技术与应用发展-2-第一代移动模拟通信大哥大
New opportunities for vr/ar brought by metauniverse
Draw some interesting figures with flutter's canvas
System settings large page
Creating ASCII art with C #
Understanding and application of Qt5 layout in creation
Thinking brought by strictmode -strictmode principle (5)
亲测有效,快速创建JMeter桌面快捷方式
There is no future to be expected. It is just the last fantasy of a migrant worker before he dies
小程序中实现excel数据的批量导入
Complete software development process
6月第4周榜单丨飞瓜数据UP主成长排行榜(哔哩哔哩平台)发布!
[problem handled] -nvidia SMI command cannot obtain the GPU process number of its own container and the external GPU process number
The personal test is effective, and the JMeter desktop shortcut is quickly created
微生物安全與健康,什麼是生物處理?
【JS给元素添加属性:setAttribute;classList.remove;classList.add;】
求两个线段公共部分的长度
数学知识:满足条件的01序列—求组合数