71 | 如何阅读别人的代码?
许式伟
该思维导图由 AI 生成,仅供参考
你好,我是七牛云许式伟。今天聊聊如何阅读别人的代码。
为何要读别人的代码?
我们去阅读别人的代码,通常会带有一定的目的性。完整把一个系统的代码 “读懂” 需要极大的精力。所以明确阅读代码的目标很重要,因为它决定了你最终能够为这事付出多大的精力,或者说成本。
大体来说,我们可以把目标分为这样几种类型:
我要评估是否引入某个第三方模块;
我要给某个模块局部修改一个 Bug(可能是因为使用的第三方模块遇到了一个问题,或者可能是你的上级临时指定了一个模块的 Bug 给你);
我要以某个开源模块为榜样去学习;
我要接手并长期维护某个模块。
为什么要把我们的目标搞清楚?
因为读懂源代码真的很难,它其实是架构的反向过程。它类似于反编译,但是并不是指令级的反编译,而是需要根据指令反推更高维的思想。
我们知道反编译软件能够将精确软件反编译为汇编,因为这个过程信息是无损的,只是一种等价变换。但是要让反编译软件能够精确还原出高级语言的代码,这就比较难。因为编译过程是有损的,大部分软件实体的名字已经在编译过程中被去除了。当然,大部分编译器在编译时会同时生成符号文件。它主要用于 debug 用途。否则我们在单步跟踪时,debug 软件就没法显示变量的名字。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
阅读他人代码是开发人员必备的技能,本文从阅读代码的目的性出发,强调了阅读代码的重要性以及有效的方法。作者指出,阅读代码需要明确目标,因为理解源代码是一项困难的工作,需要付出大量精力。他将阅读源代码比作架构的反向过程,类似于反编译,需要有产出的学习过程。文章提出了阅读源代码的产出应该是构建程序的思路,即架构设计。作者强调了理解架构的核心脉络的重要性,包括通过文档和源代码理解系统的概要设计,整理软件实体规格,以及理解业务的实现机制。最后,作者强调了及时将结论写下来,形成文档,以便他人能够快速理解系统。整体而言,本文强调了阅读代码的目的性和方法,对于需要阅读他人代码的开发人员具有一定的指导意义。文章还提到了阅读代码的结果可能不仅仅是架构设计文档的补充与完善,有时也会顺手修改几行代码,但改动需要遵循原则,包括限定改动范围和保证语义一致性,并鼓励补全相关的单元测试。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》,新⼈⾸单¥68
《许式伟的架构课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(17)
- 最新
- 精选
- 霜花香似海实际工作中,很少有阅读代码的时间,或者精力。一般都是赶时间完成需求,只能自己私下里去看代码,修改代码都是需要权限和测试的,即使修改之后更完美,为了不影响使用大多数都选择谨慎。但阅读代码确实是必须的,是成长的一部分
作者回复: 接手代码还没有搞懂就改,会出大问题。所以阅读代码是工作的重要组成部分。
2020-01-0827 - J.Smile老师,像一些比如java开源框架的源代码有没有好的阅读方式,通常很多人都觉得不愿意触碰。
作者回复: 如果能够大体理解工作原理,可以不读源码。如果网上有资料说清楚了原理,可以不读源码。如何不理解影响了你对系统工作方式的理解,认真把它搞懂,甚至写出来看看别人是否能够不读代码理解。如果可以,源码就读到位了。
2020-01-1543 - 小豹哥有产出的学习过程,才是最好的学习方式。 之前网上看相关的视频和资料学习设计模式写了一些示例代码,几个月不用或者在工作中用不到,很多都忘了。老师对于建立牢固的知识和技能有什么建议吗?
作者回复: 实践+反思
2020-07-132 - 有米我理解不止是阅读代码需要有产出,任何学习都需要有。 学习有几个层次: 1、读懂 2、能复述 3、转换成自己的语言说出来 4、说出来能让别人听得懂 5、说出来能让很多人听得懂2020-04-04128
- 花儿少年许老师说的很对,看懂别人的代码是很难的事情,理解之后补充到文档里就更少了,别说修复坏味道了。 虽说都是面向工资编程,但是作为一个工程师还是要有一颗追求完美的心。2020-09-024
- 细雨平湖就指导如何阅读源代码而言,这篇是目前我读到的最好的文章!感谢老师!2020-01-084
- Vackine终于等到😄2020-01-073
- 张浩_house所遇到的大部分公司都没有写单元测试的习惯。。2020-09-132
- 程序员Artist同意,随时随地敢去改不好的历史代码,是保障项目长期稳定、可扩展的唯一关键手段。2022-07-131
- MaLu架构师基础能力,阅读代码的能力,这项能力赋能你的取舍,你的选择,你的问题定位,你的实施方案,还有你的设计验证……2021-05-171
收起评论