当前位置:网站首页>如何学习和阅读代码
如何学习和阅读代码
2022-07-01 01:11:00 【冥王哈迪尔】
如何阅读代码
- 软件功能。你先要知道这个软件完成的是什么样的功能,有哪些特性,哪些配置项。你先要读一遍用户手册,然后让软件跑起来,自己先用一下感受一下。
- 相关文档。读一下相关的内部文档,Readme 也好,Release Notes 也好,Design 也好,Wiki 也好,这些文档可以让你明白整个软件的方方面面。如果你的软件没有文档,那么,你只能指望这个软件的原作者还在,而且他还乐于交流。
- 代码的组织结构。也就是代码目录中每个目录是什么样的功能,每个文档是干什么的。如果你要读的程序是在某种标准的框架下组织的,比如:Java 的 Spring 框架,那么恭喜你,这些代码不难读了。
代码的构成部分
- 接口抽象定义。任何代码都会有很多接口或抽象定义,其描述了代码需要处理的数据结构或者业务实体,以及它们之间的关系,理清这些关系至关重要。
- 模块粘合层。我们的代码有很多都是用来粘合代码的,比如中间件、Promises模式、回调、代理委托、依赖注入等。它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。
- 业务流程。这是代码运行的过程。一开始,我们不要进入细节,但需要在高层搞清楚整个业务的流程是什么样的,在这个流程中,数据是怎么被传递和处理的。一般来说,我们需要画程序流程图或者时序处理图。
- 具体实现。了解上述三个方面的内容后,就可以开始深入细节,阅读具体实现的代码。从以下几个方面入手。
- 代码逻辑。业务逻辑:业务的处理逻辑;控制逻辑:控制程序流转。要把这两种逻辑分开。
- 出错处理。20%的代码是正常的逻辑,80%的代码是在处理各种错误。读代码时,可以把处理错误的代码全部删除,只留下比较干净和简单的正常逻辑的代码。
- 数据处理。过于冗长,而且不是主要逻辑,可以不理。
- 重要的算法。不一定是什么排序或者什么搜索算法,可能是一些其他的核心算法,比如索引表的算法,全局唯一ID的算法,信息推荐的算法,统计算法,通读算法(如Gossip)。最有技术含量的部分。
- 底层交互。一般来说是和OS或者JVM的交互。阅读这些代码需要一定的底层技术知识。
阅读代码的方法
一般采用自顶向下,从总体到细节的“剥洋葱皮”的读法。
画图是必要的,程序流程图,调用时序图,模块组织图……
代码逻辑归一下类,排除杂音,主要逻辑才会更清楚。
debug 跟踪一下代码是了解代码在执行中发生了什么的最好方式。
边栏推荐
- The argument type 'function' can't be assigned to the parameter type 'void function()‘
- 软件开发中的上游和下游
- 直播商城源码,实现左右联动商品分类页面
- PHP数组拼接MySQL的in语句
- Compile and install oh my Zsh
- 【agora】用户管理
- 测试必备工具—Postman实战教程
- flutter报错 -- The argument type ‘Function‘ can‘t be assigned to the parameter type ‘void Function()?‘
- Basic knowledge II - Basic definitions related to sta
- Sort custom function
猜你喜欢

Mathematical knowledge: finding combinatorial number III - finding combinatorial number

Basic knowledge II - Basic definitions related to sta

AS400 API 从零到一的整个历程

dc_ Study and summary of labs--lab1

3500 word summary: a complete set of skills that a qualified software testing engineer needs to master

亲测有效,快速创建JMeter桌面快捷方式

Sun Yuchen told Swiss media Bilan that the bear market will not last long

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

Necessary tools for testing - postman practical tutorial

测试必备工具-Postman实战教程
随机推荐
思特奇加入openGauss开源社区,共同推动数据库产业生态发展
dc_ Study and summary of labs--lab1
Unknown database连接数据库错误
With regard to the white box test, you have to master these skills~
gin_ gorm
Neo4j installation, operation, project construction and function realization
C # customize and dynamically switch cursor
迪赛智慧数——其他图表(平行坐标图):2021年应届专业就业情况
微生物安全与健康,什么是生物处理?
[JS adds attributes to elements: setAttribute; classlist.remove; classlist.add;]
Mathematical knowledge: finding combinatorial number III - finding combinatorial number
[stack] 921 Minimum Add to Make Parentheses Valid
Gin configuration file
PHP通过第三方插件爬取数据
KS009基于SSH实现宠物管理系统
mysql插入\更新前+判断条件
Some items of OCR
软件测试的可持续发展,必须要学会敲代码?
Some essential differences
There is no future to be expected. It is just the last fantasy of a migrant worker before he dies