当前位置:网站首页>如何学习和阅读代码
如何学习和阅读代码
2022-07-01 01:11:00 【冥王哈迪尔】
如何阅读代码
- 软件功能。你先要知道这个软件完成的是什么样的功能,有哪些特性,哪些配置项。你先要读一遍用户手册,然后让软件跑起来,自己先用一下感受一下。
- 相关文档。读一下相关的内部文档,Readme 也好,Release Notes 也好,Design 也好,Wiki 也好,这些文档可以让你明白整个软件的方方面面。如果你的软件没有文档,那么,你只能指望这个软件的原作者还在,而且他还乐于交流。
- 代码的组织结构。也就是代码目录中每个目录是什么样的功能,每个文档是干什么的。如果你要读的程序是在某种标准的框架下组织的,比如:Java 的 Spring 框架,那么恭喜你,这些代码不难读了。
代码的构成部分
- 接口抽象定义。任何代码都会有很多接口或抽象定义,其描述了代码需要处理的数据结构或者业务实体,以及它们之间的关系,理清这些关系至关重要。
- 模块粘合层。我们的代码有很多都是用来粘合代码的,比如中间件、Promises模式、回调、代理委托、依赖注入等。它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。
- 业务流程。这是代码运行的过程。一开始,我们不要进入细节,但需要在高层搞清楚整个业务的流程是什么样的,在这个流程中,数据是怎么被传递和处理的。一般来说,我们需要画程序流程图或者时序处理图。
- 具体实现。了解上述三个方面的内容后,就可以开始深入细节,阅读具体实现的代码。从以下几个方面入手。
- 代码逻辑。业务逻辑:业务的处理逻辑;控制逻辑:控制程序流转。要把这两种逻辑分开。
- 出错处理。20%的代码是正常的逻辑,80%的代码是在处理各种错误。读代码时,可以把处理错误的代码全部删除,只留下比较干净和简单的正常逻辑的代码。
- 数据处理。过于冗长,而且不是主要逻辑,可以不理。
- 重要的算法。不一定是什么排序或者什么搜索算法,可能是一些其他的核心算法,比如索引表的算法,全局唯一ID的算法,信息推荐的算法,统计算法,通读算法(如Gossip)。最有技术含量的部分。
- 底层交互。一般来说是和OS或者JVM的交互。阅读这些代码需要一定的底层技术知识。
阅读代码的方法
一般采用自顶向下,从总体到细节的“剥洋葱皮”的读法。
画图是必要的,程序流程图,调用时序图,模块组织图……
代码逻辑归一下类,排除杂音,主要逻辑才会更清楚。
debug 跟踪一下代码是了解代码在执行中发生了什么的最好方式。
边栏推荐
- 物业怎么发短信通知给业主?
- 元宇宙为 VR/AR 带来的新机会
- 测试必备工具—Postman实战教程
- 45 year old programmer tells you: why do programmers want to change jobs? It's too true
- zabbix如何配置告警短信?(预警短信通知设置流程)
- Zero of DC learning notes -- overview and basic process introduction
- Fast understanding of forward proxy and reverse proxy
- [无线通信基础-15]:图解移动通信技术与应用发展-3- 数字通信2G GSM、CDMA、3G WDCMA/CDMA200/TD-SCDMA、4G LTE、5G NR概述
- 工作6年,来盘点一下职场人混迹职场的黄金法则
- [Qt5 basics] random number display
猜你喜欢
短信在企业中的应用有哪些?
The argument type 'function' can't be assigned to the parameter type 'void function()‘
Basic knowledge 3 - standard unit library
7-2 拼题A打卡奖励 dp
亲测有效,快速创建JMeter桌面快捷方式
What will Web3 bring in the future?
Compile and install oh my Zsh
软件测试的可持续发展,必须要学会敲代码?
视频教程 | 长安链推出系列视频教程合集(入门)
微生物健康,食品微生物检测为什么很重要
随机推荐
Open3d point cloud color rendering
Open3d point cloud bounding box
gin_ gorm
System. Csrebot for commandline
[problem handled] -nvidia SMI command cannot obtain the GPU process number of its own container and the external GPU process number
AS400 large factory interview
元宇宙为 VR/AR 带来的新机会
opencv -- 笔记
Handsontable数据网格组件
PHP crawls data through third-party plug-ins
微生物健康,食品微生物检测为什么很重要
哪有什么未来可期,不过是打工人临死前最后的幻想罢了
7-2 punch in reward DP for puzzle a
一站式洞察行业热点,飞瓜数据B站新功能「流量大盘」上线!
org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms)错误解决
C # customize and dynamically switch cursor
小程序云开发之--微信公众号文章采集篇
1175. Prime Arrangements
工作6年,来盘点一下职场人混迹职场的黄金法则
Sécurité et santé microbiennes, qu'est - ce que le traitement biologique?