《大道至简》第二章——是懒人造就了方法 (读后感)

         何为“大道至简”?在周爱民的《大道至简》一书中给出的大道至简的解析是软件工程实践者的思想,它是一种思想,而不是一些招数或者方法。

 

前几天我把这本书的第一章用伪代码的形式写了一篇读后感,今天我就写写这第二章的读后感吧。第二章的标题是:是懒人造就了方法。为什么是懒人造就了方法呢?作者用战国时期的李冰凿山的例子来说明这个道理。

 

史记中说是“蜀守冰凿离堆”,是说李冰在成都的时候凿出了离堆。一说是李冰将都江堰附近的玉垒山凿了一个大口子,叫宝瓶口,而凿的石头就堆成了离堆。另一说,则是李的确是凿了一座“(溷)崖”,但是是在沫水,亦即是今天的大渡河。 在哪里凿的山,是史学家都说不清楚的事。但的确凿了一座山,而方法是就“(因)其崖崭峻不可破,(冰)乃积 薪烧之”。

 

我们已经看到事物的进化了。同是战国时代,《列 子·汤问篇》里的愚公就要“碎石击壤”,而李冰就已经懂得“积薪烧之”了。在都江堰这么大个工程里,如果有一个人会闲到看火烧石头,那他一定很懒。那么多事堆着不去做,去看烧石头,你说他不是懒是什么。所以说是懒人造就了方法。

 

早期写程序,都是将代码打在穿孔纸带上,让计算机去读的。要让计算机读的纸带当然是连续的,这无需多讲。而打出的纸带是多么苦楚。后来有了汇编语言,可以写一些代码了。这时的代码是写在文本文件里,然后交给一个编译器去编译,再由一个链接器去链接,这样就出来了程序,再后来有了高级语言,程序越来越大,大家把写程序的时候,习惯性的把所有的代码写到一个文件里。而对于要把“一百万行代码写到一个文件”,查找一个函数要在编辑器里按五千次 PageDown/PageUp 键的勤快人来说,是不能指望他们创造出“单元文件(Unit)”这样的开发方法来的。所以是懒人开发了单元文件,也就很快出现了一个新的概念:模块。 把一个大模块分成小模块,再把小模块分成更细的小小模块,一个模块对应于一个单元。于是我们可以开始分工作了,一部分人写这几个单元的代码,另一部分则写那几个。所以说是懒人造就了方法。

 

其实结构化编程的基本单位是“过程(Procedure)”, 而不是上面提到的“单元(Unit)”。然而在我看来,过程及其调用是 CPU 指令集所提供的执行逻辑,而不是普通的开发人员在编程实践中所总结和创生的“方法”。正如 CISC 指令集搅乱了一代程序设计师的思路一样,大量的知识和资讯搅乱了我们思想。我们应该尝试一下分类,把既有的知识象桌子上的书一样整理一下。

 

所谓“面向过程开发”,其实是对“结构化程序设计” 在代码阶段的一个习惯性的说法。而我忽略了这个阶段的 “方法”的根本原因,是即使没有任何“方法”的存在,只需要有了“单元(Unit)”和“模块(Module)”的概念, 在面向过程时代,一样可以做出任意大型的程序。在那个时代,“方法”问题并不会象鼻子一样凸显在每一个程序 员的面前。

 

面向过程开发中,“过程(procedure)”是 CPU 提供的,“单元(unit)”则是编译器提供的(机制)。程序员不需要(至 少是不必须)再造就什么“方法”,就可以进行愚公式的开 发工作了。 如果不出现面向对象的话,这样伟大的工程可能还要再干一百年⋯⋯

 

而与“面向对象”是否出现完全无关的一个东西,却 因为“过程”和“单元”的出现而出现了。这就是“工程 (engineering)。

 

posted @ 2016-09-25 16:47  Dmego  阅读(256)  评论(0编辑  收藏  举报