今天非常高兴可以听高老师的讲座,因为我跟高老师有渊源(当然是我认识他,他不认识我)。我毕业后的第一份工作中有一小段时间在做Android手机应用的开发,那时Android正盛, 网上资料铺天盖地,但良莠不齐,想我在初出茅庐软件思想还不健全的情况下要找到一份通俗易懂并且靠谱的参考资料实在很困难。但非常幸运的是,我发现了高涣堂老师写的几本书,虽然内容不是很多但讲得非常清晰。那时正在自学设计模式,自认“满腹经纶却无用武之地”,而他的书恰好弥补了我在实践方面的不足。我是个吃了鸡蛋,就想看看下蛋母鸡的俗人,因为我相信近距离接触更能领略到大师的风采。
讲座果然没令我失望。虽然讲座内容是架构设计,但他讲的是方法的方法: 溯因法。
虽然归纳法、演绎法和溯因法都是前人早已经发现的,但是很多人没有发现溯因法在程序员身上的缺失。平时写代码,大家最最常用的是归纳法。归纳在代码的维度里,我觉得可以理解为抽象,从一堆一堆的代码中提取出公共的部分,把它封装成一个类或者一个函数或者一个组件,这样可以少写代码并且方便维护。溯因法和归纳法相比,恰好相反。溯因法可以天马行空,不是从现成的代码堆里提取公共部分,它的出发点是存在头脑中最最上层的模型,而写出来的代码或者做出来的产品,只是头脑中那个真正的产品的一个仿冒品。这是高老师让我印象最深刻的一个观点,举个例子,Linux虚拟文件系统的设计并不是要提供一个当时所有文件系统都具备的功能集合(若是如此,便成归纳抽象法了),而是提供一个理想的文件系统所应该具备的功能,其它具体的文件系统,例如Ext2, 并不需要完全实现VFS的所有功能。因为VFS是真实的产品,而EXT2是仿冒品,仿冒品不可能具备真实产品的所有功能。
其实,溯因法这种思维方法是最适合用来设计代码框架的了。以前,做NP芯片驱动的代码框架时,我的出发点也是要设计一个功能强大的理想中的虚拟NP芯片,其它的NP3和NP5的实现只是这个虚拟NP芯片的一个仿冒品。除此之外,溯因法最大的好处不是用来设计代码框架,而是把我们从代码堆中解救出来,让我们真正思考我们的产品该是什么样子,这才是真正地在做产品,看代码写代码不过是在仿冒而已。创意能够让人获得极大的成就感,而溯因法就是制作创意的方法。