在创建复杂的技术时,最强大的方法就是人们常说的“抽象”(abstraction)。从根本上说,抽象其实就是:将系统中某些不必要的组件细节隐藏起来,同时保留组件与系统进行高效交互的方式和能力。例如,我在编写计算机程序时,不必再用机器代码语言来编程,而可以使用C语言或其他类似的语言。机器代码语言是一种二进制代码,此前,每台特定的计算机都需要用这种语言来设置指令。现在,我写出来的程序不仅易于阅读,还可以转换为机器代码语言。在很多情况下,我甚至不需要知道程序将会在哪种特定的机器上运行,那些与机器有着更深层级交互的其他程序自然会“考虑”细节。换句话说,这些细节在编程时已经被我抽象化了。
这种抽象方法在技术中无处不在。在与某个界面友好的网站进行互动时,对于网站的内部技术细节,我们并不关心;在将烤面包机的插头插入某个插孔中时,我们也不需要知道电力是哪里输送过来的,或是发电厂位于什么地方。这就好比我们无须知道搜索引擎是如何给出具体结果的。只要接口或界面是合乎逻辑的、可以使用的,那么我们就只需要关注正在构建或修复的细节,而不用担心接口和界面背后的一切复杂问题。利用这种抽象方法,我们可以在一种技术的基础上构建出另一种技术,也就是直接利用他人创建的技术,而无须了解其内部细节。如果你是使用统计软件包分析数据集的财务分析师,或是使用预设代码创作有趣动画的应用程序开发者,那么你无疑已经在使用抽象方法了。
抽象给人们带来的最大好处是专业化。即使系统拥有数百万量级的交互,系统的构建者和维护者也不是必须知道它到底是如何工作的。抽象使他们只需了解自身关注的某个具体部分,而其他部分的细节会被再次抽象化。
然而在这个纠缠时代,抽象方法也可能会崩溃。事实上,这种情况出现得越来越频繁。在一个系统中,原本被设计者和构建者屏蔽的各个组成部分,正在越来越多地以意想不到的方式发生碰撞。
这一点在金融领域显得尤为突出。在当今的金融市场上,“参与者”早就不仅限于人类了,大量以各种信息为基础的计算机程序也参与了交易,而且速度比人类手动执行快了无数倍。这些计算机程序以异常复杂的方式相互联系着,并通过巨大的交易网络对决策进行级联式放大和传播。那么,它们究竟是如何做出交易决策的呢?某些计算机程序能从海量的数据中总结出有意义的参数。
结果可能会非常极端。2010年5月6日,全球金融市场出现了闪电崩盘,股市出现了大规模的、非常迅速的巨幅震荡。 [27] 许多上市公司的市值都因此遭受了重创,不过不久之后又都基本重回原位。这次闪电崩盘涉及一系列交易算法和实施细则,这些算法和细则以意想不到的方式进行了交互,在短时间内便造成数十亿美元的损失。尽管很复杂,但这些系统并非处于真空地带,它们是更高层级的技术生态系统的一部分,而这个技术生态系统决定了每种证券或商品的交易时段。金融系统还会受到一系列法律法规的约束。当然,法律法规本身即是一个系统,而且是一个庞大且复杂的系统。不同法律之间存在相互依赖、相互援引的关系,且联系方式时而精确、时而混沌,令人难以琢磨。
此外,这些交易所依赖的基础设备,都建立在持续发展了数十年的技术之上。这样一来,整个系统就成了“新”与“旧”的组合:在这个系统中,古老的依靠人工喊价的实物交易与通过光纤传输完成的电子交易共存。我们在构建能够实现高效交易的计算机程序时,不仅要考虑日新月异的计算机科学、繁杂的金融工具和深不可测的法律法规等,还要深入了解物理学。因为“光在不同材料中的传输速度”这一点在交易中至关重要。因此,我们说,地球上没有人能完全理解金融世界中相互关联的所有系统,甚至没有人能完全理解其中任何一个系统。
当然,在很多情况下,系统的使用者确实只需要很好地理解系统的一小部分,甚至仅是最表层的一部分就可以了。在一家金融公司里,程序员可能只需要知道如何维护交易系统,而不需要了解计算机在物理层面上的基础设置;有的人可能只会关注某个特定的软件,这些软件可以对公司外部的消息进行过滤,然后将部分信息传输到公司内部进行运算,至于其他大部分信息,只作大致了解即可;为该公司工作的律师则需要了解与各种交易有关的法律条文,但不需要知道软件、服务器或光纤的任何细节。在这里,抽象方法给我们带来了很大的便利。
在大多数情况下,对某个事物“足够”了解,看起来已经很不错了, [28] 但是,当我们构建出越来越复杂的系统之后,在系统及其子系统运行的不同层级之间就会越来越频繁地出现跨界交互现象。尤其是随着事物之间的相互联系不断加强,我们愈加难以判断原有的那些粗略的、不完整的理解是不是仍然够用。在纠缠中,事物会在不同的抽象层级上相互碰撞,以各种令人无法想象的方式进行交互。在充满交互的网络中,常常会出现被复杂性科学反复提及的“涌现”(emergence),也就是某种层次上的交互最终导致其他层次上的交互出现了预料之外的现象。涌现,在所有类型的复杂系统中都很常见。例如,昆虫的集体飞行便是一种涌现行为。另外,在金融系统中,涌现也很常见。金融系统的运行所涉及的因素多种多样,上至全球范围内的算法交互,下至每条网络线的传输速度。要想真正搞清楚哪些细节应该被抽象化,是一个太过繁杂的问题。
当系统内部深处的某些微小细节像“微型造物主”一样崛起,并开始破坏技术系统的其他组成部分时,我们就不能只对系统进行局部理解了。当系统处于纠缠之中时,其内部各部分之间的交互会陷入混乱,以往帮助我们管理复杂性的等级结构和抽象方法,都会迅速地分崩离析。
那么,在可见的未来中,人类是否有希望找到摆脱这种混乱的办法,并让世界重新回到可管理的状态呢?或者,我们注定要带着深切的、无法言喻的恐惧感来面对这些不断增殖的系统?
在大多数人看来,不完全了解那些技术系统,不知道所在城市的基础设施细节,不理解苹果手机的硬件如何验证指纹,不清楚法律法规如何促进国际贸易,其实并没有什么关系。人们简单地认为,对于那些复杂的系统,只需要明白如何使用即可,它们的具体机制是什么则无关紧要。不过,对于一个新工具的工作原理,有人搞不懂是一回事,所有人都搞不懂又是另一回事。许多人还在自欺欺人地以为,专家们终会把我们从这种庞大的复杂性中拯救出来,因为他们理解我们所不理解的东西。但是事实并非如此,专家也不一定理解,依赖专家的时代早就一去不复返了。
我们过去所采用的用以理解这些系统的思维方式,也就是找到“挑战者号”航天飞机失事原因的那种思维方式,现在已经完全失效了。这很令人绝望。纠缠的世界并非远在天边,而是近在眼前。每个人都需要用新的思维方式去理解技术,甚至是那些我们轻松地将理解外包给专家的技术。
虽然对人类而言纠缠时代的到来是一场严峻的挑战,但我仍然满怀希望,并坚信:我们定能学会如何处理这些系统,至少在某种程度上。
但是,要想真正理解这个由人类一手创造的时代,我们就需要先退而求其次,将迫使我们陷入复杂性、阻碍我们理解复杂性的各种因素找出来。