技术系统变得越来越复杂的主要原因是“吸积”和“交互”。随着时间的推移,系统中不断加入更多的组成部分,部分之间也增加了越来越多的连接。“必须处理的例外情况”和“普遍的稀有事物”也让技术系统变得愈加复杂。
要想使用互联网,我们就必须忍受或是间接地忍受杂乱无章、东拼西凑的网络世界。真是一团糟!互联网的第一步是在20世纪60年代迈出的。 [1] 当时,有人创造出了一个巧妙的设计,使人们能够在不同的地方通过计算机传递信息包。于是,小网络被相互关联起来,构成了大网络。同时,为了高效地传输信息,人们还开发出了各种各样的协议。
到了今天,互联网的应用已与其最初出现时大不相同,以安全问题为例。互联网原本是研究者以沟通为目的开发出来的系统,对于要求高效和安全的大规模商业交易而言,并不理想。为了弥补这种缺陷,促进商业交易,人们在原有的互联网基础设置上开发出了很多不同的机制,包括加密和解密信息的方法,以数字方式转移资金的规则,等等。令人高兴的是,这个系统确实变得有用了。然而,在网站的用户界面背后,其实潜藏着一个奇怪且复杂的结构。有时候,作为用户的我们也能直接窥见些许混乱的迹象,例如,网页上弹出的安全证书警告。是的,很多事物都是这样,有用,但是远远称不上优雅。
与此类似,开发网站所用的HTML语言,在设计之初,也并非是为了服务诸如谷歌在线办公软件(Google Docs)这类基于全球广域网(Web)的交互式应用程序。现在,这类应用程序已经投入运行,但人们仍然在付出代价:我们必须在一个简单的系统上建造一栋非常宏伟的巴洛克式建筑。倘若你想一瞥这种复杂性的一角,只需查看一下谷歌主页的源代码就足够了。虽然我们在浏览器中看到的网页既简洁又优雅,但是潜藏在这个表象下的东西却数不胜数。我上一次查看谷歌主页的源代码时,其字符数已超过了10万个,如果完整地打印出来,将超过50页纸! [2]
再比如电子邮件。从表面上看,这是一个相对简单的应用程序,已经发展了好几十年。在其古老的原始结构的基础上,消息线程等各种新功能层出不穷。不过,网络杂志《页岩》( Slate )的互动编辑克里斯·柯克(Chris Kirk)在尝试构建自己的电子邮件客户端程序之后指出:“虽然电子邮件的软件时有创新,但这些创新都建立在过时的系统之上,如同狡猾的平衡术,有时甚至相当随意,比如,将电子邮件恢复为最初形式,或是将它改头换面。” [3]
在计算机学和工程学中,有一个术语kluge,指的是拼凑起来的系统,也就是将许多不同的东西混合在一起,以求解决问题的系统。这种系统肯定是不精致、不优雅的,而且很多时候庞杂得毫无必要。虽然这种拼凑起来的系统是有效的,但远远称不上完美。有些东西的第一代设计可能是相当优雅的,但是随着时间的推移,它们的结构变得越来越复杂,最终变成了杂乱的鲁布·戈德堡(Rube Goldberg)式 的应急之物。
包括互联网在内,在每一个技术领域中,都存在着这类拼凑起来的系统,例如交通网络和医疗设施。以家庭娱乐系统为例,它们虽然有用,但需要同时使用好几个遥控器,以及一大团乱麻般的电线、信号线和数据线。
美国的法律体系也是个拼凑起来的系统。这是一个为了达到特定目的而被构建出来的技术系统,远远称不上优雅。就像计算机代码是操作软件的书面描述一样,法律法规本质上也是技术代码的书面体现。 [4]
毫无疑问,《美利坚合众国宪法》是一部非常优雅的文件,只用了寥寥数页,就为代议制民主奠定了坚实的基础。当然,宪法的确立并不是故事的结局。对联邦法律具有指导意义的《美国法典》是在宪法的框架内发展起来的。这些法律致力于阐明宪法的一般原则,以及对各种具体情况的处理准则和方法。例如,《美利坚合众国宪法》只用一句话规定了国会有权建立公共邮政服务机构,而在《美国法典》中,有关这个政府职能的阐述多达500余页。 [5] 此外,美国联邦邮政法规还规定了从邮政局的职位设置到邮政资费等各方面的所有细节。总而言之,《美国法典》比《美利坚合众国宪法》要复杂得多。 [6] 事实上,《美国法典》的规模和互联性仍在不断增加,时至今日,其总字数已经超过了2 200万,内部各章节之间的关联点也已超过了8万个。
其实,无论在什么地方,我们都可以观察到,随着时间的推移,各种系统的复杂性都出现了大规模增长。我们还发现,一般来说,当一个复杂的系统庞大到一定程度时,无论其具体形式如何,都会变成一个拼凑起来的系统。莱特兄弟于1903年制造的飞机是简约主义的杰作 [7] ,只有很少的几个部件,载人后总重量仅为340千克;而到了今天,制造一架波音747-400飞机 [8] 需要用掉67 000千克铝材,600万个独立部件和275千米管线 [9] 。这是个普遍现象,在过去的200年里,我们制造出来的机器所包含的零件数量一直在大幅增加。
那么,对于影响着我们生活方方面面的,现代技术系统中的软件来说,情况又如何呢?衡量软件复杂性的常用指标之一是程序代码的行数。据估计,微软操作系统的源代码行数近10年增长了10倍。 [10] Photoshop的源代码行数在过去20年里爆炸式增长,几乎是1990年的40倍。 [11]
在电话通讯系统中,类似的情况同样存在,随之而来的还有巨大的复杂性。20世纪20年代,美国的电话通讯系统已经拥有了大约480万千米的收费线路和大约1 700万部电话。 [12] 要知道,就当时而言,电话才刚刚问世几十年;而时至今日,相关的技术生态系统已遍布全美。
所有这些系统都是为了实现某个特定功能,由一代又一代的专家设计、构建出来的。有人可能会认为,如果这些系统的设计是合理的,那么它们理应合乎逻辑、优雅,甚至简洁,也理应易于说明、易于修复。然而,尽管我们已尽了最大努力,但技术系统还是变得越来越复杂、越来越庞大。这绝非偶然,技术发展过程中某些固有的力量,使我们在“复杂性”中越陷越深。和万有引力之类的物理定律截然不同,这些力量强大到能让系统变得越来越复杂。不管时代如何变迁,它们总能压制住人们对简单的渴求,以致在人们心中,它们已如物理规律般不可抗拒。可是,为什么会这样呢?
在本章中,我将详细分析一些会使系统变得日益复杂的因素。从表面上看,这些因素完全合理,它们所引发的每一个变化都能使技术更加适应不断变化的环境,要么有助于系统继续在新环境中正常运行,要么增加了系统的实用性。然而,这些因素最终会使原本优雅的解决方案变成杂乱无章的、拼凑起来的系统。无论付出多大努力也无法避免这样的结果,无法阻止技术复杂性的不断增长。最终,我们生活的方方面面都会受到影响。
各种技术系统皆会随着时间的推移而越来越复杂,究其首要原因,也是最显而易见的原因是系统内部存在着双重力量:吸积(accretion)和交互,也就是说,随着时间的推移,系统的组成部分越来越多,同时组成部分之间的关联也越来越多。