除非你在泛泛的浏览代码,否则
1.开始时,尽量去找相关文档
2.实际使用该软件
3.保持清醒,知道此时自己在找什么:架构?一段算法?或是某个具体的函数调用?
要有多种策略去搞懂,一种不行马上去换另一种尝试
如:读文档,不行就换 读注释,不行就换 读源码,不行就换 跑一变程序并打断点调试。
静态调试-》动态调试
如 strace,ltrace,gdb
清晰的知道,自己想要找到什么,目标要明确,否则容易迷失方向。
找到目标代码后,忽略不相关的内容。这是一种必须掌握的技能(亲身体会。。否则你的脑子会随着不断的深入代码而逐渐变为一团浆糊,连自己在哪儿,在干什么都不知道)
手段:
切片(slicing)
把代码复制出到一个临时文件中,删掉不需要的无关部分(打省略号),只留下主干
实现类似的新特性时,最好找个功能类似的模块,作为模板
代码越多大多数时候都是 自底向上
了解某个方法、函数的作用
1.基于函数名 -猜
2.读注释
3.如何使用这个函数(调用者)
4.读函数内容代码
5.查资料,文档
在阅读控制代码时,要添加注释
对于控制结构的分析
1.每次只分析1个控制结构,将内容看作黑盒
2.遇到特殊的如 goto,break,continue,要单独分析
union 共用体 联合体
常用于实现 多态
一个对象,在不同情况下,有多种对应的工作方式
文档
刚接触大型项目时,推荐先读读文档,从宏观角度了解结构,设计理念,在你深入具体的代码丛林之前,至少先拿着模糊不清的地图和指南针。
阅读源码时,尽可能的利用能得到的文档。阅读一小时代码得到的信息,不过相当于阅读1分钟文档。
但文档也会存在一些问题:
如 @hide
未记录的特性
理想化表述
可以打印到纸上,或者手写
要理解复杂的算法和数据结构,要找到一个安静的地方,聚精会神的思考,不要借助任何计算机化或自动化的帮助。 笔都不要用?!
需要创造一个工作环境,不被打扰。被打断后至少要15分钟才能恢复思考状态。
吐槽:开放式办公环境很难做到这一点,就连Ruby的创造者也有体会。
总结:
1.找文档,注释看,1小时代码=1分钟文档,有大局观,但小心文档也有细节的疏忽
2.跑一下代码,或调试一下
3.分析代码时,记住自己的目标,用切片法忽略掉不必要的内容,只保留主干
4.难到爆的算法内容,打印或手写出来,不用自动化工具,只用自己的脑子,聚精会神分析