可能比较愚笨,阅读代码这种事情,总是觉得比较难搞,费时费精力。
看过一些代码,写过一些代码。略有小总结分享一下。
好的阅读代码效果:应该是时间少,掌握度高。
没有银弹,要达到高效要从几个维度来出手。
1.找文档,找资料。
代码只是方案的实现,看官方的设计文档准没错。这是一类抽象层面的东西。
也可以看别人写的代码分析文档或者书。当然看别人的代码分析文档好像有点作弊的意思,但是这的确是高效的方法。如果你的目的是靠自己的能力来阅读,想练习下能力。请忽略,不过人生苦短,没有必要纠结。把宝贵的时间留给遇到的冷门的代码,是个好主意。要平衡好成本与收益。
官方文档上官网上找,如今不少东西都是某个SPEC规范的实现,看协议。老实说,大部分协议写得不是给人看的,啰嗦又绕弯的,总把一些简单的东西说得高大上。协议真的是很有仪式感的存在!
比如Linux kernel代码里面有document,邮件有RFC规范。
2.代码阅读
开始第二类具体实现层面,
代码模式的掌握:
首先大体上要明白一点,代码的世界常用的模式真的没有多少个。看代码时,看到几个片段代码就能猜出可能的实现模式。这真的会大大加快代码阅读效率。只是对代码模式的掌握要积累。十年前,看大点的代码就容易晕,戏精般的觉得不把代码看完,鬼知道会怎么实现的。现在看来好用的基本模式没几个,没那么多可能,看下核心代码片段就猜得啥模式。
代码语言掌握:
语言其实是有限制的,虽然说思想不会受限于语言,但是实现会受限于语言能与不能。
C语言和C++/JAVA的代码风格就很不一样。OOP就是对象中心的,C也可以对象化,但真的少见。OOP把类关系UML画出来,接口搞明白基本完成一半的工作。
运行调试
这是对看代码的一个重要补充。看代码可能看错,或者有些点没有想明白,在复杂的代码中,不如实际运行调试来得快。
代码是静态的,运行是动态的。看代码本身存在猜测的可能,运行是实证性。
3.得到什么
看代码要得到什么?我有一个不错的隐喻。代码是2D扁平的,但是代码构建的是一个可运行的3D立体模型。