计算机与网络简史:从算盘到社交媒体的故事
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第一章
穿越时空之旅

总有一天,女士们会带着她们的计算机在公园中散步,互相说着这样的话:“今天早上,我的小计算机告诉了我一件很有趣的事情。”

——艾伦·麦席森·图灵

第一批计算机进入人类的世界,其实走过了相当漫长的一段道路,尤其是在当今技术大爆炸的背景下。在这一章里,我将带你踏上一段时间之旅,回顾这段历史中几个里程碑式的节点,它们对科技的发展尤其是对计算机的发展有着举足轻重的意义。不过我得提醒你,这样的里程碑不胜枚举,呈现在你面前的并不是一部包罗万象的计算机前史,而更像是一个由重要发明和发现组成的有趣合集。

这段时间之旅始于公元前2700年苏美尔人的算盘,终于艾伦·麦席森·图灵的图灵机——其实它并不是真正的机器。在这段岁月里,许多早已家喻户晓或者至今仍默默无闻的人,把自己的整个人生都贡献给了这项事业,成就了计算机今天的辉煌,使它成为我们生活中不可或缺的一部分。

1.1 苏美尔人的算盘(公元前2700年—公元前2300年)

计算工具是什么时候出现在相对来说还很短暂的人类历史中的呢?是青铜时代,由美索不达米亚即两河流域(今天的伊拉克与叙利亚北部)那些以狩猎、耕种、捕鱼为生的人们创造出来的。他们在木板上刻出痕迹,用来记录羊群、粮食和鱼的数目。对于个人或者家庭来说,这种计算方法是非常有效的。但是随着新的民族群体的兴起,这些猎人、农夫、渔民必须为整个族群——首先是为他们的国王和王公大臣们承担计算的任务,这种方式就不再适合了。而这个时期,陶匠、铜匠、面包师、地毯织匠、织布匠、宝石匠之间的交易往来非常频繁,因此必须发明出更加有效的方法来计算更大的数额,比如百、千甚至更多。毕竟当时大城市的居住人口已经达到了50000—80000人,要管理这种数量级人口的各种事务,小木板上的几道划痕是远远不够的。

最古老的计算工具(更确切地说是算盘)便出自这个时代。科学家认为,这个计算辅助工具是在公元前2700年至公元前2300年由美索不达米亚的苏美尔人发明的。可惜发明者的名字并没有被记录下来,不过我们至少可以确定,从那个时代开始,人类历史上就不缺像楚泽、乔布斯、盖茨那样拥有天才想象力的先驱者,是他们推动着计算机的历史不断前进。不过,最初的算盘看起来与今天的算盘的各种形式和变种完全不同。

图1.1为我用来装饰书架的一把中国算盘。

图1.1 中国算盘

4000年前第一批达到批量生产水平的算盘,是由若干块木板或者陶板组成的。它们表面有许多长条,每一条对应着苏美尔人当时使用的六十进制计算体系中的一个数位,基数为60。这个数字,今天的我们仍旧能在“1分钟等于60秒”“1小时等于60分钟”中看到。计数的时候,会往横向或者纵向排列的对应长条里放上小石块或者芦苇秆,然后分别计算各条中小石块或者芦苇秆所代表的数目,全部加起来就得到了总数。

当时人们还会利用不同的石块来进行计算,凭借石块大小或形状上的区别来区分它们在六十进制计算体系中的数位,而借助于行或列进行的计算显然要可靠得多。

六十进制计算体系的一个简单例子如表1.1所列。

“abacus”这个词来自拉丁语abacus以及希腊语abax。前者差不多是“泥板”或者“木板”的意思;后者,人们猜测它属于闪米特语的词汇,比如希伯来语中的abaq,表示“尘土”。算盘的前身可能是“画板”,即用手指像笔一样在沙子或者土上画出痕迹。这样,几条平行的线条就能表示六十进制体系,再有足够的石块就行了。

1.2 密码棒(scytale)——第一个加密系统(公元前500年)

在信息学中,经常需要对数据进行加密处理,以此将其转换成一种对未获授权者不可读的形式。加密已经成为我们数字生活中不可缺少的一部分,哪怕是WhatsApp(一款智能移动设备上的即时通信软件)上的简单信息也是经过加密的,因此我们有必要去追溯一下加密的源头。

斯巴达人以高度军事化的生活而闻名,他们拥有当时全希腊训练得最为精良的军队。接下来我们要讲的故事,发生在公元前395年,波斯人密谋向斯巴达人发起一场出其不意的进攻。虽然斯巴达人早已在敌方安插间谍,以便适时地通风报信,但是如果派出的信使携带着一封谁都可以读的信,那么风险显然太大,一旦暴露,就会对斯巴达非常不利。好在当时的斯巴达人走在了时代的前列,他们并没有用明文来传递秘密消息。于是,我们所知的最早的加密系统——密码棒便诞生了。

斯巴达人将一条羊皮细带或者任何一种皮质细带螺旋状缠绕在一根木棍上,然后把秘密消息顺着木棍的方向写在皮带上,再把皮带拆下来,由信使送往收信人处。皮带上的信息乍看上去没有任何意义,因为原本连续的字母随着皮带绕圈解开被拆分,绕开的皮带上纵向相接的字母根本不属于同一个单词。比如说“DIEPERSERKOMMEN”(1),就可能绕在某一直径木棍上而显示成:

写成一行的话就是:

DPSKMIEEOEERRMN

如果这卷皮带落入了敌方之手,他们就只能发现一串按照无意义的顺序排列的字母。

收信人和写信人必须各自持有一根相同直径的木棍,收信人只要把皮带同样螺旋状地缠绕在自己的木棍上(密码棒),就能破解秘密信息了。木棍的直径也就成为整个过程的密钥。每当斯巴达的五督政官向外派遣一位将军,他们总是命人制作两根直径一模一样的木棍,一根保留在自己手中,另一根交给被派遣的将军。这样一来,发信人想要传递给收信人的秘密信息,甚至在自己的队伍里也无法被解读。

移位

用密码棒来加密的方式被称为移位。移位,即对一个文本的字符在顺序上做出改变,而文本中的所有字符都是被保留的。移位的方式是多种多样的,最简单的版本,就是调转文本或者词语的书写方向。比如有一种常见的移位过程,叫作花园栅栏:

DEESROMNIPREKME把这行字母写成上下两行:

D E E S R O M N

I P R E K M E

然后一上一下锯齿形地读,得到的文本就变成:DIEPERSERKOMMEN。

根据希腊历史学家普鲁塔克的记载,凭借密码棒,斯巴达人成功地阻止了波斯人的进攻。令人闻风丧胆的斯巴达将领吕山德就是通过这种加密方式得到了关于波斯人进攻的消息,才赢得了充分准备的机会,最终击退了波斯人。关于使用密码棒的历史记载不止这一条,我相信,这种加密方式在历史进程中使用之频繁,超过了那些已为人熟知的历史学家的记载。

密码棒在那个时代是相当安全的加密方式,几乎没有人可以破解这种加密信息。解读密码棒信息的关键就是一根相应直径的木棍。我们现在重新回到用密码棒加密的文本:

DPSKMIEEOEERRMN

这条信息有15个字母,我们也已经知道了它的加密手段(密码棒),但目前它们的排列顺序没有任何意义。现在我们把它分成两栏:

交替读取左右两栏,就得到了:

DOPESEKRMRIMENE

这样仍旧没有读出任何意义。现在我们把这串字母分成三栏:

再从左往右读这串字母,我们就解开了这段密文:DIEPERSERKOMMEN。不得不承认,这个例子非常简单。但是它能够很好地说明,其实破译密码棒加密信息的方法并不复杂。当然,前提是知晓这种加密过程的运作方式。

1.3 安提基特拉机械装置(约公元前100年)

1900年,潜水者在靠近希腊岛屿安提基特拉海岸线的海底发现了古罗马的沉船残骸。这艘船出自希腊化时代,船身长度超过50米,是最大的古代船只之一。沉船事件发生在公元前70年到公元前60年之间。对船上文物的发掘工作持续了一年多。船上运送的货物非同一般的珍贵,所以这艘船得到了一个名号——“古典时期的泰坦尼克”。

货物中有一团被腐蚀了的金属物,混合着木质箱盒的残片,一开始并没有引起人们的兴趣。1905年,慕尼黑古典语文学家阿尔伯特·雷姆仔细观察了其中的青铜部分,推测它可能是一种特殊的计算工具的一部分,不过当时他也没有从残片里解读出更多东西。

1950年,英国历史学家德瑞克·德·索拉·普莱斯更加深入地研究了全部82块残片。他用X射线和γ射线照射这些部件,使得上面的齿轮、铭文以及传动装置的残余都显现了出来。它们在今天看来并没有什么稀奇,但是考虑到这个机械装置的年代(公元前70年到公元前60年),就不失为一个惊人的发现了。这样一项出自古典时期的高精技术完全不为人所知,同时代也找不出可与之比较的其他物件。它利用齿轮装置来计算太阳系周期所达到的精密程度,直到中世纪晚期才再次出现。我们不禁要问,为什么人类直到中世纪才能重新达到这种技术水平?普莱斯在他的研究中提出了“古典时期的计算机”这样一个概念,并且使这个机械装置闻名全世界。渐渐地,借助一系列的新兴手段,比如计算机断层扫描、特殊摄像机以及用于计算机游戏的表面建模软件,这个机械装置的其他秘密被慢慢解开了。

它在功能上的配置着实令人震撼。虽然至今只完成了部分的复原,但我们已经可以确认,这个机械装置的用途是测定天文现象、季节与节日。它可以计算太阳、月亮及其他在当时已经为人所知的行星的位置,此外还包含标有科林斯月份名称的月亮历、带有日月刻度且标注着古埃及月份名称和巴比伦黄道带符号的太阳历,以及带有月份刻度的日月食周期表。借助这些,人们就可以确定太阳系的运转周期和其他天文现象。从这个装置上,我们看到了古希腊人和巴比伦人智慧的融合,也能对古人在数学与工程学上的成就略窥一斑。

尽管如此,古人发明这个装置的真实意图到今天我们还是不甚明了。科学家对此有许多猜测:它的使用者是水手或者天文学家;统治者有可能用它来预言天文现象,以此证明自己拥有超自然的能力;当时的富裕阶层将它用于消遣。而关于这个装置的发明者,同样找不到任何确凿的证据。围绕着安提基特拉机械装置,还存在许多疑问和未解之谜,一如既往地让人们充满好奇心,激发着人们的想象力,甚至提出阴谋论的也大有人在。如果你想深入了解这个话题,那么我向你推荐乔·马钱特的《解密天国》(2)。这本书虽然也没有找到最终的谜底,但是写得十分扣人心弦,读来让人受益良多。

可以说,在获得新的考古发现之前,安提基特拉岛的机器,这台2000多年前用一套复杂的齿轮装置计算太阳系周期的机器,就是人类最早的计算机。

1.4 关于加密分析的专题论文(850年前后)

在介绍密码棒的时候,我向你演示了怎样把一段用移位法加密的密文变得可读。这个过程被称为密码分析,它在今天的各种组织中都起到了重要的作用,比如政府借助密码分析,试图破译敌方传输的重要信息。软件工厂或者商业网站运营商也必须面对他人对其产品进行全面密码分析的问题。他们往往有意让黑客尝试突破自己产品或者网页的安全防御,借此找出自身的漏洞,密码员再通过加密来保障信息的安全。因而密码分析员在当今的数字世界中也就显得尤为重要。

所谓密码分析,即在缺乏密钥的情况下把一段密文转换成明文。早在公元850年,阿拉伯哲学家肯迪便对这个领域展开了深入的研究。肯迪是一个天赋极高的人,身兼多个头衔,包括哲学家、科学家、数学家、医生、音乐家、作家。他撰写了第一篇关于密码分析的专题论文。在这部篇名为《论解译加密信息》的手稿中,他详细描述了如何破解单字母表替换密码,而这在当时的欧洲是被认为无法破译的。

单字母表替换

你已经了解了移位的加密方式,也就是只对字母的顺序进行调换。而单字母表替换则是把明文中的字母或符号替换成其他字母或符号,比如恺撒加密法就是这类替换中的一种常见方式。简易替换加密,是指把明文中的单个字母按照一张密文字母表一一替换。

如表1.2所列,上一行包含明文,下一行则是密文字母表。

按照这个加密方式,明文COMPUTERGESCHICHTE(3)被加密成了KCNMDRHSEHAKTVKTRH。只要你用第一行中的字母去替换对应的第二行中的密文字母,就能重新获得明文。恺撒加密法的原理同简易替换加密是相似的,只是加密时用的是一种推移过的字母表。

如表1.3所列,上一行包含明文,下一行则是在恺撒加密法中使用的推移过的字母表。

COMPUTERGESCHICHTE通过恺撒加密法被加密成了FRPSXWHUJHVFKLFKWH。

频率分析

我们再看肯迪的工作,他在自己的手稿中展示了如何借助频率分析这种统计学手段来破译单字母表替换。首先,成功破译的前提是懂得这门语言并且手头握有大量文本。加密的文本越充足,破译信息的可能性就越大。接下来计算密文中单个字母的数量,并记录各字母的出现频率。在这里起关键作用的,便是各个字母在总数中所占的百分比。比如在德语中,字母E是最经常使用的。如果在加密的消息中使用最多的是字母X,那么就可以推测,X在密文中充当了E。这里我制作的单字母表替换的例子如下:

Nju PofOpuf, efn ejhjubmfo Opujacmpdl wpo Njdsptpgu, cfsfjufo Tjf efn Jogpsnbujpotdibpt bvt Tdivmf, Tuvejvn, Bscfju pefs Ipccz fjo Foef.

PofOpuf fsmbvcu Jiofo Ufyuf, Cjmefs, Afjdiovohfo pefs iboetdisjgumjdif Opujafo boavmfhfo voe ücfstjdiumjdi av pshbojtjfsfo.

这段文字看起来没有任何意义,我们只知道这是一段德语。现在我们使用频率分析来破译这段文字。首先我得到了以下统计结果:

字母f在这里被使用了32次,字母o为25次,字母j为22次,诸如此类。考虑到德语中使用最频繁的是字母e,我们就可以把这一段文字中的f替换成e:

... ..e...e, .e. .......e. .......... ... ........., .e.e..e. ..e .e.

............... ... .....e, ......., ...e.. ..e. ..... e.. E..e.

..e...e e...... ...e. .e..e, .....e., .e.......e. ..e. .............e

.....e. .....e.e. ... ..e........... .. ........e.e..

我们可以重复这种方法,用德语中使用频率第二高的字母来替换密文中使用频率第二高的字母。在这个例子中,用字母n替换字母o:

... .neN..e, .e. .......en N......... ..n ........., .e.e..en ..e .e.

.n........n...... ... .....e, ......., ...e.. ..e. ..... e.n En.e.

.neN..e e...... ..nen .e..e, .....e., .e...n.n..en ..e. ..n............e

N....en .n...e.en .n. ..e.......... .. ....n...e.en.

现在继续进行,密文中的字母j和p分别用德语字母表中出现频率第三高和第四高的字母i和o替代:

.i. OneNo.e, .e. .i.i...enNo.i...o.. .on .i..o.o.., .e.ei.en .ie .e.

In.o....ion....o. ... .....e, ....i.., ...ei. o.e. .o... einEn.e.

OneNo.ee...... I.nen .e..e, .i...e., .ei..n.n..eno.e. ..n.....i....i..e

No.i.en .n...e.en .n. ..e..i....i.. .. o...ni.ie.en.

如此一来,我们已经可以猜测出若干词语了,剩下的字母不依赖频率分析也可以推断出来。

接下来我凭借频率分析用字母t和r来替换密文中的u和s:

.it OneNote, .e. .i.it..en Noti...o.. .on .i.ro.o.t, .ereiten .ie .e.

In.or..tion....o. ... .....e, .t..i.., .r.eit o.er .o... ein En.e.

OneNote er....t I.nen Te.te, .i...er, .ei..n.n..en o.er .n....ri.t.i..e

Noti.en .n...e.en .n. ..er.i..t.i.. .. or..ni.ieren.

如果频率分析无法进行,我们还可以像玩纵横填字游戏一样猜测词语。比如看到字母组合“o.er”,不妨猜测这个词是“oder”(4)。在我的例子中,就可以用d去替换e。此外还有字母组合“En.e”,补充完整应该是“Ende”(5)。“.it”可以猜成“mit”(6),我们就可以用m去替换n。中间含有一个e的词往往是“der”“den”“dem”(7),而首字母为e的三个字母的词很有可能是“ein”(8)。如果你试着这么做并且把步骤记录下来,很快就能找到答案。那么我们的下一步,是用d替换e,用m替换n:

Mit OneNote, dem di.it..en Noti...o.. .on Mi.ro.o.t, .ereiten .ie dem

In.orm.tion....o. ... .....e, .t.di.m, .r.eit oder .o... ein Ende.

OneNote er....t I.nen Te.te, .i..der, .ei..n.n..en oder ..nd...ri.t.i..e

Noti.en .n...e.en .nd ..er.i..t.i.. .. or..ni.ieren.

我相信,到了这个时候,解码剩下的密文对你来说已经丝毫没有难度了。答案是:

Mit OneNote, dem digitalen Notizblock von Microsoft, bereiten Sie dem Informationschaos aus Schule, Studium, Arbeit oder Hobby ein Ende.

OneNote erlaubt Ihnen Texte, Bilder, Zeichnungen oder handschriftliche Notizen anzulegen und übersichtlich zu organisieren.(9)

1.5 密码盘(1470年)

由意大利建筑师莱昂·巴蒂斯塔·阿尔伯蒂在15世纪发明的密码盘,可以算作第一个用来加密和解密的器具。阿尔伯蒂于15世纪公布的第一个密码盘如图1.2所示,它由内、外两个环组成。固定的外环带有20个按顺序排布的大写拉丁字母以及4个数字(1、2、3、4);可转动的内环上写着打乱顺序的小写字母,其中包括几个在外环中没有出现的字母。由于外环只有20个字母,不包含H、J、K、U、W、Y,所以它们将由其他现存的字母替代。

图1.2 阿尔伯蒂盘

用这种盘来加密明文时,小写字母作为密文字母表,而大写字母用作控制符,表示这个盘必须根据要求重新设置。习惯上,人们会用小写字母a去对准给出的各个大写字母,每次得到一张新的密文字母表。用这种方式,单字母表的替换变成了多字母表的替换,就不能够再使用频率分析推导明文,因为每一个密文字母表都需要一个密钥,这些密钥必须被记住,也可以用密码盘的形式保存在身边。

不得不承认,在今天这个时代,如果手中握有密码盘并且知道它的操作方式,那么这种用大写字母来做标记的方法就显得不那么高明了,只要把内环上打乱顺序的字母放到正确的位置上,也就是把字母a对应到各个相应的大写字母上,问题就迎刃而解。不过,即便密码盘在本质上是一个非常简单的加密工具,它在诞生之后也被频繁地使用了5个世纪之久。

随着时间的推移,新的密码盘不断出现,并且得到了广泛的应用。比如1861—1865年美国南北战争时期,就有使用密码盘的记录。

除了圆盘,1850年还出现了滑尺,确切地说,叫圣西尔滑尺,如图1.3所示。圣西尔是它的诞生地——法国知名军校。所谓滑尺,就是一条硬板纸带,上面依次印有26个字母,字母下方有一个宽度相同的开口,通过这个开口可以从左往右拉动纸条。纸条上依次写有两遍完整的字母表,字母间隔距离和滑尺上的一样。如此一来,拉动纸条就可以像使用密码盘那样来加密或者解密。因为纸条的长度问题,圣西尔滑尺携带起来略显不便,但是它在读取的时候要比密码盘容易很多。

图1.3 密码盘的一种常用变体:圣西尔滑尺

1.6 “计算机”一词的诞生(1613年)

“计算机”这个概念源于拉丁语动词“computare”,大意为“合计”。随后产生了英语动词“tocompute”,从中派生出了“computer”这个词。如今我们会把这个词和一台处理数据的机器联系在一起。

很少有人知道,在英语中,“computer”在过去是指一种从事辅助工作的职业名称,即在数学家或者其他机构的委托下从事重复的计算工作。比如在1892年5月2日的《纽约时报》里可以找到这样一条招聘启事:诚招一位计算员(computer),须具备代数、几何、三角函数、天文学知识。

曾有一位擅写讽刺文章和幽默小说的英国作家理查德·布拉斯维特,在他1613年的手稿《年轻男人的拾遗集》(The Yong Mans Gleanings)中使用了“computer”这个词,这是人类历史上的第一次。下面的选段大约是在描述一个精通数学的人:

你是什么(人啊)?你的开端在哪里?你是由什么物质构成的?就是你承诺给自己或者你的子孙后代的时日长度。我了解过所有时代最精通计算的人(computer)和有史以来最好的算术家,他把你的所有日子缩减为一个简短的数字:人的日子是三个六十和一个十。(10)

1.7 对数表和对数计算尺(1614—1621年)

在我成长的年代里,便携式计算机已经出现了,但是我仍然记得,我最喜欢的数学老师每次讲起计算尺和对数表,都会陷入一种怀旧的情绪中。那个时候的我们并不能理解他,总是嫌他啰唆。但如果你是在1950年前出生的,或许就和这些东西打过交道了。因为在那个时代,计算尺或者计算盘,是数学课上、职业教育中,乃至大学里、工作中必不可少的日常计算工具。

它们的起源要追溯到1614年。这一年,约翰·纳皮尔在他名为《奇妙对数规律的说明》(11)的著作中公布了一张自然对数表。约翰·纳皮尔出生在富裕的苏格兰地主莫契斯东男爵家庭,他对数学抱有极大的热情,在这项工作上花费了20年的时间。在他的著作里,能找到30页的说明和90页由他本人计算的对数表。同时我们还要提到一位瑞士天文学家约斯特·比尔吉,早在1603—1611年间,他就在编制类似的对数表,但是直到1620年才决定用德语把它发表出来。

要能够有效地应用对数的规律,还需要一个合适的底数。数学教授亨利·布里格斯意识到了这一点,并且向约翰·纳皮尔提出了几点改进建议。他们商定,使1的对数为0,10的对数为1,这样就得到了以10为底的常用对数。为了向布里格斯致敬,常用对数在1624年被命名为布里格斯对数。

什么是对数表?为什么它有用?

对数表就是以表格的形式展示对数的尾数,一般长达几页。尾数就是一个浮点数中幂数之前的数位(比如在1.234 32 × 103中,1.234 32就是尾数)。发明对数的目的,就在于把复杂的计算转化为简单的计算,比如把乘法转化为加法。

许多计算,比如复杂的开方运算,当时必须借助这样的对数表来完成。在接下来的350年里,直到20世纪70年代,对数表一直在理工科领域以及中小学的数学课堂上发挥着作用。对于测绘工作者、天文学家以及海员来说,对数表也是不可缺少的工具。图1.4所示为1957年出版的书中的5位对数表。

对数概念为机械对数计算尺的发明奠定了基础。布里格斯教授的好友,英国神学家兼数学家埃德蒙·甘特,在1620年产生了把对数表放进直尺的刻度里的构想。关于对数,埃德蒙·甘特之前就做过深入的研究,并且自己撰写了一部关于对数表用于计算正弦和正切的著作《三角学规则》。他发明了第一把对数刻度尺,即甘特刻度尺。

图1.4 1957年出版的书中的5位对数表

这是一把黄杨木的直尺,大约60厘米长,5厘米宽,正面和反面分别标有对数刻度和十进制刻度。根据甘特的设计,使用刻度尺的同时需要用到一个分规(见图1.5),这让使用过程颇为烦琐费时。

为了免去使用分规的麻烦,一位热衷数学研究的英国神父威廉·奥特雷德在1632年想出了一个解决办法——将两把相同的对数刻度尺并置滑动,这样就可以顺利地进行乘法、除法计算,而不需要使用分规。直到今天,关于对数计算尺发明者的争论还在继续,不过大多数专家倾向于奥特雷德才是计算尺的真正发明者这一观点。

图1.5 第一把对数计算尺必须配合分规使用

把两条可滑动刻度尺并置的创造性做法,在接下来的时间里一直被沿用,当然也得到了不断发展(见图1.6),复杂的乘除法运算简化成了加减法运算,并且不用计算,只需测量。

图1.6 我的旧计算尺

在对数计算尺发明出来之后,对数表仍在继续使用,用于计算尺的准确度无法满足的计算。但是第一台袖珍计算器的引入,突如其来地终结了对数表和计算尺的历史,这让饱受折磨的中小学生们感到如释重负。

1.8 第一台计算器(1623年)

长久以来,人们都认为是布莱兹·帕斯卡为了帮助身为税务官员的父亲减轻工作负担,在1640年发明了第一台带有齿轮的机械计算器。这台加法计算器以帕斯卡林之名广为人知,如图1.7所示。不过,用它做减法,需要使用补码,因为那些调节齿轮是不可以回拨的。

图1.7 布莱兹·帕斯卡发明的帕斯卡林

直到1955年,人们在威廉·契克卡德教授写给好友开普勒的信中, 发现了关于计算钟的描述。契克卡德是天文学家、测绘工作者、数学家,在图宾根大学教授天文学和希伯来语。他在机械方面有着极高的天赋,亲手制作了自己的大部分仪器。他于1623年发明的这台计算钟能完成加法和减法计算,并且在计算结果溢出的时候会敲响铃声以示提醒。对于更复杂的乘除法计算,则必须借助纳皮尔计算筹。

契克卡德自己保留了一台这样的机器,并把另一台寄给了他的好友,著名的天文学家约翰内斯·开普勒。遗憾的是,这种机器没有样品流传于世。1960年,图宾根大学的哲学教授布鲁诺·冯·弗雷塔格-洛林霍夫制造出了一台计算钟的复制模型(见图1.8)。

第一台可以用来完成四种基本运算且不需要借助其他辅助工具的计算器,是在1671年由戈特弗里德·威廉·莱布尼茨发明的。它被称为四则运算阶梯轴计算器(见图1.9)。

图1.8 契克卡德计算钟看起来是这个样子的

图1.9 一台仿制的莱布尼茨四则运算阶梯轴计算器

1.9 二进制系统(1703年)

戈特弗里德·威廉·莱布尼茨在制造他的机械计算器的时候,设定的是十进制系统。由于当时的机械构造十分容易出现错误,他便开始致力于研究另一种数字系统——二进制系统,因为它明显大幅削减了用于表达的数字个数。这种以2为基数的二进制系统,只使用0和1两个数字,使计算器能够在求取答案的机械操作中减少切换开关的次数。

只需要两种状态,分别用0和1来实现,就可以表示“来”或“去”或者说计算机里的“开”或“关”等状态。图1.10 展示了开关位置与它所表示的二进制和十进制值。

图1.10 二进制值0—15

或许出于精密机械方面的技术欠缺,莱布尼茨最终在他的计算器里使用了十进制系统。尽管如此,他在1703年发表的关于二进制及十进制的文章《二进制算法说明》,为300年后建立以二进制为基础的计算机世界奠定了坚实的基础。

莱布尼茨虽然不是二进制的发明者,但是他研究出了利用这个系统进行加减乘除计算的规律。这个系统的发明者则被认为是西班牙神职人员胡安·卡拉木埃尔-洛布科维奇,他在1670年出版的著作《双头数学,旧与新》中把二进制系统介绍给了整个欧洲。

不过,有新发现表明,二进制系统或许最初在1050年起源于中国。

1.10 第一个即时通信手段——可视化远距离通信(1791年)

用WhatsApp等即时通信软件来交换信息,已经是我们生活中司空见惯的交流方式了。发一条消息给地球另一端的爱人,都用不了一秒钟的时间。人类克服空间距离交流沟通障碍的历史,可以追溯到公元前500年:古希腊人用依次点燃山顶柴堆的方法传递特洛伊被攻克的消息。这条火焰信号链从特洛伊绵延到迈锡尼,长达500千米!另一个例子是在公元前200年到公元前120年之间,传递信息的工具变成了火炬,即用不同数量的火炬来挨个传递字母。火作为视觉上的信息交流手段,尤其是在战争中,被使用了相当长的时间,一直持续到18世纪晚期。

1608年,望远镜的问世使得人们能够用肉眼辨认远距离的事物。伦敦的罗伯特·胡克在1684年尝试把字母写在一块板上,借助绳索滑动装置把它架设在桅杆上,远处的接收人就可以用望远镜辨认传递的信息。当然这种形式的可视化远距离通信手段并没有得到广泛应用。

图1.11 模拟夏普信号塔的使用方法

图1.12 用夏普信号塔来表示“computer”这个单词

直到1791年,法国神职人员兼工程师克劳德·夏普与他的兄弟们合作发明了被称为“速写器”的装置[后来更名为Telegraf,即Telegram(电报)一词的前身],并在法国国民议会上将它公之于众。他把可旋转的信号臂架设在一根5米高的桅杆上,信号臂两端各安装有一根可转动的横木,承载装置的高塔设置在间隔9—12千米的视线良好的高岗上。不过这显然意味着,可视化远距离通信非常依赖好的天气和光照条件。1794年,在巴黎和里尔之间开辟了第一条传递线路,270千米的距离中共设置了22个信号站,一条信息可以在2分钟内完成两地之间的传递。

信息臂和两端横木的不同位置,代表了不同的字符。根据横木的位置变化可以区别出196个符号。也就是说,夏普相当于发明了一张自己的字符表。

人们除了用它来传送明文信息,也可以借助密码手册传送加密信息。信号发送人将手册中相应的页面和行列信息传递出去,只有手握相同手册的人才能够解读信息。

1.11 穿孔卡片系统(1805年)

穿孔卡片系统长久以来被用作数据采集、储存和交付的信息载体,是数据处理技术发展的重要组成部分。直到引入磁性介质存储手段,比如磁带或者磁盘,作为存储工具的穿孔卡片才被彻底取代。

历史上对穿孔卡片的首次应用是在1805年:法国发明家约瑟夫·玛丽·雅卡尔用一台可用穿孔卡片预先设定织纹的织布机(雅卡尔织布机,见图1.13)宣布了一次工业技术革命的到来。他把织布机的凸轮辊筒替换成了穿孔卡片,这样就可以织造出任意长度、任意复杂程度的图案。穿孔卡片上储存了待织图案的信息,也就是说,孔洞的有无决定了经线的抬起和降落。在这个意义上,织布机就成了第一架“可编程”的机器,并且它的控制装置是可以更新的,只需更换一张带有新图案的穿孔卡片就可以了。

他的系统促成了很多新的变革。这个发明无疑是自动化进程中的一块里程碑。而雅卡尔在当时也受到了来自行会的强烈抵制,因为他们感受到了手工行业因进步的自动化技术而带来的巨大威胁。看来在某种程度上,如今工业4.0的历史进程,也在部分重复着过去的道路。尽管遇到极大的阻力,7年之后,法国全境雅卡尔织布机的数量还是达到了大约18000台。

图1.13 雅卡尔织布机是第一架“可编程”的机器

1.12 差分机——机械计算机(1837年)

早在17、18世纪,就已经存在类似帕斯卡林、契克卡德计算钟这样的机械装置,这些机器往往是单件,并且只能完成加法计算或者最多是四则运算。要计算复杂的函数,人们仍旧依赖各种数据表(比如对数表)。由于这些数据表都是手工编制的,差错在所难免。而这些差错导致的运算错误,在制图设计、利息计算、船舶导航方面就可能导致严重后果。

英国人查尔斯·巴贝奇意识到了这些数据表中的错误可能带来的严重问题,意图发明一种机器,可以精确无误地计算出这些数据表中的数据,即所谓的差分机。它包含一个加法器和一个打印部件,可以同时完成数据表的计算和打印。这样的构想,一位名叫约翰·赫尔弗里奇·米勒的黑森州官员,同时也是建筑师与计算机的先驱,早在1784年就提出过。不过巴贝奇制造出了第一台机器实物(缺少打印部件,见图1.14)作为用于展示的原型机。但后续的机器只是停留在了草案设计阶段,巴贝奇始终没有成功制造出一台完整的差分机。他的失败,一部分缘于政府资助的中断,一部分则缘于他的首席机械师。总之这个项目在1842年终止了。

但巴贝奇的努力并没有完全白费,瑞典工程师爱德华·舒茨在英国杂志上读到关于巴贝奇研究的文章,受到启发,于1843年成功制造出了一台带有打印部件的差分机。在政府的支持下,爱德华·舒茨和他的父亲乔治·舒茨在之后又制造了一台经过改进的差分机,于1855年送往巴黎展出。此后,差分机经历了一系列的演进,直到1950年在亚历山大·约翰·汤普森那里发展到了最后一个阶段。他把四个差分机固定在一个木架上,让它们互相连接,成为一台全新的机器,用于计算自己的20位对数表。

图1.14 巴贝奇的差分机(复制品)

随着时间的推移,各种各样的差分机纷纷问世,但它们的基本原理并没有改变。在计算过程中,不同的差分机只是在加法器的个数和所处理的十进制数字的位数上有所区别。

用差分机进行对数、三角函数以及其他函数的计算,只能得到近似的答案,所以计算过程与多项式求值非常相似,其结果也会包含误差。因为误差必须维持在一个预先设定的范围内,所以差分机不适合业余者使用,操作它们必须具有深厚的数学知识。

第一批计算机出现之后,差分机(包括对数表)就失去了它们的价值。

1.13 信息2.0——电报(1832—1837年)

电报的发展历史并不是单线的,在欧洲、美国和印度,诸多走在时代前列的发明家独立地研究着各种用电来传送信息的方式。可以说,各个大陆都有自己的电报发明史。

西班牙医生和发明家弗朗西斯科·萨尔瓦-卡皮诺便是诸多先驱中的一位。1795年,他第一次向巴塞罗那科学院介绍了自己关于电报的尝试。1804年,他制造了一台电解质电报机。这台机器上连接有26根尾端有小玻璃管的导线,通过电流对管中的液体做电分解来传递信号。

德国解剖学家、人类学家、古生物学家、发明家塞缪尔·冯·索默林在1809年制造了相似的仪器——一台电化学电报机。它通过气体释放(制造气泡)来显示25个字母和10个数字。简单来说,就是在发送方和接收方各设置35个接触点,然后通过闭合发送器的电流回路对水进行电解,接收方相应的接触点处就会产生气泡(见图1.15)。不过这台仪器从来没有在实际中应用过。

图1.15 索默林的电报机

1832年,威廉·爱德华·韦伯和卡尔·弗里德里希·高斯在哥廷根合作设计了一台电磁电报机。他们在城市上空架设了两根铜线,把一条电报从物理研究所传送到了天文台。据说,这第一条电报的成功传送被称作“米歇尔曼来了”(米歇尔曼是研究所的勤杂工)。

1837年,查理·惠斯顿和威廉·佛勒吉·库克发明出了针式电报机。保尔·路德维西·席林·冯·康斯塔特和格奥尔格·威廉·蒙克虽然在两年前完成了相关的前期工作,但并没有使自己的电报机在实际生活中发挥作用。惠斯顿和库克建造了第一条信号线路,用于伦敦与西德雷顿之间长达21千米的大西部铁路线的通信。

那个年代,所有的电报机都有一个共同的缺点:传输都不是以书面形式实现的。与哥廷根的韦伯和高斯有往来的卡尔·奥古斯特·冯·斯坦海尔发明了一台印字电报机。1837年,他在慕尼黑铺设了一条5千米的线路,成功地演示了这台仪器的运作过程。但这台电报机最终并没有投入实际应用。一年之后,斯坦海尔又开始尝试把铁路轨道用作电报线路的输出导线和回路。虽然这次尝试并没有成功,但他从实践中获得了相当重要的知识,即大地可充当电报线路的回路。这样就可以将铺设电报线路所需要的物质耗费缩减一半,为全球范围内引入电报机进一步铺平道路。

最终,塞缪尔·摩尔斯在全球电信通信领域掀起了一场变革。他在1837年提出了电磁记录电报机的构想。当时使用的电码仍旧包含10个十进制数字,然后借助表格转化为字母。更确切地说,十进制数字被表示为纸张上的锯齿状波纹,这些锯齿表示不同的数字,可以凭借一本电码词典“翻译”成字母。

摩尔斯及其助手不断改进着电报机,终于发明了一种以摩尔斯的名字命名的电码——摩尔斯电码。人们传送的不再是神秘的数字代码,而是三个信号组成的数据:短、长和停顿。1844年,巴尔的摩和华盛顿之间建造起了一条60千米长的线路;1850年,开始铺设第一批海上线路;到了1870年,世界上很大一部分地区已经通过电缆连接了起来。

动手试一试

最为人熟知的一条摩尔斯电码就是呼救信号SOS,三短三长三短,或者读出来:滴滴滴,哒——哒——哒——,滴滴滴。摩尔斯电码是通过电磁脉冲传递的,脉冲的长短有所区别。长脉冲由横杠表示,短脉冲由点表示。每两次脉冲之间有一个特定长度的停顿。一个点的长度是一个时间单位,一条横杠的长度则是三个时间单位,两个符号之间的停顿也是三个时间单位。这个固定的时间单位是预先设定的。摩尔斯电码在今天仍旧发挥着作用,比如在名为“你好,摩尔斯”的项目中,它被用来帮助严重残障人士实现无障碍的联络交流。

在图1.16的帮助下,你一定可以译出以下这条摩尔斯电码。这里的“/”只是用来断开单词,不属于电码部分。

–•– •••–• / •–•• ––•• –• / –•– • ••–•• / –••••–••••– –– •–•

图1.16 摩尔斯电码表示的字母和数字

1.14 分析引擎和第一个计算机程序(1833年)

通过前文,你已经认识了查尔斯·巴贝奇,即差分机的精神之父。其实他从1833年起就开始了另一种机器——分析机(分析引擎)的研究,由此奠定了他计算机先驱的声名。这种机器与现代的计算机已经有了不少相似之处:加减乘除运算可以在任意顺序中执行;存储装置(被巴贝奇称作仓库“store”)和运算装置(被巴贝奇称作工厂“mill”)是两个独立的组成部分,类似于现代计算机的内存和处理器。

这台机器可以借助穿孔卡片来编程,就像法国发明家约瑟夫·玛丽·雅卡尔用穿孔卡片控制织布机一样。巴贝奇在他的构想中也考虑到了条件分支,这样根据一次计算中间结果的不同就会走出不同的路径。它的存储装置可以储存100—1000个50位的十进制数,相当于今天的1.6—20千字节。

这台机器由蒸汽机驱动,含有55000个部件。所有部件装配完成的话,应为19米长、3米高。从我的表达上你或许已经意识到了这种机器从来没有被真正制造出来,尽管巴贝奇从1834年到他去世的1871年间不断改进着他的设计构想。也就是说,由于在研发差分机上的失利,巴贝奇没有执着于把这个构想转化为实物。但后世的研究表明,分析引擎的构想是成立的。而与其原理类似的计算机则要到100年之后才被发明出来。

图1.17 分析引擎的模拟程序

第一位程序员

与巴贝奇的分析引擎紧密相关的,有一位名为阿达·洛芙莱斯的女性,原名奥古斯塔·阿达·拜伦,她便是世界上第一位程序员。少年时期的阿达就对机械怀有极大的热情。17岁的时候,她在一次聚会上结识了当时还在研究差分机的巴贝奇,由此开始了与他多年的密切交流。在巴贝奇的建议下,阿达把关于其分析引擎的法语文章翻译成了英语,并且在文中添加了许多细节性批注。她同时也意识到,这种机器在制作数据表之外还可以用来解决很多其他问题。在她补充的注解中,最著名的一条被称为注解G。在这条注解中,她用图表方式描述了计算伯努利数的运算步骤(见图1.18)。这可以被看成使用形式语言进行程序编写,由此赋予了她“历史上第一位程序员”的称号。

然而某些计算机学家和历史学家认为,她不能算作世界上首位程序员,因为她的所谓程序其实并不包含编程的重要元素,比如分支和子函数。而在巴贝奇的个人记录中,已经找到了最早的关于机器程序的笔记。1979年,美国国防部用Ada这个名字命名了一种新的编程语言。

图1.18 阿达·洛芙莱斯编制的用来计算伯努利数的表格

1.15 第一台传真机(1843年)

1979年德国联邦邮政引入传真服务的时候,我刚好5岁。但谁要是认为传真机是20世纪的技术,那他就大错特错了。传真技术甚至在摩尔斯电码之前就问世了!1843年,苏格兰钟表匠亚历山大·贝恩为他的复写电报机申报了专利。借助这个仪器,图纸或者手稿就可以通过电流以黑白的形式传送。我们可以这样说,他发明了世界上第一台传真机。几年之后,1847年,弗雷德里克·科利尔·贝克维尔改进了这台仪器,他把有待传送的画面绷紧在旋转的滚筒上,由一根金属针逐块扫描;这根金属针与一个电探测头相触,就把相应的双向脉冲发送到了接收器;接收器也通过相似的方式完成记录过程。

1865年首次出现了商用传真服务,实现了巴黎与里昂之间的远程复印,即传真(见图1.19)。不过这里使用的传真电报机,是意大利物理学家乔瓦尼·卡塞利的专利。他的机器建立在电化学过程的基础上,图像信息是一行一行通过电报线路传送的。

后续的一个重要贡献是德国物理学家亚瑟·科尔在1902年发明的图像电报,借助这个机器就可以通过电话线传送图像。这种形式的传送自1908年起被警察局用于发布通缉照片,后来广泛应用于报纸编辑。

图1.19 第一台商用传真电报机(pantelegraph)

1.16 布尔代数(1854年)

布尔运算符“AND”“OR”“NOT”,是如今计算机编程和数据库查询中不可缺少的运算符号。少了它们,人们甚至无法用谷歌完成一次简单的检索。可以说,布尔运算符或者说整个布尔算法为计算机奠定了基础。简单来说,布尔逻辑就是把数学语言的结构转化成自然语言。当然,也可能需要把一些简单的命题组合起来。许多程序语言在今天仍然使用一种布尔值的数据类型,它经常被直接称为布尔(Bool)类型,可以赋予真值(true)或者假值(false)。在二进制运算系统中也会使用布尔逻辑。

在信息学的理论基础上,我们可以凭借布尔代数来检验陈述的逻辑、计算开关电路,以及更好地理解集合论。

英国数学家乔治·布尔被称作布尔代数之父,他在1847年发表了逻辑学著作《逻辑的数学分析》,后又在1854年发表了他最重要的著作《思维规律研究》。他的个人经历说来也尤其令人印象深刻,因为他完成小学学业之后就再没有接受过其他教育。他的父亲是鞋匠,母亲则是一名管家。他的父亲十分爱好数学,经常给儿子布尔上课。布尔对语言也特别感兴趣,自学了希腊语、法语、德语。他14岁的时候翻译了古希腊诗人麦莱阿格罗斯的一首作品,却被指责为剽窃,因为没有人相信,一个14岁的孩子有能力完成这样深刻透彻的翻译。在他的父亲停止经营自己的作坊之后,布尔不得不为全家人的生计而奔忙,16岁便开始担任一份助理教师的工作。19岁时,他开设了自己的学校,并且在图书馆钻研各种伟大数学家的著作。凭借在数学研究上取得的成果,从来没有读过大学的他在1848年被任命为数学教授。遗憾的是,布尔在49岁时因为感冒高烧而英年早逝。

布尔所做的研究当然后继有人,英国和德国逻辑学家们不断改进发展着他的理论。不过这些研究在前期一直处于默默无闻的状态,直到1936年,就读于麻省理工学院电气工程专业的克劳德·香农,未来的美国数学家和电气工程学家,才在他的硕士毕业论文《对继电器和开关电路中的符号分析》(A Symbolic Analysis of Relay and Switching Circuits)中,把布尔代数用于数字电路的设计。

这项研究是对布尔代数发展的重大突破。

1.17 第一封垃圾电子邮件(1864年)

在日常生活中,我们每天都暴露在大量不受欢迎的垃圾邮件中。好在这些邮件大多会被过滤至垃圾邮件存放处。想象一下,如果垃圾邮件产生于19世纪,你会不会感到十分惊讶?第一封为人所知的垃圾邮件是在1864年通过电报发送的。一个信使向英国政客们送交了一份电报。政客们拿到这条可能有关国家大事的消息,或许还抱着十分慎重的态度开始阅读,结果却发现这只是加布里埃尔先生牙医诊所发来的关于接待时间的通知:

加布里埃尔先生,牙科医生,卡文迪什广场哈雷街27号。10月之前,加布里埃尔先生在哈雷街27号的专业问诊时间为10点到17点。

其中一位收信人对这条不受欢迎的广告消息感到十分愤怒,甚至还给《泰晤士报》的编辑写了一封投诉信,并被刊登了出来。

1.18 第一次用穿孔卡片进行人口普查(1890年)

我在1.11节已经提到了1805年发明的穿孔卡片,法国发明家约瑟夫·玛丽·雅卡尔用它驱动一台可编程的织布机。不过,这个设计原理真正进入实际应用的正轨,应该从美国企业家工程师赫尔曼·霍尔瑞斯把它用于数据处理算起,所以他被认为是电子数据处理的先行者。

当时霍尔瑞斯在美国国家专利局和统计局工作。1880年,美国开展了一次人口普查,每个美国公民的全部特征信息都要记录在数据表上。这次人口普查进行了7年,工作人员才完成所有的数据汇总。霍尔瑞斯在与一位统计死亡率的官员交谈之后受到了启发,发明了一台能把汇总过程自动化,从而简化人工操作的机器。此处他用到的便是穿孔卡片系统。他还从列车员身上找到了灵感,他们在车票的不同位置打孔,以这种形式记下旅客的性别、肤色等特征,用来防止不合规定使用车票的现象。

图1.20 霍尔瑞斯的穿孔卡片

和织布机的穿孔卡片系统不同,霍尔瑞斯的卡片并不用来控制整个系统,而是用来记录信息,让这些信息通过电子识别被机器获取。为了实现这个过程,他使用了事先经过标准化的穿孔卡片,用以储存每个人的不同信息和特征,每个居民备有一张卡片。针对每一个具体的特征,卡片上都存在两种情况,即设有穿孔(回路闭合)或者没有穿孔(回路打开)。通过电流脉冲,穿孔卡片连同上面储存的个人数据就可以被读取汇总。

1890年,这个系统投入了实际应用(见图1.21)。美国的居民人数当时为6300万,虽然比起1880年的人口普查数目大大地增加,但是整个数据评估在当年年底就完成了。1896年,霍尔瑞斯成立了TMC公司生产制表机器,把他的系统租借给其他国家用于人口普查。1911年,霍尔瑞斯以1210万美元出售了TMC,与另外两家公司合并成立了计算机制表记录的CTR公司。1924年,公司改名为国际商业机器公司,简称“IBM”。

提到这个名字,你或许就不感到陌生了,IBM是当今在硬件、软件、信息技术服务业中均处于领先地位的企业,同时也是最大的咨询公司之一。

图1.21 赫尔曼·霍尔瑞斯设计的机器

1.19 图灵机(1936年)

1936年12月12日,英国数学家艾伦·麦席森·图灵发表了他的论文《论可计算数及其在判定性问题上的应用》。他在文中描述了一种通用的计算机器,只需要三个操作步骤,这台机器就能掌握所有的基础运算。它就是人们所说的“图灵机”,在后世被认为是信息科学中最重要的基石之一。在图灵的文章发表之后没过几年,康拉德·楚泽制造出了第一台“图灵完备”的机器——Z3。

判定性问题

有趣的是,图灵在他的论文中混进了一个德语词“Entscheidungsproblem”(判定性问题)。这是因为,在第二次世界大战前关于数学的论文经常是用德语撰写的。这个概念的源头要追溯到戈特弗里德·莱布尼茨,早在17世纪他就开始研发能够计算出数学问题的真值的机器。1928年,大卫·希尔伯特和威廉·阿克曼用“判定性问题”这个词提出了一个挑战,简单来说就是寻求一种算法,能够对作为输入的一个逻辑表达式进行判定,并且用“是”或“否”来回答。德语词“判定性问题”直接出现在了大卫·希尔伯特的论文标题中:《数理逻辑中的判定性问题》《希尔伯特的判定性问题》。

在长达36页的论文中,图灵并没有去描述一台真正的机器,而是完成了一种理论构建,他没有制造出任何实物。

他的“机器”拥有一个无限空间的存储器。他把这个存储器描述为一条无限长度的带子,上面可以写入符号,也可以删去。这条带子从右往左无限地移动,带子上的每一个单独区域由一个读写头触发。这个读写头能够读取区域中的内容,也可以写入符号,并且任何时候都可以左右移动。控制读写头的每一个处理指令始终取决于当前所处的一个特定状态,而处理过程本身则通过一个控制程序来设定,如图1.22所示。

图1.22 对单带图灵机器的图解

我不想过多地在理论计算机学里纠缠,只用最简单的话来解释一下:人们可以通过这个简单的理论机器执行任意一种算法。本质上这个机器就是一小组可执行的程序,用于一种输入转化成一种输出。它的运行原则是,读取一个单独的符号,给出另一个符号作为回答,正因为如此简单、如此基础,它可以应用于任何一种思维过程,并不仅仅限于计算机学。

什么是算法?

一个算法在根本上就是基于一个解题方案对于一个问题所进行的解答,在解题的每一步中,输入数据都转化为输出数据。

以这种方式,就可以给一台计算机在无限的方程式上编程,前提是能够发明出一种方法来描述这些方程式。就像康拉德·楚泽说的那样,人们在一台计算机上运行一个合适的程序,计算机就成了“用来解决特定问题的大脑”。