蔡学镛谈源码阅读

Published: 19 Dec 2014 Category:

最近在读一些开源项目代码,突然想起来蔡学镛老师在微博上发表过一些代码阅读方法的心得,就做了一番搜索,整理如下,作为参考。

如何有效阅读源代码,我的经验:1) 先阅读架构文档 2) 根据架构,将源码文件以模块(或上下层级)分类 3) 从最独立(依赖性最小)的模块代码读起 4) 阅读该模块功能文档 5) 阅读该模块源代码 6) 一边阅读一边整理「调用关系表」(很久以前我的某条微博提过)7) goto 3

2012-12-2 10:13 来自 微博 weibo.com

我傻傻地读了两星期别人的源代码,然后才发现居然有设计文档。虽然部分内容过时,和代码有差异,但还是有相当高的参考价值。我于是放下源代码,改读设计文档。… 下次我跳下去读源代码前,一定要仔细搜索有无设计文档呀!

2012-6-16 10:27 来自 微博 weibo.com

开老师这条微博刚好符合我过去这几条微博的内容主题:阅读源代码(紧急+长期),制作「调用关系表」(重要+短暂+可以提升阅读源代码的效率)。

@李开复 【不要成为紧急的奴隶,重要的事为先】某人很吃力地在锯木头,旧的没锯完,新的又送来,越堆越多,不断加班。盆友提醒他:“你的锯子钝了,所以效率甚差,磨利再锯吧!” 他说:“工作都做不完,哪有时间磨锯子?” 好心人仍不死心,问:“那你何时磨锯子呢?” 他说:“等我锯完所有木头再说。”

阅读他人的源代码就像是探访亚马逊雨林,事前多做一些准备工作,虽然花时间,但是很值得。在代码丛林中,「调用关系表」就 是我的地图与 GPS。

2012-6-14 09:04 来自 微博 weibo.com

阅读源代码时,将代码顺手图像化,有助于我思考与记忆。位置、色彩、形状,这些都是我将源代码图像化时会采用的手段。

2012-6-13 17:36 来自 微博 weibo.com

这两天正在读一份源代码,之前读过同一份源代码很多次,但每次都觉得好像没有收获。不过这次读,感觉就满有收获的。… 我想,之前多次虽然貌似读不懂,但应该有积累了一些什么,才能让这次有爆发的感觉。

2012-6-7 21:23 来自 微博 weibo.com

通过 Debugger 或 Stack 的方式了解函数的调用关系,只能知道「某个」调用路径,并不全面,且比较容易失去方向感,不适合读源代码时使用。「函数调用图」通常相当杂乱,所以我个人不喜欢。我感觉用「函数调用表」会比较清晰一点,且我会持续修改这张表。

2011-10-19 17:43 来自 微博 weibo.com

阅读他人的源代码时,我会先整理出「函数调用表」,调整次序,并标注颜色。通过这个表,可以知道调用依赖关系、递归函数、函数被调用次数、函数目的。阅读代码失去方向性时,就看一下这个表。

func-call.jpg

2011-10-19 14:04 来自 微博 weibo.com

对我来说,阅读优良的源代码,通常不是为了要学习语言的用法(Syntax),更多是要学习该语言的惯用语(Idiom)。惯用语是经年累月累积出来的优良语法模式(Syntax Pattern)。每次学到新的惯用语,就很开心。20 年前的《Advanced C++ Programming Styles and Idioms》是早期我读过关于惯用语的书。

2011-9-27 22:43 来自 微博 weibo.com

个人心得:面向过程代码(C)用函数调用表更好,面向对象代码(C++)用类图更好。