零维护

 找回密码
 立即注册
快捷导航
搜索
热搜: 活动 交友 discuz
查看: 103|回复: 6

怎么阅读代码,老司机总结的6个实用经验

[复制链接]

1

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-9-22 18:42:35 | 显示全部楼层 |阅读模式
不知道大家遇到一个项目,里面有上万个源码文件,是如何梳理出来框架,进行分析,快速学习的?
在大学的时候,我接触的工程,最多几百个源文件,也没注意技巧,就是生硬的去看,效率必然低下,不过那个时候也不追求快速高效,就是慢慢吸收的过程。
当我进入职场,开始了代码编程工作,优势慢慢发挥了出来,就是我阅读代码比其他人快,并且高质量,能够提炼出来流程。后面领导便将新项目交到我这边,花费一段时间,将源码的整个逻辑捋顺,输出文档让大家学习,快速上手。
这个我把它称之为枝干体系,也就是我们阅读代码很容易陷入细节里面,就如同回调陷阱一样,因为一层层的调用,导致大脑的堆栈溢出,学的累,又没学会,从而打击自己的自信心。要想避免这个问题,就是在阅读代码的时候,需要先找到主体逻辑,当这个反复总结出来后,再去找到一条线索,进行分析,调研,画流程,类图,时序图。我把阅读代码总结成这几个步骤:
① 看参考文档,快速理清源码结构。
② 打开每个目录,熟悉下源代码名字。
③ 用代码工具打开,建立工程(Source Insight)。
④ 看文件里面的方法,以及方法继承,方法前面的注释。
⑤ 相关联的文件。
⑥ 打通入口,对外的接口。
⑦ 测试验证。
⑧ 网上看别人的分析,以及对照着跑一遍。
⑨ 做笔记,总结。
注意的是,不要上来就追求细节,这样子会让你理不清楚整体框架流程,这个会导致自己越跟越细节,只见树木不见森林的感觉。在一份代码出来后,第一件事就是看它的文件目录下,有没有类似Docs,Sample这类目录,这个代表着你能够直接看到官方的文档,是最直接的一手资料。
像很多人问安卓 NDK 怎么学,我想说的是 NDK 工具包下面,已经给了全部资料,非常详尽,每个参数都给出了注释,说明,还有就是Google 官方的 GitHub 上,也给出了示例代码,这个就是你的一手资料。我们学习网上的开源代码,第一件事就是找官方文档和示例代码。
官方文档会给你解决这个库能做什么,怎么编译,移植的平台这类信息,让你对这个代码的用途有个初步的印象,可以判定是否是自己需要的。如果官方的文档是英文的,你英文阅读能力一般,可以用在线翻译工具直译,大致也能猜到它的意思。或者自己百度搜索,看看国内有没人做了翻译,写了博客。
比如我之前需要一个三方渲染库,我找到了SDL,于是我第一步就是看它的说明,
关键信息,支持 OpenGL ,Android,C 语言写的,以及版权信息。这些信息会让我初步判断,是能够满足我的需求的。然后在此基础上,搜索网上是否有人研究过,一搜索找到了一些实例,说明路线是通的。

这是第一步,看源码的初步介绍,信息。这个是开源项目,是你在解决一个项目问题的时候,去找开源项目的技巧。我们在公司上班,源码是现成的,比如功能机项目源码,你是知道这个项目是做什么的。
那么第二步就是找到 Demo,去查看这个代码,对于它的流程,演示了什么,有了大概的判定,这个时候就是看怎么把它跑起来。千万记住,不要一上来就是 Hard 模式,比如直接实战一个项目,就像我在刚上班的时候,选择的是跟着公司的文档,去敲代码,把 Demo 跑通。
Demo 跑通之后,第三步就是 Demo 里面怎么跟源码匹配的,我们知道自己在开发一个 Demo 的时候,必然会用到系统的接口,我们叫 API,这个 API 打包出来就是 SDK。那么 Demo 中调用的系统 API ,就是你分析源码的切入点。找到切入点非常关键,它让你找到下手的地方,有了方向就好办。
这样子我们就自然而然的进入系统源码中,开始了探索源码的历程,关于阅读代码,这里有一些总结,分享给大家:
① 不要追细枝末节,在刚开始时候追两三级嵌套即可
记住要做总结,要知道你不跟下去的的输入,输出是什么。这个就跟我们学习堆栈一样,压入栈太多,引起了栈溢出。代码不可能一次就吃透全部,我们的策略是不断地渗透,今天一个方法,明天一个文件,然后是一个目录,最后是一个项目。
在一个文件结束后,有可能不是目录,而是一个功能。比如我们看了一个查询系统当前的进程列表方法,进而了解了这个文件,那么我们就可以直接检索系统调用这个方法的地方,看看它的用法,以及它是在哪些文件中使用的,这样子就可以找到下一个切入点,再次深入源码当中学习。
② 画流程图,时序图
可以是在线画图软件,本地的话我用的 StarUML工具,可以满足平时的使用。画这个是方便我们总结,也会加深记忆,同时还能让自己有成就感,学习下去的动力。
我们需要激励源,画图如果让同事看到,会让你有成就感,有了炫耀的资本,这样会更激发自己的战斗欲,这就像是好学生因为老师的表扬,会更加拼命学习,为的就是保持这个好学生的身份。
我们对于分析的代码,随着画图会理解的更精准。从记忆深度来说,文字不如图,图不如视频。我们看项目文档,很多时候都是画的图,清晰,并且让你很好理解。你下次遇见问题,就会想起这个图,然后拿出来进行参考。
③ 笔和纸
我自己喜欢写写画画,于是买了一盒中性笔,同时买了一袋打印纸,也不贵,可以用很久很久。用这个的目的是,很多时候我们工具用的不熟,画起来不符合我们的思维,所以需要个东西去乱画,记录下来当前的疑问。
用笔记录疑问,简单的画下流程,为的是让一闪而过的想法留存下来。画流程图和时序图,实际是已经有了一些掌握,不是一抹黑的阶段。当你对整个流程还不是熟悉的时候,最好的方式就是先随意画,记录下来,然后慢慢消化,最后画出来,变成文档。
④ 带着问题进入,有目的性
没有问题的跟进代码,会让自己不知道在干什么,于是我在学习代码的时候,都是先设定问题,有自己的目标。比如分析完这个文件的所有接口,从接口能分析出这个源文件的对外方法都有哪些,这个文件是做什么用的?比如FileUtil.java ,我们一看就知道是文件相关方法,里面有打开,关闭,追加,删除等方法,这个接口列表就是我的目的。
再比如安卓启动过程的入口是哪个文件,这个文件都有什么方法,都有哪些接口可以调用,记录下来,做总结。
如果有官网 API,那么就上去看,然后发现哪个解释自己能看懂,就先看这个,然后顺着这个进行未知的方法探究,这样子可以做到信心满满,不会被满屏不懂的技术打倒。
⑤ 在解决具体问题后,多看看其他方法
这个在学习过程中非常重要,我平时看见很多人阅读代码只看下自己解决的地方,其他地方不怎么仔细看,于是下次遇到一个需求就不知道有没有支持了。
只有你打开好奇心,在时间充足的时候,对你掌握的代码,进行扩充代码领域,从你熟悉的一个流程里,进行不断扩充边界,这样子你最终就攻下了整个模块。
也就是先找一条线跟进这个模块,然后在这个线上找每个细节,继续扩充知识,最后就出现了知识体系,一个参天大树。很多理论都是可以迁移的,比如目标管理里面强调的,目标,拆解,验证,复盘。
先制定可以测量的目标,然后分解成一个个小节,然后一个个小节验证,最终复盘发现新的问题,再制定新的目标。做项目,做需求,阅读代码,都是可以使用的。源码阅读需要一个线,也就是一个目标,设定了目标,就可以去执行。比如跟踪马达从上层到最终驱动,硬件的流程,绘制出来一个时序图。
然后发现这里还有霍尔器件,还有光感传感器,触摸屏,然后在做完了马达的整个逻辑,是不是就可以探索进入其他模块,继续分析。
只有这么去做,你的知识体系才能日渐丰满。
⑥ 总结,写笔记
多去写,多去思考。只有你去写,有机会的时候,最好要去讲。写和讲这两个方向都会将自己模糊的知识点逼出来,更好地认清自己的不足,从而这些就是你下次阅读代码的目标。
同时写笔记,发到网络上,还是建立自己影响力的一个环节。如果你写的好,那么在当下互联网时代,你的机会就会比其他人大很多。
我们要做到喜欢阅读代码,并且有自己的方法,不是胡乱看看,而是有目的,是解决问题,还是深入研究?是总结文档,还是流程分析?
希望这一节的阅读代码的方法能够帮助到你,如果有任何疑问,欢迎留言讨论。
回复

使用道具 举报

0

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-9-22 18:43:09 | 显示全部楼层
看源代码,不总结,等于没看。只要不停地抛出问题,并想办法在源代码中找到答案,就一定有用。
回复

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-9-22 18:43:23 | 显示全部楼层
你好,我想问一下源码和demo的代码是什么关系呢?我最近刚开始学习,在看ti的板子,感觉看的很晕
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-22 18:43:35 | 显示全部楼层
刚开始学习,去看demo。demo就是例子,很简单的实现,方便自己理解功能。
当你看懂了这些,后续就需要阅读源码,这里源码是什么?
举例,你使用了一个方法,seeworld();这个是在demo中使用的,但如果要研究这个方法的具体实现,就要看对应的代码,这个就是这里描述的源码。

开发过window mfc,对这个就很容易理解了。算是先会用,demo,再要学就需要继续研究,就要看系统的方法具体怎么实现的了。
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-22 18:44:19 | 显示全部楼层
是的,才看到回复。[捂脸]
回复

使用道具 举报

0

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2025-3-27 12:03:32 | 显示全部楼层
支持你哈...................................
回复

使用道具 举报

1

主题

2

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2025-3-31 16:55:15 | 显示全部楼层
撸过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver| 手机版| 小黑屋| 零维护

GMT+8, 2025-4-8 05:14 , Processed in 0.093276 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表