复杂系统源代码有没有得看?
其实还是可以看的。
虽然迪杰斯特拉说,现在计算机程序的发展,使得没有一个人的大脑能够装的下一个计算机程序。
虽然有很多人在说到一些大型系统的源代码时,总是定量的评估道:这个系统代码有100万行,如果一秒钟看一行,不吃不喝,看完整个代码,也得需要多长多长时间,所以,一个人是不可能看完所有的代码的,所以要分析这个系统,我们就得想别的办法。
其实两种说法都是有道理的,也不假。那为什么我还要说复杂系统的源代码是有得看的?其实这里要考虑很多实际情况。
1 分层和模块化
将复杂的系统简单化。系统最初的设计也是这样来的
2 有所取舍
目的是整体有了解,精通于部分模块。很多时候不需要对每一个模块都十分精通
3 看代码需要感觉
看名知意。需要有基础,前期看过很多代码
4 很多代码存在复用
有一些模块可能是复用的,或者别的系统有用到过,可以减少代码量
5 细节上要把握好度
一个大系统,一般都是很多人花很多时间,慢慢迭代出来的,一个人的精力当然有限,不可能对所有细节都了如指掌。所以还是之前的那个策略,有些模块需要了解他的功能和api即可,另外一些模块可以了解的更细一些。只有对少部分模块才能了解的很细节。
人的大脑容量无限,但是人的精力是有限的。
总的来讲,就是整体把握,部分模块和细节深入,脑补缺口,通过已有的经典设计和自身经验。
比如,对于Android这个大操作系统,可以类似深入浅出MFC那样,对其深入浅出一番。
用形象的代码和生动的语言,模拟Android整个的系统框架。
从上到下的系统设计
一个系统划分成一些功能
一个功能划分成一些模块
一个模块划分成一些可以工作的类
类细化为一些可以工作的接口
接口细化为一些可以工作的代码逻辑
具体的低颗粒度接口,依赖特定硬件或者设备模型的接口 具备对设备的抽象
接口的组合,低颗粒度的功能接口,具备一定的逻辑功能
一些功能接口的组合,复杂的功能接口,具备对问题的初步抽象
继续组合,一些模块,具体对问题的高层抽象
模块整合,解决具体的问题。形成问题领域的概念
需要始终抓住内存是我们思考一切的基础