Skip to content

复杂

Published: at 06:50 AM

Table of contents

Open Table of contents

复杂

现代社会,每个人都在与“复杂”打交道,很多时候“复杂”本身才是要解决的问题,但人们往往意识不到这个透明的障碍,以至于自我感动式的改进、发展、进步,实则却在原地踏步。因此我想专门讨论一下这个概念,希望能对部分读者有所帮助。

在介绍复杂度这个概念前,首先得先介绍什么是复杂系统。

复杂系统

直接引用维基百科的定义:

复杂系统(英语:complex system),又称复合系统,是指由许多可能相互作用的组成成分所组成的系统。在很多情况下,将这样的系统表示为网络是有用的,其节点代表组成成分,链接则代表它们的交互作用。复杂系统的示例,例如:地球的全球气候、生物、人脑、社会和经济的组织(如城市)、一个生态系统、一个活细胞、以及最终的整个宇宙。由于其组件之间、或特定系统与其环境之间的依赖性、关系、或相互作用,复杂系统系为行为本质上难以建模的系统。系统之所以“复杂”,系具有来自这些关系所产生的不同特性,例如:非线性、涌现、自发秩序、适应、和反馈循环等等。由于这样的系统出现在各式各样的领域,它们之间的共同点,已成为其各自独立研究领域的主题。

根据这个定义,很多东西都可以被视为复杂系统,比如社会层面的人际关系网、国家秩序、公共服务体系、法律等,经济层面的贸易网络、金融、医疗产业链、各行各业的供应链、交通道路系统等,人文层面的某个学科的知识体系、某个民族的文化、某个文明的历史等。

复杂度

在计算机科学算法分析中,复杂度是用以衡量算法运行所需时间和空间的一个概念。但它也广泛存在于其他领域中,特别是在复杂系统中。但其目前并没有特别好的形式化定义,为方便讨论,我在此将复杂度定义为某个复杂系统的三个“多”:该复杂系统的组成元素特别多,元素之间的交互特别多,元素本身属性与功能特别多。

复杂度永存(没有银弹)

面对复杂度,人们常常希望找到一种通用的、简单的解决方案,一举解决所有问题。但现实是:并没有。软件工程领域中,IBM大型机之父佛瑞德·布鲁克斯在其著名论文《没有银弹》中指出,软件开发中不存在能够显著提高生产力的单一技术或方法。同样地,在其他领域,面对复杂系统的问题,也不存在一劳永逸的解决方案。

复杂度是复杂系统固有的属性,无法完全消除。试图通过简单的手段来规避或消除复杂度,常常会导致新的问题和更大的复杂度。

复杂度转移

人们尝试减少复杂度,但是这种尝试的结果往往是转移复杂度而非真正减少复杂度。这也是我为什么翻译《永恒的钟摆》一文的原因。作者描述出了人类在软件工程上在两种技术路线之间来回摇摆的现象,但没有涉足这些现象下本质的原因——复杂度永存

在这一点上可以举的例子实在是太多了:

  1. 人们设计出抽象层级更高的高级语言以加快开发效率、降低使用学习难度,但高级语言的灵活性、运行效率往往低于低级语言。参见《软件幻灭》一文。

  2. 苹果公司的iOS系统以简单易用著名,但随之而来的问题是iPad至今难以成为真正的生产力设备——乔布斯对iPad的期望是完全替代掉传统PC设备,但我目前没有见到哪家公司大批量采购iPad作为办公设备。因为为了实现简单易用这一目标,交互逻辑需简单,而生产力相关应用没有一个是交互逻辑简单的。在生产力层面上来说,我甚至可以说Office三件套Word、PowerPoint、Excel就是复杂度本身,交互逻辑再如何简化,用户使用起来的复杂度并不会消失,所以目前的结果是——iPad上的Office三件套是阉割版(即缺失了部分功能)。

  3. 相当多的软件和苹果公司的情况类似。命令行软件是一种没有图形化交互界面的软件,只能敲入命令来使用,这些软件体积小、功能丰富,但对于普通人而言使用难度大。于是有软件公司给这些命令行软件加上了图形化交互界面以方便普通用户利用鼠标、键盘来使用这些程序。如果这些软件本身功能简单,那么这倒没有什么问题,程序员帮助用户承担了他们本应承担的复杂度。然而现代软件臃肿庞大,本身就是复杂系统(复杂到开发人员自己都无法掌握),套上一层图形化交互界面并不能减少复杂度,用户依然不知如何使用,以至于常常出现类似这样的情况:“Mac关闭iCloud云盘同步之后,桌面和文稿消失了!”

  4. 发达国家使用法律的成本普遍很高,包括金钱成本以及时间成本,夸张地说甚至还有较高的认知成本。这是国家秩序的治理复杂度被转接到了法律条文上的结果。

  5. 公司业务规模扩大时,需要更多的人手来管理日渐扩大的业务(即雇佣更多人来管控增长的复杂度),但更多的人手本身又成了新的复杂度来源并造成新的问题如信息不畅、机构庞大、决策复杂、行动缓慢,这一现象过于普遍以至于大家给其取了个名:“大公司病”。其实问题核心在于复杂度并没有消失,只是从业务转移到了公司人力组织上。大体量的业务本身就是复杂的,它只能被转移不能被消灭。

  6. 文字也有类似的现象。同样的意思,用文言文比用白话更加言简意赅,但文言文的学习难度远大于白话。复杂度从文字含义上转移到了文字数量上。

但我不是要完全否定减少复杂度的尝试,有些尝试虽然没能减少复杂度,但是将复杂度转移到了更低成本的方向,这也算是比较不错的结果。

超越复杂度的改进

因此,认识到复杂度与复杂系统是认识到许多问题根源的第一步。在此基础之上,我们才能做出真正的改进。

那什么才是真正的改进也一目了然了:

  1. 电以及电灯的发明才是真正的消灭了照明这件事的复杂度。

  2. 计算机的发明才是真正的消灭了计算这件事的复杂度。虽然严格意义上说,计算机只是把计算的复杂度转移至芯片层面(半导体发明前则是机械结构层面),但大多数计算逻辑是重复的,也因此芯片层面的计算逻辑抽象与复用使得计算复杂度真正的被降低。

  3. 电动车也真正减少了传动系统的复杂度——电动车没有变速箱。

这些,其实正是大家平时所说的“创新”。但有些事物的复杂度,是无法被消灭的,而针对这些事物的改进,方向多半是错误的——该改进的是人本身。

为什么说“该改进的是人本身”?

这个观点其实很好理解,你总不能指望一群猴子发射火箭到月球上吧?你也不能指望一个不愿意学习如何使用Office三件套的人通过iPad版Office三件套就会熟练使用它们了吧?类似的,你也不能指望一个不会写代码的人用AI工具去给Linux1贡献代码吧?

这些东西本身就是复杂系统,火箭就是有那么多零件,Office就是有那么多功能,Linux的代码就是有那么多行,这些内生的复杂度无法被消灭,只能让人学习并尽可能掌握它们。

无法掌控的复杂

但很可惜,人脑是有极限的,有些复杂系统过于庞大复杂以至于没有人类组织可以掌握。也有很多复杂系统因为缺乏经济利益而让后人没有动力掌握与维护,最终导致这些复杂系统从历史上消失。有些消失的复杂系统甚至是人类的知识。

当复杂系统发展到没有一个人可以完全掌握的复杂程度时,这个系统完全有可能在某一天将因为某个细小的、难以预料的错误而整体崩溃。这在计算机领域常被称为“屎山代码”——没人知道这些代码是在做什么,也没人敢修改这些代码,在某天它突然坏了便会引起整个系统的崩溃。在金融领域这也被称为“黑天鹅”。社会层面也有太多实际的例子,毕竟整个社会本身就是一个复杂系统,比如2008年金融危机,比如近些年来的战争,比如石油危机。最近的例子便是微软蓝屏事件。但要注意的是:这个事件的发生并不是屎山代码的缘故,而是因为Windows操作系统过于普遍,数以亿计的计算机互相交联,形成了一个极其复杂的网络,并且与人类社会的许多日常功能相耦合,以至于Windows中一个第三方软件的错误,能间接导致机场停运、地铁停运、银行关门等。而大多数人完全没听说过自己的办公电脑上有这样一个软件,更没想到它会让自己上不了班(笑)。

有时我甚至感觉文明更迭与王朝兴衰的根本原因就在于此,一个百废待兴的国家组织必然是简约的、易于掌控的,而一个富饶强盛人口众多的国家内部组织必定是复杂的,甚至是超过人所能掌控的复杂。

而人类如何应对这些无法掌握的复杂系统呢?

我也不知道。

Footnotes

  1. Linux 是一款免费开源的操作系统,广泛应用于服务器、嵌入式设备、超级计算机等领域,是目前全球使用最广泛的操作系统之一。