前几日,吴军博士在微博上转发了王石为其新书《文明之光》写的序言。在序言里,王石提到了达尔文进化论在社会与技术的适应性问题。王石在他短短几句话里并未充分说明了他的观点,只是举了英文键盘的例子说明了存活下来的不一定更“好”,仅仅是更“适”而已

我在微博上留下了一条评论:

生物突变过程,并不一定是适合文明尤其是技术的进化的,好比如从帆船不可能突变到轮船,喷气机也不是内燃机或其它任何先前技术的变种,技术的进化更多是组合进化不太具有偶然性,而不是生物的单物种偶然性突变。

用达尔文的理论去解释不同领域的演进,是许多人的偏好,尤其是国人。但是,无论觉得达尔文理论能如何为你切身地解答从哪而来的问题,将它放置于任何领域成为“大一统”的进化观点,我想是不合适的,至少将其置于技术的领域,是不完整的。尽管吴军博士回复说,《文明之光》一书并没有太谈进化论,我还是想把我的观点讲清楚。

一.不完整的进化论理解

达尔文的生物进化理论需要从两个方面来理解:变异与选择。由于某些历史与政治的原因,进化论被引进进入中国时,就被严复梁启超他们“阉割”了,只片面的强调了“选择”一含义,这也就是大多数人固有的“物竞天择,适者生存”的观点,而对其“变异”层面的含义却知之甚少。由于“进化就是选择”这一狭隘观点的影响,导致达尔文的理论被”泛滥“地解释所有的领域的发展,因为单从“选择”层面来看,其确实是适合其它领域的。当然,用来解释社会发展领域的发展,也是当初严复和梁启超他们原本目的。

如果说“进化就是选择”,那前面王石先生举的英文键盘一例来说进化,也是合理的(其实这也就是常说的”路径依赖“)。但是这样的观点如果奉成为“理论”,肯定是不完整的。选择论回答不了被选择的“物件”从何而来的疑问。而完整的达尔文理论认为变异为选择提供了资源。如果说”选择“解答了发展的问题,那”变异“则解答了起源的问题。在生物的进化上,这里的变异指的就是基因突变,并且是单个物种内的自身基因变化。

正是这种关乎基因突变的观点,将达尔文理论套到技术领域,是根本站不住脚的。比如雷达诞生于半导体,你可以对20世纪30年代的半导体线圈进行任何你喜欢的改变,但是你永远不可能得到雷达,制造雷达需要一个和半导体完全不同的理念。我前文微博里提到的帆船到轮船,喷气机到内燃机的也同样如此,无论你对帆船如何改造,没有革命性发动机出现,你不可能得到轮船,而发动机的出现,跟”船“这个”物种“不存在任何关系。而从喷气机到内燃机,也不是一脉的向前突变得到的,而是依赖完全不同的物理理论的出现。

二.技术进化的特点

那么技术领域的究竟如何向前进化的呢?技术作家布莱恩.阿瑟在其《技术的本质》一书里给出了一个初步的答案。布莱恩.阿瑟认为技术的进化具有以下两大特点

  • 组合进化

技术总是由一些基本的功能模块组合而成的。技术的组合进化,是技术演变的最本质特征,也是其不同与生物进化的根本区别。

在人类发展最初的石器时代,石制工具就被打磨成两类,锋利的和有孔的,这两类又与木制的手柄组合成复合工具,锋利的成了矛,有孔的成了锤头。回到现代,你打开一台老式的台式电脑,你会发现里面的零部件,如CPU,硬盘,内存条等。同时拆开一台现代的智能手机,也会发生同样的部件。同样,蒸汽机的出现,其与原来的帆船技术的组合,从而使得轮船得以出现服务于人类。技术在某种程度上一定是来自此前已有技术的新的组合,这是新技术出现的根本特征,也解答了进化论中关于”变异“那一部分问题。而这个组合进化产生变异的特征在生物体上是看不到的,生物的变异是指单个生物体的基因突变,而不同物种相互组合杂交而进化,几乎没出现过。

  • 具有层级递归性模块化演进

技术是组合进化的,但是其不是单纯的一层组合,也就是说不是将具有匹配的概念或原理的目的单层次的聚集起来,即可得到新的技术。其组合具有层次结构。可以将技术分解成主集成,次级集成,次次级集成等,直至分解为最基本的部分。如果说整体的技术是树干的话,那次级集成是枝条,最基本的零件就是更小的分支了。以一本纸质书为例,其主集成是纸张和印刷的组合,而纸张和印刷两者可以继续拆分,如印刷可以拆分为油墨技术,电子技术等等。技术呈现出这种递归性的结构,技术总是包含着技术,直到最基础的水平

如果只是将技术的单元进行层次化的组合,那将是一个无比复杂的工程。比如一个手表有1000个零件,一个钟表匠一个零件一个零件地安装,安装过程中,如果他的工作被打断了,他就必须从头开始。但是,如果将10个模块组装起来,每个模块又由10个子模块组装起来,每个子模块由10个零件组合起来,当他暂停或被打断工作时,他只是损失了一小部分工作。这种零件集成可以更好地预防不可预知的变动,且更易修复。同时,除了解决复杂性的带来的低效问题,模块化更为重要的一点是允许技术的组成部分分别演进,从而又再推动整体技术的前进。好比如发动机的这一模块的进步,可以推动汽车,轮船这些整体技术的进步一样。

当然,将技术分割为功能模块是需要付出一些代价的,比如需要耗费时间和精力定义模块之间的标准等。所以,只有模块能被反复使用,且反复使用的次数足够时,才值得付出代价将技术进行分割

三.技术进化的启示

前面关于技术进化的特点的讨论,不只是让我们认识了技术进化的与生物进化的区别,更是能更好的指导我们构建更有生命力能向前进化的技术产品。回到我们熟悉的软件系统领域,我们见过太多技术产品被很快淘汰,也见过很多技术产品永远处于不断推倒后重构的死胡同里。从进化的角度看,这样的技术产品根本不存在进化的可能。这其中根本原因,我想更多是其没有满足我们前文说到的可进化技术的一些基本特点。一个没有组合特点的系统,其必然扩展性差,必然面临无法向前进一步进化的可能。而没有定义层次和规则,那也就没有模块化的概念,系统无法进行单个模块的垂直演进,没有模块级别的重用, 当碰到任何不可预知的变动,必然是全部推倒重新再来。这样的系统产品,当然也就不存在生命力可言。

对此审视我们用过的系统产品,那些经久不衰的,如Unix/Linux,必然是遵循这技术进化的根本特征的。而对于当今互联网产品而言,生命力确实是一个奢侈的词,这应该不仅仅是生态环境的选择问题,而需要系统产品生产者更多的反思!