最早的书写系统使用风格化的图片——“象形文字”——来代表词或概念。于是像 的符号代表“太阳”, 代表“树”。但是没有哪个书写系统能让其口语里的每一个 词都有一个对应的象形文字。为什么呢?

从一开始,人们就不打算这么做。书写有专门用途,如记录库存和纳税情况。后来,新用途需要更大的词汇量,但在此之前,文士们应当已经日益发现,在他们的书写系统里增加新的规则 比增加新的象形象文字更容易。例如,在某些系统中,如果一个词听起来像是两个或以上的其他词连着念,它就可以用这些词的象形文字来表现。如果英语用象形文字书写,我们就可以把“叛国罪” [1] 一词写成 。这样并不能精确表现该词的发音(对于这一点,它实际的拼写方式其实也没有做到),但很相似,足以让任何讲这种语言并且懂得规则的人理解。

有了这个创新,人们就没那么多动力去创造新的象形文字了——比如说用 来表示“叛国罪”。造这种字总是很烦人,倒不是因为设计令人难忘的象形文字很困难(虽然确实很困难),而是因为在使用这个字之前,你得把它的意思告诉所有的预期读者。这是很难做到的:如果很容易,那么从一开始就远不需要写那么多字。如果用前述规则来代替创造新字,效率会更高:任何文士都能写出 ,就算从没见过这个词的读者也能明白它的意思。

然而,该规则并不适用于所有的情况:它不能表现单音节的新词,还有许多其他词语。与现代书写系统相比,它看上去相当笨拙而且不够好。但是,它已经包含了某种重要的、任何纯象形文字系统都做不到的东西,那就是向书写系统里引入从未有人明确添加的词。这意味着它有延伸,而延伸总有解释。正如科学上一个简单的公式可能是大量事实的概括,一个容易记忆的简单规则也可能将许多新词引入书写系统,不过前提是它反映了某种潜在规律。这个例子里的规律是,在任何一种语言里,所有的词都由仅仅几十种“基本音”构成,在人类能够发出的范围很广的发音中,每种语言都选了一套不同的基本音。为什么?后面我会讨论这个问题。

一个书写系统的规则得到改进后,它可能跨过一个重要的门槛:对这种语言通用 ——即能够表现该语言的每一个词。例如,考虑我刚才讲的这条规则的如下变种:人们不用其他的词来造词,而是用其他词的首音 来造词。例如,如果英语用象形文字书写,新规则将使“叛国罪”(treason)一词用“帐篷”(Tent )、“摇滚”(Rock )、“鹰”(EAgle )、“斑马”(Zebra )、“鼻子”(Nose )的象形文字来拼写。规则的这个微小改变,使这一书写系统变得通用。据认为最早的字母表就是从这样的规则中演变出来的。

通过规则实现的通用性,与完整列表(例如假想中完整的象形文字图表)有着不同的特性。区别之一在于,规则可以比列表简单得多。单个符号也可能更简单,因为数量更少。但区别不止于此。由于规则利用语言里的规律来运作,它其中就蕴涵了这些规律,因此包含的知识比列表更多。例如,字母表包含着词语怎样发音的知识,外国人可以用它来学习说 这种语言,而象形文字至多只能用来学着写。规则还可以在不给书写系统增加复杂度的情况下容纳前缀和后缀之类的变形,从而使书面文本能够编码更多的句子语法。而且,基于字母表的书写系统覆盖的不止是其语言里的所有词语,而是所有可能的 词语,尚未造出来的词语已经在其中有了一席之地。这样就不会出现每个新词都会暂时打破书写系统的情况,系统本身就能用来以简易、分散的方式造新词。

或者说,至少有过这样的可能。设想一下,如果造出第一个字母表的那位不知名文士知道他作出了有史以来最伟大的发现之一,该是多么美好。但他未必知道。就算知道,他也显然没能把自己的热情传递给很多人。因为事实结果是,古代人几乎没有运用过我刚才讲的这种通用性的威力,就算现成可用的时候也是这样。虽然许多社会都发明了象形文字书写系统,而且有时确实按我刚才所说的方式从中演化出了通用字母表,但从来没有迈出“显而易见”的下一步——即普遍采用字母表并放弃象形文字。字母表局限于特殊用途,如书写生僻词语或译写外国名称。一些历史学家相信,在人类历史上,基于 字母表的书写系统,这样的概念只出现过一次——由腓尼基人的某些不知名前辈提出,而后腓尼基人将它在地中海一带传播开来,因此,所有基于字母表的书写系统,都要么源自腓尼基文字,要么受到了它的启发。然而,连腓尼基文字里也没有元音字母,削弱了我刚才提过的一些优势。希腊人加上了元音字母。

有时人们会说,文士们刻意限制字母表的使用,因为他们担心一种太容易学习的系统会威胁他们的生计。但这或许是一种过于现代的牵强解读。我怀疑,不管是通用性的机遇还是陷阱,都从没来没有人想到过,直到历史上很久以后。古代发明家们只在意他们面临的特定问题——书写特定的词语,为了解决这类问题,其中一位发明了一个碰巧具有通用性的规则。这样的态度看起来狭隘得难以置信,但那时候事情就是 狭隘的。

而且,在早期历史的许多领域里,这种情况的确都反复出现:通用性实现的时候,它并不是首要目标,如果算是一个目标的话。系统为了适应某个狭隘目标而作的一个微小改变,刚好也使系统变得通用。这就是向通用性跳转 。

就像书写一样,数字 也可以追溯到文明初期。现在的数字家将数 与数字 区分开来,前者是抽象实体,后者是代表数的物理符号,不过数字是首先被发现的。数字从“计数符号”( ……)或石头之类的象征物演变而来,史前人类用这些东西来记录离散的实体,诸如动物和天数。如果有人从圈里放出一只山羊就做一个记号,回来一只山羊就划掉一个记号,那么,当所有的记号都被划掉时,所有的山羊都回来了。

这是一个通用标记系统。但是,正如突现是有层次的,通用性也有层次。标记之上的一层是计数,使用数字。人在标记山羊时只是想着“又一只,又一只,又一只”,计数时则是想着“四十,四十一,四十二……”

只有凭着后见之明,我们才能把计数符号当作一个数字系统,称为“一元”系统。就其本身而论,它并不实用。例如,用计数符号来表示数时,就算最简单的操作——如比较大小、算术计算甚至只是抄录,也要重复整个标记过程。如果你有40只山羊,卖出20只,并且对这两个数都做了标记,也还是要进行20次独立的删除操作,才能得到最新的记录。同样地,为了检查两个相当接近的数是否相等,需要对它们互相标记。因此,人们开始改进这一系统。最早的改进可能只是对计数符号进行分组,例如用 替代 ,这使算术计算和比较大小变得更容易,因为可以对整个组进行标记,并且一眼就能看出 与 不相等。后来,标记分组又被简写符号代替:古罗马系统使用I、V、X、 、C、 和 分别代表一、五、十、五十、一百、五百和一千。(它们同我们现在的“罗马数字”不完全一样。)

所以,这是另一个通过逐步改进来解决特定的狭隘问题的故事。这一次还是没有人想追求更多的东西。虽然加入简单规则就可大大增强系统的威力,虽然罗马人确实偶尔会添加这样的规则,但他们既没有以通用性为目标,也没有实现通用性。在许多世纪的时间里,他们的系统规则是:

——把符号并排放置表示相加。(此规则是从计数符号系统那里继承下来的。)

——符号必须从左至右按递减顺序书写;以及

——只要有可能,相邻的符号都应当用其组合数值的符号替代。

(现今的“罗马数字”的减法规则是后来才出现的,如用VI代表4。)第二条和第三条规则保证每个数都只有一种写法,这使比较大小变得更容易。否则,XIXIXIXIXIX和VXVXVXVXVXV就都是有效数字,很难一眼看出它们代表同一个数。

这些规则利用通用的加法规律,使罗马数字系统拥有了超越标记符号系统的重要延伸,例如进行算术计算的能力。比方说,考虑7(VII)和8(VIII)两个数。规则告诉我们,将它们并排放置成VIIVIII等同于相加。然后,符号要按递减顺序写成VVIIIII。再然后,要用X来取代两个V,用V取代5个I。这样得到的结果是XV,代表15。在这个过程中出现了某种新鲜事物:一条关于7、8和15的抽象真理被发现了,并且得到了证明,其间没有任何人进行过任何计数或者标记。数通过表示它们的数字得到独立的操作。

我说进行算术计算的是数字系统 ,指的是字面上的意思。物理上实现上述变换的,当然是使用系统的人。但为了做到这一点,他们首先要将系统规则编码在头脑里,然后要像计算机执行程序那样执行规则。是程序在指导计算机的行动,而不是反过来。因此,我们称之为“使用罗马数字进行算术计算”的过程,也包括罗马数字系统使用 我们进行算术计算。

罗马数字系统只有让人们这样去做,才得以存留下来——也就是说,使自身在罗马人身上一代又一代地复制下去:人们发现这个系统很有用,于是将它传给后代。就像我说过的,知识是这样一种信息,它在合适的环境里在物理上具象化时,倾向于使自身保持这种状态。

说罗马数字系统控制我们、使其自身得到复制和保存,这听起来似乎是把人类贬低成奴隶。但这是一种误解。人包含着抽象信息,包括独特的思想、理论、意愿、感觉和其他塑造“我”的心理状态。拒绝在发现罗马数字有用时被它们“控制”,就像是反对被自身的意愿控制。就此说来,试图摆脱(罗马数字的)奴役,本身就是一种被(自身意志所)奴役的行为。但事实上,当我服从那个构成我的程序(或说我服从物理规律)时,“服从”的含义与奴隶的服从不同。两种含义在不同的突现层次上解释事件。

与有些人说的不同,罗马数字也有着相当有效地做乘法和除法的方式。一艘船上装着XX个箱子,每个箱子用V乘VII的格栅装着罐子,人们就可以知道船上总共有 CC个罐子,无需任何人去进行冗长的计数,这个数字已经明示了计数结果。而且,人一眼就能看出, CC小于 CCI。这样,不用标记和计数、独立地对数进行操作,为计算价格、工资、税收、利率等应用开启了大门。这也是一个概念上的发展,打开了通往未来进步的大门。不过,对于这些更复杂的应用,该系统并不通用。由于没有比 (一千)更大的符号,两千以上的数全都以一串 开始,跟以千为单位的计数符号没什么不同。一个数字里的这个符号越多,做算术计算时就越要倒回去做标记(把许多该符号一个个数过来)。

正如人们可以往古代书写系统里添加新的象形文字来升级词汇表,也可以往数字系统里添加符号来扩大适用范围。这件事已有人做了。但由此产生的系统仍然会有一个最大值符号,因此仍然不能成为无需标记进行算术计算的通用系统。

把算术从标记中解放出来的唯一方法,是利用有着通用延伸范围的规则。就像字母表一样,很小的一套基本规则和符号就够用了。如今我们普遍使用的通用系统有十个符号,即数位0到9。它的通用性来源于这样一个规则:数位的值取决于它在数里的位置。例如,数位2单独写出来时代表二,但在204这个数里就代表二百。这样的“定位”系统需要“占位符”。例如204里的数位0,它唯一的功能就是使2处在代表二百的位置上。

这一数字系统起源于印度,但不清楚是在什么时期出现的。有可能晚至公元9世纪,因为在此之前只有少数模糊不清的文件似乎显示人们在使用它。不管怎样,它在科学、数学、工程和贸易上的巨大潜力当时并没有得到广泛认识。大约在那个时候,阿拉伯学者们接受了这个数字系统,但直到一千年后它才在阿拉伯世界得到普遍使用。中世纪的欧洲也出现了这种对通用性缺乏热情的奇怪现象,公元10世纪有几位学者从阿拉伯人那里学到了印度数字(结果是误称其为“阿拉伯数字”),但情况又是这样:好几个世纪里这些数字都没有得到日常使用。

早在公元前1900年,古巴比伦人就发明了一个实际上是通用数字系统的东西,但他们大概也不关心其通用性——也根本就没有意识到这一点。这个系统是一个定位系统,但与印度数字系统比起来非常繁琐。它有59个“数位”,每个数位的写法都类似罗马数字系统里的一个数值。因此,用它来对日常生活中常见的数作算术计算,实际上比用罗马数字还要复杂。而且它没有表示零的符号,因而用空格作为占位符。它没有办法表示数值末尾的零,也没有相当于小数点的东西(这就好比在我们的系统里,200、20、2和0.2都写成2,只有通过上下文才能区分它们)。所有这些都表明,通用性不是这个系统的主要设计目标,就算通用性得到实现,也不受重视。

公元前3世纪,古希腊科学家和数学家阿基米德的一段非凡趣事,或许能使我们深入理解这种一再发生的古怪现象。阿基米德在天文学和纯数学方面的研究使他需要对很大的数进行演算,于是他发明了自己的数字系统。他从一个自己熟悉的希腊数字系统开始,这个系统与罗马数字系统相似,不过有一个代表10000(一万)的最高值符号M。该系统的范围因这样一条规则得到了扩展:写在M上面的数字表示该数字乘以1万。例如,表示二十的符号是κ,四是δ,所以二十四万(240 000)可以写成 。

如果人们允许用这个规则产生多层次的数字,例如 意味着二十四亿,该系统就能具备通用性,但很显然他们从来也没有这样做。更令人惊讶的是,阿基米德也没有这样做。他的系统采取了另一种思路,类似于现代的“科学计数法”(用这种方法,两百万写作2×106 ),只是用亿的次方取代了十的次方。但是,他仍然要求指数(一亿需要自乘的次数)必须是一个现成的希腊数字——也就是说,它不太容易超过一亿。因此,这种构造数的方法在我们称为10800000000 的数之后就渐渐无能为力了。只要他不加上这个额外的规则,就会得到一个通用系统,虽然是一个笨拙得没有必要的系统。

即使在今天,也只有数学家需要大于10800000000 的数,而且这种情况很少。但是,这并不是阿基米德加上那条限制的原因,因为他没有就此止步。他在进一步探索数的概念时进行了又一次扩张,这次得到了一个更加庞大笨拙的系统,以10800000000 为底数。不过,这次他又只允许这个数的指数不超过800000000,从而产生了一个比1064×1017 大一些的人为限制。

究竟是为什么呢?在今天看来,阿基米德在他的数字系统里对哪些符号能用在哪些位置上加以限制,实在不合常理。这在数学上毫无理由。但是,如果阿基米德愿意允许他的规则在不带人为限制的情形下应用,他就能发明一个好得多的通用系统,只要从现成的希腊数字系统里把人为限制去掉即可。几年后,数学家阿波洛尼乌斯发明了另一个数字系统,出于同样的原因,他的系统也不具备通用性。好像古希腊世界的每个人都在故意回避通用性。

对于印度数字系统,数学家皮埃尔·西蒙·拉普拉斯(1749—1827)写道:“当我们想到,古代世界最伟大的智者中的两位——阿基米德和阿波洛尼乌斯都未能以他们的聪明才智取得这一成就,就应该体会到它有多么伟大。”但到底是他们没有发现,还是选择了避开?阿基米德应当知道,他连续用了两次的那套扩展数字系统的方法,可以无穷无尽地继续下去。但他也许怀疑,这样得来的数值不能表示人能合乎情理地想到的任何东西。确实,他做这件事的动机之一就是反驳一个当时是不言自明的真理的观点,即沙滩上的沙粒数量是数不清楚的。于是他用自己的系统来计算装满整个天球所需的沙粒数量。这显示,他本人以及整个古希腊文化可能根本没有抽象的数的概念,因此,对他们而言,数值只能代表物体——哪怕是想象中的物体。这种情况下,通用性会是一种很难把握的东西,更不要说追求了。也可能他只是觉得需要避免追求无穷的延伸,以便得到一个有说服力的事例。不管怎样,虽然在我们看起来阿基米德的系统一再“试图”向通用性跳转,但他显然不希望这样。

还有一个猜测成分更重的可能性。不管什么通用性,在狭隘问题希望它解决的事务之外,其最大益处是它对未来创新有用。创新是不可预测的。因此,要在发现通用性的时候看重它,人们要么必须看重抽象知识本身,要么预期抽象知识能带来不可预见的益处。在一个很少经历变革的社会里,这两种态度都是相当不自然的。但启蒙运动改变了这种状况,这场运动的思想精髓就是,进步 值得拥有,并且可以得到。因而,通用性也是如此。

可能就是因为这样,启蒙运动使人们开始认为,狭隘主义和所有那些武断的例外及限制,本身是有问题的,而且不仅是在科学领域里有问题。为何法律要区别对待贵族与平民、奴隶与主人、女人与男人?启蒙运动哲学家洛克等人开始着手把政治制度从武断的规则和假设中解放出来。其他人试着从通用的道德解释里推导出道德准则,而不是仅仅武断地认为它们不证自明。因此,与关于物质和运动的通用理论一道,关于正义、合法性和道德的通用解释也出现了。所有这些情况下,人们都在把通用性当作一种本身值得拥有的特性来追求——甚至把它当成思想观念成立的必要条件,而不仅仅是解决狭隘问题的手段。

在启蒙运动早期历史中发挥过重要作用的一次“向通用性跳转”,是活字印刷 的发明。活字由独立的金属块组成,每块雕刻一个字母。早期印刷对书写的简化,仅仅相当于罗马数字系统对标记的简化:每一页都雕在印板上,一次操作可以复制它上面所有的符号。但是,有了一套活字,其中每个字母都有许多份,就不需要更多的金属加工,只需要把活字拼成词语和句子。制造活字的人不需要知道这些字最终要用来印刷的文档的内容是什么,它是通用的。

即便如此,活字印刷术于11世纪在中国发明出来时,并没有带来多大的改变,可能是因为人们惯常地对通用性缺乏兴趣,也可能是因为中文书写系统使用了成千上万的象形字,这削弱了通用印刷系统的直接优势。但当它于15世纪在欧洲由印刷商约翰内斯·古腾堡用字母活字再次发明出来时,就触发了雪崩式的进步。

在此我们看到了一种向通用性跳转带来的典型转变:跳转之前,人们必须为每一份需要印刷的文档专门制造物体;跳转之后,人们定做(或专门制造,或设计)一个通用物体,在这一事例中是使用活字的印刷机。类似地,1801年约瑟夫·玛丽·雅卡尔发明了一种通用丝织机,现在称为雅卡尔织机。这种织机使人不再需要手工控制每一卷印花丝绸里的每一行针脚,而可以把既定图案编制在穿孔卡片里,指挥织机任意多次地织出该图案。

这类技术中最重要的是计算机,现在越来越多的技术依赖着它,它还在理论和哲学方面有着深远意义。向计算通用性的跳转应该 在19世纪20年代发生,当时数学家查尔斯·巴贝奇设计出了一种装置,他称之为差分机,这是一个机械计算器,用齿轮代表十进制数字,每个齿轮可以嵌入十个位置之一。他原本的目标是狭隘的:将编制数学函数表的工作自动化,诸如对数表和余弦表,这些表在当时的航海和工程中大量使用。当时,这些表由称为“计算者”(computers,计算机一词的来源)的大批办事员编制,出了名地容易出错。差分机的错误较少,因为算术规则已经固化在它的硬件里了。为了用它打印出一个给定函数的表,只需要用简单操作根据该函数的定义对它编一次程。相反,人类“计算者”必须对每个表成千上万次地使用(或者说被使用)函数定义和一般算术规则,每一次都可能出现人为错误。

不幸的是,尽管巴贝奇倾注了自己的大量钱财以及英国政府为该项目投入的资金,但他是个很糟糕的组织者,从来也没有成功地造出一台差分机。但他的设计是合理的(除了少数微不足道的错误)。1991年,伦敦科学博物馆的工程师多伦·斯瓦德领导的团队成功地完成了差分机的制作,使用的是巴贝奇时代可能达到的工程公差。

用今天的计算机甚至计算器的标准去衡量,差分机的功能极其有限。但它有可能存在的原因是,物理学产生的所有数学函数是有规律的,因此航海和工程产生的数学函数也是有规律的。这些函数称为解析函数,早在1710年,数学家布鲁克·泰勒就已经发现,这些函数可以仅仅通过重复的加法和乘法进行任意程度的近似。(此前人们已经知道一些特例,但向通用性的跳转是由泰勒证明的。)因此,为了解决计算少数需要制表的函数这种狭隘问题,巴贝奇造出了一个通用于解析函数计算的计算器。在他那与打字机类似的打印机上,还运用了活字印刷的通用性,如果没有这种通用性,打印表格的过程就无法完全自动化。

巴贝奇原本并没有计算通用性的概念。但是,差分机已经非常接近这一点——不在于它的计算能力,而在于物理构成。对它编程使其打印出一个特定的表,要对特定的齿轮进行初始化。巴贝奇最终认识到,这个编程阶段本身是可以自动化的:可以把设置参数预设在穿孔卡片里,就像雅卡尔织机那样,然后通过机械手段转移给齿轮。这不仅可以去掉剩下的错误来源,还能增强机器的功能。巴贝奇后来意识到,这台机器还可以打出新的穿孔卡片,以备自己日后使用,还能控制接下来要读取哪张卡片(比如说,根据齿轮的位置从一叠卡片里挑选),然后某种质变就会出现:向通用性跳转。

巴贝奇将改进后的机器称为解析机 。他与他的同事——数学家洛夫莱斯伯爵夫人艾达知道,这种机器能够进行人类“计算者”能做的所有计算,不仅是算术,还可以进行代数计算、下象棋、作曲和处理图像等。它将是一种今天称为通用经典计算机的东西。(我将在第11章节讨论量子计算机时解释“经典”这个条件的意义,量子计算机在一个更高的通用性层次上运作。)

不管是他们还是此后一个多世纪里的任何人,都没有想到计算在今天最常见的用途,例如互联网、文字处理、数据库搜索和游戏。但他们的确预见到的另一个应用,那就是进行科学预测。解析机将是一个通用模拟器——只要有相关的物理规律,它能以任何想要的精度预测任何物理对象的行为。这是我在第3章中提到过的通用性,通过这种通用性,彼此不相似、由不同物理规律支配的物理对象(例如大脑与类星体)能表现出同样的数学关系。

巴贝奇和洛夫莱斯都是启蒙运动时期的人物,所以他们懂得,解析机的通用性将使它成为一项划时代的技术。然而,尽管他们作出了巨大努力,却只将热情传给了少数几个人,而这几个人没能将热情传给任何人。于是,解析机成了历史上一件悲剧性的憾事。要是他们寻找过其他实验方法,就可能发现,完美方案已经在等着他们:继电器(由电流控制的开关)。继电器是电磁学基础研究最早的应用之一,此时正将因为电报的技术革命而大规模制造。重新设计的解析机,使用电流的开与关来代表二进制数字,用继电器进行计算,将比巴贝奇的解析机更快,也更便宜、更容易制造。(二进制数在当时已经众所周知。数学家和哲学家戈特弗里德·威廉·莱布尼茨甚至早在17世纪就建议利用它们来做力学计算。)这样,计算机革命就能提早一个世纪发生。鉴于电报和印刷技术同时出现,互联网革命很可能随之到来。科幻小说作家威廉·吉布森和布鲁斯·斯特林在他们的小说《差分机》里,对这些可能的情形进行了激动人心的描绘。记者汤姆·斯丹迪奇在他的著作《维多利亚时代的互联网》中提出,早期电报系统在没有计算机的情况下,在接线员之间创造了一种类似互联网的现象,其中有着“黑客、网恋和网婚、聊天室、网络口水战……”

巴贝奇和洛夫莱斯还想到了通用计算机的另一种应用,该设想直到今天还未能实现,就是所谓的人工智能 (AI)。由于人类大脑是服从物理规律的物理对象,并且由于解析机是一台通用模拟器,可以通过编程使它在各种意义上都按人类的方式思考(虽然非常缓慢,而且需要数量多得不现实的穿孔卡片)。然而,巴贝奇和洛夫莱斯否认解析机能做到这一点。洛夫莱斯认为“解析机不能创造任何东西。它能做到我们知道该如何让它去做的所有事情,能够遵循分析,但没有能力预见任何分析关系或事实”。

数学家和计算机科学先驱阿兰·图灵后来称这个错误为“洛夫莱斯夫人的异议”。问题不在于洛夫莱斯未能认识计算通用性的意义,而是她未能认识物理规律通用性的意义。当时的科学对大脑的物理特性几乎毫无了解,而且达尔文的进化论尚未发表,有关人类本性的超自然学说仍然非常盛行。对于今天仍然相信人工智能不可能实现的少数科学家和哲学家来说,立场更加不可调和。例如,哲学家约翰·塞尔从以下历史角度来看待人工智能问题:几个世纪以来,一些人试图以机械方式解释头脑,以当时最复杂的机器进行明喻和暗喻。一开始,人脑被说成像一套极其复杂的齿轮和杠杆,然后认为它像液压管,然后是蒸汽机,然后是电话交换机——现在我们最了不起的技术是计算机,人脑就被说成是计算机。塞尔说,这仍然不过是比喻而已,没有理由认为大脑像计算机比像蒸汽机更多一点。

但其实是有理由的。蒸汽机不是通用模拟器,而计算机是,因此预期计算机能做神经元能做的一切事,并不是比喻:据我们所知,这是物理规律的一个已知并且已被证明的性质。(而且,碰巧液压管也能做成通用经典计算机,齿轮和杠杆也可以,就像巴贝奇所说的那样。)

具有讽刺意义的是,洛夫莱斯的反对论点几乎与道格拉斯·霍夫施塔特对还原论的论述(见第5章)有着相同的逻辑——但是霍夫施塔特是当代最主要的人工智能可能性的支持者 之一。这是因为他们两人作了一个相同的错误假设,认为低层次计算步骤不能叠加成更高层次的、能对事物产生影响的“我”。他们的区别在于,在由此导致的两难局面中作了相反的选择:洛夫莱斯选择了人工智能不可能实现的错误结论,而霍夫施塔特则选择了这种“我”不可能存在的错误结论。

由于巴贝奇既没能造出一台通用计算机,也没能说服别人去建造一台,所以等到第一台通用计算机建成时,已经过了整整一个世纪。在此期间发生的事更像是通用性的古代史:虽然甚至在巴贝奇放弃以前就有人造出了与差分机类似的计算仪器,解析机却几乎完全被忽视了,连数学家都忽视了它。

图灵在1936年提出了明确的通用经典计算机理论。他的动机并不是建造一台这样的计算机,而只是抽象地用该理论去研究数学证明的性质。几年之后第一批通用计算机建成时,仍然不是为了特地实现通用性而造出来的。它们是英国和美国在第二次世界大战期间为了特定的战时应用而建造的。英国的计算机名为“巨人”(图灵参与了它的建造),用于破译密码;美国的计算机ENIAC设计出来是为了解出大炮瞄准所需的方程。两者所用的技术都是电子真空管,它们的功能与继电器相似,但速度要快一百倍。同时,在德国,工程师康拉德·楚泽在用继电器制造一台可编程的计算器——就像巴贝奇本来可以做到的那样。这三台设备都有着通用计算机必需的技术特征,但没有一台是为此配置的。到头来,“巨人”除了破译密码从来没干过别的事,而且战争结束后大部分被拆除。楚泽的计算机被盟军的轰炸摧毁。但ENIAC确实 得以向通用性跳转:战争结束后,它应用于气象预报和氢弹项目等多个领域,而它根本不是为了这些领域而设计的。

自第二次世界大战以来,电子技术的历史一直由小型化主导,每一代新设备都使用更小的微型开关。大约在1970年,这些改进带来了一次向通用性的跳转,当时几家公司分别独立制造出微处理器,它是单独一块硅芯片上的通用经典计算机。从那时起,设计任何 信息处理设备,都可以从一个微处理器着手,对它进行定制——即编程——来完成该设备需要的特定任务。今天,你家的洗衣机几乎都是由计算机控制的,它可以通过编程去进行天体物理计算或文字处理,只要有合适的输入-输出设备,以及足够的内存来存储必要的数据。

在这个意义上(也就是说,忽略速度、存储容量和输入-输出设备的问题),旧时代的人力“计算者”,老式蒸汽动力解析机与它的铃铛和哨子,第二次世界大战时房间那么大的真空管计算机,以及今天的超级计算机,都有着同样的计算功能,这是一个了不起的事实。

它们的另一个共同点是数字化 :以物理变量离散值的形式对信息进行操作,例如电子开关的开或者关,齿轮处在十个位置中的一个上面。另一种类型的计算机——“模拟”计算机(如计算尺)以连续物理变量的形式表示信息,它曾经十分通行,但现在已经几乎没人用了。这是因为现代化的数字计算机可以通过编程来模仿任何模拟计算机,并且在几乎所有应用方面都比它们更强。数字计算机向通用性跳转,把模拟计算机甩在了后面。这是不可避免的,因为不存在通用模拟计算机这样的东西。

之所以不存在通用模拟计算机,是因为需要纠错 :在漫长的计算中,诸如元件制造不完善、热胀冷缩、外界随机影响等因素导致的误差积累起来,会使模拟计算机偏离既定的计算路径。这听起来像是一个不重要或狭隘的理由,但事实完全相反。如果没有纠错,所有的信息处理乃至所有的知识创造都必定是有限的。纠错是无穷的开始。

例如,符号标记只有是数字化的才能够通用。试想一下,一些古代的牧羊人试图标记羊群的长度 而不是数量。每只山羊离开羊圈时,牧羊人就放出一段与这只羊长度相同的绳子。然后,等山羊回圈时,就卷起这个长度的绳子。卷回整段长度,就表示所有的山羊都回来了。但是在实践中,由于测量误差的积累,结果总是至少会长一点或短一点。不管以什么样的精度去测量,这个“模拟标记”系统能够可靠地标记的山羊数量总有一个最大值。用这些“标记”进行的所有算术计算也是如此。每当代表几个不同羊群的几段绳子加在一起时,或者把一根绳子切断以便记录羊群的拆分时,都会产生误差。人们可以对每个操作重复多次然后取中间值,以减小误差的影响。但比较长度或复制长度这些操作本身只能以有限的精度进行,因而不能使每一步的误差积累率低于这个精度的水平。这就使得连续操作有次数上限,超出该限度,结果对特定目标而言就没有用了——这就是为什么模拟计算永远不可能通用。

我们需要的是这样一个系统,它认为误差理所当然会出现,但一旦出现就进行纠正 ——最低的信息处理突现层次上的“问题不可避免,但可以解决”。但是在模拟计算中,纠错会遇到一个基本的逻辑问题:没有办法一眼区分错误值与正确值,因为模拟计算的特征正是任何值都有可能 是正确的。绳子的任何长度都可能是正确的长度。

局限于整数的计算就不同了。使用同样的绳子,我们可以用英寸整数倍的长度来表示整数。每操作一步,我们都把绳子剪短或加长到最接近的英寸数。例如,假设测量公差可以做到十分之一英寸,那么所有的错误都可以在每一步操作后被发现并排除,这样就排除了对连续步骤次数的限制。

因此,所有的通用计算机都是数字化的,它们全都用我上面所说的基本逻辑来纠错,虽然具体纠错方式千差万别。因此,对于齿轮所有可能朝向的角度构成的连续统,巴贝奇的计算机只赋予了它十个不同的含义。以这种方式使表述数字化,使轮齿能自动纠错:每一步过后,齿轮的朝向相对于十个理想位置的任何偏移,都会随着轮齿嵌合而修正到最近的那个理想位置上。对角度的整个连续统赋予含义,名义上能使每个齿轮表达更多(无限)的信息,但实际上,信息不能可靠地读取就等于没有存储。

幸运的是,信息必须数字化处理这个限制并不会减损数字计算机的通用性——也不会减损物理规律的通用性。假如用英寸的整数倍来衡量山羊数量不足以完成某个特定用途,可以用十分之一英寸的整数倍,或者十亿分之一英寸的整数倍。对其他所有用途也是一样:物理规律决定了,任何物理对象(包括任何其他计算机)的行为,都能由一台通用数字计算机以任何想要的精度进行模拟。这不过是一个用足够精细的离散变量网格来对连续变量进行近似的问题。

由于纠错必不可少,所有 向通用性的跳转都发生在数字化系统中。这就是为什么口头语言用一套有限的基础音来构词:如果用模拟方式,口语就没法理解了。不管人说什么,都没法重复,甚至没法记住。这样,通用书写系统没办法准确表达声调之类的模拟信息也就不重要了。根本就没有什么能够准确表达这种东西。出于同样的理由,发音本身只能表达有限的含义。例如,人类只能区别大约7种不同的音量,标准乐谱对这一点有大略的反映,用约7种不同的符号标记音量(例如p、mf、f等)。而且,出于同样的理由,说话者也只能用每种发音意指 有限的含义。

在各种不同的向通用性跳转事例之间,另一个引人注目的关联是,它们都发生在地球上。事实上,所有已知的这类跳转都是在人类主持下进行的——除了一次我尚未谈到的跳转,它是所有其他历史上出现过的跳转的基础,发生在生命进化早期。

如今的生物体里的基因,通过一条复杂而且非常曲折的化学路径来复制自身。在多数物种里,基因起到模板的作用,用来形成一种类似的分子RNA的片段。RNA随即充当程序,指导合成构成机体的化学物质,特别是作为催化剂 的酶。催化剂是某种建造者,它促使其他化学物质发生变化,而自身保持不变。这些催化剂进而控制所有化学物质的生产,调节机体功能,从而定义了生物体本身,关键是包括复制DNA的过程。这个错综复杂的机制是怎么进化来出的,在此并不重要,但为了说得明确一点儿,让我来大致描述一种可能性。

大约40亿年前,地球表面冷却到足以让液态水凝结之后不久,海洋被火山、陨石撞击、风暴和比今天强烈得多的潮汐(因为当时月亮比现在要近)搅动着,而且在化学上非常活跃,许多种类的分子不断地形成和转变,有些反应是自发的,有些是在催化剂作用下发生的。有一种这样的催化剂刚好催化产生了形成它自身所需的某些分子。这种催化剂不是活物,但它是生命的第一个迹象。

它还没有演化成一种有明确针对性的催化剂,因此也加快了其他一些化学物质的生产,包括自身的变种。那些与其他变种相比最擅长促进自身生产(并且抑制自身消亡)的分子变得越来越多。它们还促进了自身变种的建造,进化因此得以继续进行。

渐渐地,这些催化剂促进自身生产的功能变得足够强大和专门化,足以使它们被称为复制因子。进化产生了使自身更快速、可靠地复制的复制因子。

不同的复制因子开始结合成群体,群体里的每个成员都专门从事一套复杂化学反应中的一部分,净效应是形成整个群体的更多副本。这样一个群体就是一个原始的生命体。在这时,生命还处于一个与非通用印刷机或罗马数字有点相似的阶段:情况不再是每个复制因子各顾各,但也还没有出现经过定制和编程以生产特定物质的通用系统。

最成功的复制因子可能应该是RNA分子。它们有自己的催化性能,取决于组成它的分子(或碱基,与DNA的碱基类似)的精确序列。结果,复制过程变得越来越不像简单的催化,而更像编程——通过一种以碱基为字母表的语言或说遗传代码进行。

基因是一种复制因子,可以理解成遗传代码中的指令。基因组是由互相依赖对方进行复制的多个基因组成的群体。复制一个基因组的过程称为一个活的生物体。因此,遗传代码也是详细描述生物体的语言。在某个时候,系统切换到DNA构成的复制因子,它比RNA更稳定,因而更适合用来存储大量信息。

接下来发生的事,其熟悉程度可能掩盖了它的非凡与神秘。起初,遗传密码及其翻译机制与生物体内的其他东西共同进化。但在某个时候,虽然生物体还在继续进化,遗传密码却停止了进化。当时,这个系统只编码原始的单细胞生物,没有更复杂的东西。然而,此后直到今天,地球上所有的生物不仅都以DNA复制因子为基础,而且使用完全相同的碱基字母表,这些碱基组成三个碱基的“词语”,只在“词语”的含义上有微小区别。

这意味着,如果把遗传密码当作一种描述生物体的语言,它表现出了惊人的延伸。它进化出来只是为了描述没有神经系统、不能移动或施力、没有内脏和感官的生物,这类生物的全部生活内容就是合成自身的结构组分,然后一分为二。然而,同样一种语言在今天描述了导致无数多细胞行为的硬件和软件,这些行为包括奔跑、飞翔、呼吸、交配、识别掠食者和猎物,前面所说的生物体完全不具备与这些行为相似的东西。这种语言还描述了翅膀之类的工程结构、免疫系统之类的纳米技术,甚至还有一个能解释类星体、从零开始设计其他生物体、思考自身为什么存在的大脑。

在遗传密码的整个进化过程中,它表现出的延伸范围比这小得多。可能它的每个连续的变种都只用来描述几个彼此非常相似的物种。无论如何,遗传密码的一个新变种描述了一个能具象化新知识的物种,这种情况应该曾经频繁发生。但进化在遗传密码已经拥有广大延伸范围的时候停止了。为什么?它看起来像是向某种通用性的一次跳转,难道不是吗?

接下来发生的事,有着我在其他关于通用性的故事里描述过的同一种悲剧模式:在该系统实现通用性并停止进化之后远超十亿年的时间里,它仍然 只被用来制造细菌。这意味着,我们现在看到的这个系统的延伸范围被束之高阁的时间,比系统本身从非生命的前体进化而来所用的时间还要长。如果在这十亿年里有外星智慧生命访问地球,他们将看不到任何证据表明该遗传密码能描述什么与它起初诞生时所描述的生物体明显不同的东西。

延伸总有解释,但这一次,就我所知,这个解释是什么还不为人知。如果延伸跳转的理由是它是一次向通用性的跳转,那么这里的通用性是什么?这套遗传密码似乎并不能通用于描述生命形式 ,因为它依赖特定种类的化学物质,例如蛋白质。它有可能是某种通用建造者吗?有可能。它有时确实能用无机材料进行建造,例如骨骼里的磷酸钙,或者鸽子大脑内部导航系统里的磁铁。生物技术学家已经在用这套遗传密码制造氢,以及从海水中提取铀。它还能对生物体进行编程,使其在体外进行建造活动:鸟儿筑巢,河狸造水坝。也许有可能用遗传密码描述一种生物体,其生命周期的内容包括建造核动力宇宙飞船。也有可能不是这样。我猜想,它拥有某种程度较低而且人们还不了解的通用性。

1994年,计算机科学家和分子生物学家伦纳德·阿德勒曼设计并建造了一台由DNA和一些简单的酶组成的计算机,并展示了它能进行某些复杂计算。当时,阿德勒曼的DNA计算机有可能是世界上最快的计算机。而且,很清楚,可以用类似的方法来建造通用 经典计算机。于是我们知道,不管DNA系统的其他通用性何在,其计算通用性已经固有存在了几十亿年而完全没有被使用过——直到阿德勒曼使用它。

DNA作为建造者的神秘通用性,也许是史上第一种通用性。但是,在各种形式的通用性中,物理上最重要的是人的独特通用性,也就是说他们是通用解释者,这使他们同样也是通用建造者。这种通用性的效果,正如我所解释的,只能用完整的基础解释来阐明。它也是唯一能够超过越其狭隘起源的通用性:如果没有人无限地提供能源和维护,通用计算机不可能真的通用。对所有其他技术来说,情况也是这样,就算是地球上的生命也终将被毁灭,除非人类另有决定。只有人能依赖自身进入无限的未来。

术语

向通用性跳转—— 一种逐步改进系统的趋势,经过功能的急剧大幅扩张,在某些领域变得通用。

“无穷的开始”在本章的意义

——许多领域里都存在着通用性。

——向通用性跳转。

——计算中的纠错。

——人是通用解释者这一事实。

——生命的起源。

——遗传密码向其跳转的神秘通用性。

小结

所有的知识增长都是通过渐进的改进实现的,但在许多领域里有一个节点,知识或技术系统一项渐进的改进在此时会导致延伸范围突然扩大,使系统成为相关领域的一个通用系统。过去,实现了向通用性的这种跳转的发明家们基本上不是在主动追求通用性,但启蒙运动之后他们就开始这样做,通用解释因其本身和用途得到看重。因为纠错对有潜力拥有无限长度的过程至关重要,向通用性的跳转只能发生在数字化系统中。

* * *

[1] 英语中的“叛国罪”一词treason的发音接近于tree(树)和sun(太阳)连着念。——译注

第一时间更新《无穷的开始:世界进步的本源》最新章节。

相关阅读

蒲公英醇夏

布拉德伯里

生死之间

汤姆・克兰西

字母表谜案

大山诚一郎

衣更月一族

深木章子

猩红色的天空下

马克·苏利文

哲学的迷途

莫提默·艾德勒