如何阅读他人的程序代码【附王建兴pdf原文】

如何阅读他人的程序代码

这是来源于曾经阅读过的一篇博客文章,作者是王建兴,对刚开始参加工作的我颇有帮助,我也认为阅读代码是一项很重要但少有人教的技能,因此将原文pdf分享出来,可以自由下载。另外下面是我读过之后的总结笔记,仅是作为个人纪录,感兴趣的朋友还是应该读原文。这篇偏理论,后续有机会可以再学习整理一些实战技巧进行分享。

原文下载链接:https://pan.baidu.com/s/1EgXHVM9ic3Jd8xrZmyt1KA
提取码:n0vz

一、读懂程序代码,使心法皆为我所用

1、读懂别人写的程序代码,让你收获满满

人类内心深处对于陌生事物的原始恐惧,是正常的,因此需要转变阅读他人代码的思维,不再只是从负面观点的被迫接收,而是极具正面价值的汲取养份。只有阅读了他人优秀的代码,才能从中了解一些语法和惯例,甚至是新的技术框架,这是在开阔视野,提升自己。

2、先了解系统架构与行为模式,再细读

接触他人的程序代码,大致上可以分为种程度:(1)了解;(2)修改、扩充;(3)抽取、提炼。不要从程序起始点一行行读完,不要为了阅读去阅读,我们的目的不是认识每一个字,而是通过阅读快速了解系统的架构及行为模式,当需要时再到对应位置细读。

3、熟悉沟通语言与惯例用语

熟悉该程序的编程语言、命名惯例。命名惯例包括变量、函数、类、目录等的命名,可能还涉及到设计模式之类的方法,如果熟悉设计模式就能更快捕捉出其含义。如果能取得命名惯例的说明文件是最好的,没有就需要自已阅读归纳。

4、学握程序代码撰写者的心态与习惯

可能团队风格管理混乱,也可能作者不按章法出牌,但他自己会有一些编码习惯。

二、摸清架构,便可轻松掌握全貌

1、阅读程序代码的目的,在于了解全貌而非细节

例如面向对象程序,整个系统由独立的类组成,如果只阅读个别类的代码,只能片面的了解对象个别的行为。应该重点关注有哪些角色,角色之间的关系,如何交互影响、如何协同工作。

2、由上而下厘清架构后,便可轻易理解组成关系

系统的架构是整个系统的骨干、支柱。 它表现出系统最突出的特征。知道系统架构究竟属于那一种类型,通常大大有益于了解系统的个别组成之间的静态及动态关系。有些系统因为所用的技术或框架的关系,决定了最上层的架构。比如上位机软件中使用了MFC或QT框架及组件进行开发,如果你提前熟悉了技术框架就更容易理解该系统。

3、了解架构,必须要加上层次感。

不论是那一层级的架构,都会定义出各自的角色,以及角色间的关系。一定要有层次的去构建系统的架构。

4、探索架构的第一件事:找出系统如何初始化

找出下列这些事是如何被完成的:(1)系统如何初始化;(2)与这个系统相接的其他系统 (或用户)有那些,而相接的接口又是什么;(3)系统如何反应各种事件;(4)系统如何处理各种异常及错误。

三、优质工具在手,读懂程序非难事

1、善用文本编辑器或IDE,加速解读程序代码

许多文本编辑器提供了常见程序语言的语法及关键词标示功能、自动列出某个源文件中所有定义的函式清单、自动显示函数原型等。

2、grep是一个基本而极为有用的工具,

其实就相当于VS中的搜索功能。

3、gtags可建立索引,让搜寻更有效率。

Gtags相比grep的好处是它不只搜寻文字层次,而且因为具备了各种语言的语法剖析器, 所以在搜寻时,可以只针对和语言有关的元素,例如类别名称、函式名称等。而且, 它能针对原始码的内容进行索引。
Vs比vscode好的地方就是有工程结构索引,搜索也可以指定范围,搜索出来的结果也能按照工程结构展开。Vs的缺陷在于只能搜索解决方案内的文件,如果有些头文件没有加进来就搜索不了,而vscode是文件级别的搜索,就不会遗漏。

4、再搭配htags 制作HTML文件,更是如虎添翼。

这个就是建立代码结构图和超链接,vs已经具备这个能力。

四、望文生义,进而推敲组件的作用,

1、好的说明文件难求,拼凑故事的能力很重要

系统性的架构是最顶端的层次,而系统的运作情境,则是在它之下的另一个层次。类似软件设计中的静态结构和交互视图。当你能够列出系统可能会有的情境,表示你对系统所具备的功能,以及在各种情况下的反应,都具备概括性的认识。

2、探索架构的第一步一 找到程序的入口

如何找到入口,这会依程序的性质不同而有所差别。这会依程序的性质不同而有所差别。如果是类别库或函式库,本身并不具单一入口,此类的程序代码具有多重的入口一每个允许 客户端程序呼叫的函式或类别,都是它可能的入口。例如对Windows DLL来说,对外提供的函式,皆会以dllexport 这个关键词来修饰。

3、系统多会采用相同的架构处理Plug-In程序

4、随着实务经验,归纳常见的架构模式

5、善用名称可加速了解

五、找到程序入口, 再由上而下抽丝剥茧

1、展开的同时,随手记录树状结构

不要盲目相信自己的记忆力,阅读的同时,你可以在文件中试着记录展开的树状结构。
每次只试着往下探索一层。

2、无法望文生义的函式,先试着预看一层

当我们试着以树状的方式,逐一展开每 个动作的子动作时,有时必须多看一层,才能真正了解子动作的意义。只需浅尝辄止,添加适当注释即可,不要深陷其中。

3、根据需要了解的粒度,决定展开的层数。

你可以视自己需要,了解的深入程度,再决定要展开的层数。你更可以依据特殊的需要,只展开某个特定的节点,以探索特定的细目。适度地忽略不需要了解的细节,阅读都是有目的的。

六、阅读的乐趣:透过程序代码认识作者

1、阅读程序代码是新时代程序人必备的重要技能

2、好的名称能够摘要性地点出实体的作用。

多观察不同命名体系的差异,并且尝试归纳彼此之间的异同,有助于更快地提升对名称的感受及联想力。

3、转换立场,理解作者的思考方式

他写下这段程序代码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。

4、从程序代码着手认识作者独有的风格,进而见贤思齐

你或许会在阅读他人的程序代码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序代码时的一项乐趣,并且也可以通过记笔记积累下来,成为你宝贵的财富。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值