许式伟的架构课
许式伟
七牛云 CEO
84946 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

71 | 如何阅读别人的代码?

鼓励修改代码的原则
阅读代码的重要性
代码即文档
绘制 UML 时序图
理解业务流程
理清数据结构
研究实现机制的必要性
确认文档与代码一致性
理解软件实体的业务范畴和关系
理解系统的概要设计
阅读文档
读懂代码的目标重要性
读代码的目的性
结语
理解业务的实现机制
理解架构的核心脉络
为何要读别人的代码?
如何阅读别人的代码?

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。今天聊聊如何阅读别人的代码。

为何要读别人的代码?

我们去阅读别人的代码,通常会带有一定的目的性。完整把一个系统的代码 “读懂” 需要极大的精力。所以明确阅读代码的目标很重要,因为它决定了你最终能够为这事付出多大的精力,或者说成本。
大体来说,我们可以把目标分为这样几种类型:
我要评估是否引入某个第三方模块;
我要给某个模块局部修改一个 Bug(可能是因为使用的第三方模块遇到了一个问题,或者可能是你的上级临时指定了一个模块的 Bug 给你);
我要以某个开源模块为榜样去学习;
我要接手并长期维护某个模块。
为什么要把我们的目标搞清楚?
因为读懂源代码真的很难,它其实是架构的反向过程。它类似于反编译,但是并不是指令级的反编译,而是需要根据指令反推更高维的思想。
我们知道反编译软件能够将精确软件反编译为汇编,因为这个过程信息是无损的,只是一种等价变换。但是要让反编译软件能够精确还原出高级语言的代码,这就比较难。因为编译过程是有损的,大部分软件实体的名字已经在编译过程中被去除了。当然,大部分编译器在编译时会同时生成符号文件。它主要用于 debug 用途。否则我们在单步跟踪时,debug 软件就没法显示变量的名字。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

阅读他人代码是开发人员必备的技能,本文从阅读代码的目的性出发,强调了阅读代码的重要性以及有效的方法。作者指出,阅读代码需要明确目标,因为理解源代码是一项困难的工作,需要付出大量精力。他将阅读源代码比作架构的反向过程,类似于反编译,需要有产出的学习过程。文章提出了阅读源代码的产出应该是构建程序的思路,即架构设计。作者强调了理解架构的核心脉络的重要性,包括通过文档和源代码理解系统的概要设计,整理软件实体规格,以及理解业务的实现机制。最后,作者强调了及时将结论写下来,形成文档,以便他人能够快速理解系统。整体而言,本文强调了阅读代码的目的性和方法,对于需要阅读他人代码的开发人员具有一定的指导意义。文章还提到了阅读代码的结果可能不仅仅是架构设计文档的补充与完善,有时也会顺手修改几行代码,但改动需要遵循原则,包括限定改动范围和保证语义一致性,并鼓励补全相关的单元测试。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 霜花香似海
    实际工作中,很少有阅读代码的时间,或者精力。一般都是赶时间完成需求,只能自己私下里去看代码,修改代码都是需要权限和测试的,即使修改之后更完美,为了不影响使用大多数都选择谨慎。但阅读代码确实是必须的,是成长的一部分

    作者回复: 接手代码还没有搞懂就改,会出大问题。所以阅读代码是工作的重要组成部分。

    2020-01-08
    2
    7
  • J.Smile
    老师,像一些比如java开源框架的源代码有没有好的阅读方式,通常很多人都觉得不愿意触碰。

    作者回复: 如果能够大体理解工作原理,可以不读源码。如果网上有资料说清楚了原理,可以不读源码。如何不理解影响了你对系统工作方式的理解,认真把它搞懂,甚至写出来看看别人是否能够不读代码理解。如果可以,源码就读到位了。

    2020-01-15
    4
    3
  • 小豹哥
    有产出的学习过程,才是最好的学习方式。 之前网上看相关的视频和资料学习设计模式写了一些示例代码,几个月不用或者在工作中用不到,很多都忘了。老师对于建立牢固的知识和技能有什么建议吗?

    作者回复: 实践+反思

    2020-07-13
    2
  • 有米
    我理解不止是阅读代码需要有产出,任何学习都需要有。 学习有几个层次: 1、读懂 2、能复述 3、转换成自己的语言说出来 4、说出来能让别人听得懂 5、说出来能让很多人听得懂
    2020-04-04
    1
    28
  • 花儿少年
    许老师说的很对,看懂别人的代码是很难的事情,理解之后补充到文档里就更少了,别说修复坏味道了。 虽说都是面向工资编程,但是作为一个工程师还是要有一颗追求完美的心。
    2020-09-02
    4
  • 细雨平湖
    就指导如何阅读源代码而言,这篇是目前我读到的最好的文章!感谢老师!
    2020-01-08
    4
  • Vackine
    终于等到😄
    2020-01-07
    3
  • 张浩_house
    所遇到的大部分公司都没有写单元测试的习惯。。
    2020-09-13
    2
  • 程序员Artist
    同意,随时随地敢去改不好的历史代码,是保障项目长期稳定、可扩展的唯一关键手段。
    2022-07-13
    1
  • MaLu
    架构师基础能力,阅读代码的能力,这项能力赋能你的取舍,你的选择,你的问题定位,你的实施方案,还有你的设计验证……
    2021-05-17
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部