第一章:计算的历史与未来 Chapter 1: The History and Future of Computing
第一章:计算的历史与未来
The History and Future of Computing
当你早晨被手机闹钟叫醒,抬手关掉闹钟的那一刻,你可能没有意识到,自己刚刚完成了一次“计算”。手机接收到你的触摸信号,判断这是一个“关闭闹钟”的指令,然后执行相应的操作——停止声音、显示时间。在接下来的几秒钟里,你的手机可能已经完成了上百万次运算,而你对此毫无察觉。这,就是计算的魔力。
现代人每天都在与计算机打交道,从智能手机到笔记本电脑,从ATM取款机到地铁闸机,计算已经渗透到生活的每一个角落。然而,当我们享受着便利的同时,很少有人会停下来思考:计算究竟是什么?人类是如何一步步走到今天的?那些看似简单的“0”和“1”如何能够完成如此复杂的工作?更重要的是,当传统的计算方式触及天花板时,人类又将何去何从?
这些问题,正是我们整本书将要探索的核心主题。在第一章中,我们将踏上一次穿越时空的旅程,从人类最早的计算工具讲起,一路走到21世纪的前沿科技——量子计算。通过这段历史,你将理解量子计算并非凭空出现的“魔法”,而是人类几千年追求更强大计算能力的必然结果。
---
1.1 远古的回响:人类最早的计算工具
1.1.1 结绳记事:信息的最初编码
让我们把时间拨回到远古时代。想象一下,你是一位生活在几千年前的部落首领,你需要记住部落里有多少人、欠了邻村多少粮食、猎物什么时候该去狩猎。这些今天看起来简单的信息,在没有文字的时代,却是一个巨大的挑战。
古人的解决方案既简单又巧妙——结绳记事。考古学家发现,最早的结绳记事可以追溯到距今约七千年前的新石器时代。在秘鲁的安第斯山脉,考古学家发掘出了大量古代秘鲁人使用的“奇普”(Quipu),这是一种用棉绳或羊毛绳制成的记事工具。而在中国的古籍中,也有“上古结绳而治”的记载。
结绳记事的工作原理并不复杂:在一根主绳上系上若干根细绳,每根细绳代表一类信息,比如人口、猎物、粮食等。细绳上打结的数量表示具体的数目,不同类型的结表示不同的数量级——大结表示十,小结表示一。这种方法虽然简陋,却体现了计算的核心思想:用一种系统化的方法来表示和处理信息。
如果我们用现代的眼光来分析结绳记事,会发现它已经包含了计算的基本要素。首先,它是一种编码系统——把真实世界的信息(人口数量、粮食储备)转换成一种可以存储和读取的符号形式(绳结)。其次,它支持基本的运算——如果要计算总数,就把代表不同事物的绳子上的结数相加。这种编码和运算的思想,贯穿了整个人类计算工具的发展史。
值得注意的是,结绳记事并不是某个文明的独创。在日本,波利尼西亚群岛、非洲部落、美洲原住民等几乎所有早期文明,都独立发展出了类似的结绳记事系统。这说明,计算是人类的本能需求,而结绳记事是人类迈向计算文明的第一步。
1.1.2 算盘:机械计算的黎明
从结绳记事到算盘,人类花了几千年的时间。算盘的出现,标志着人类进入了“机械计算”的时代。
关于算盘的起源,历史学家至今仍有争议。有人认为算盘起源于中国的春秋战国时期,最初是一种叫做“算袋”的计算工具;也有人认为算盘源自古巴比伦的沙盘计算。无论起源如何,算盘在人类计算史上占据着举足轻重的地位,因为它是最早实现了“半自动化”计算的工具。
让我们来看看算盘是如何工作的。以中国算盘为例,它由一个长方形的木框组成,框内平行地装有若干根竖杆,每根杆上都有七颗珠子。中间有一根横梁把每根杆分成两部分:梁上方的两颗珠子每颗代表“5”,梁下方的五颗珠子每颗代表“1”。这种设计非常精妙——它利用了十进制和五进制的结合,用最少的手指动作完成最大范围的数值表示。
算盘的计算原理可以这样理解:每个数位(个位、十位、百位等)对应一根竖杆,杆上的珠子位置表示该数位的数值。当我们拨动珠子时,就是在改变某个数位的数值;如果某个数位满“10”了,就需要向高位进位——把个位杆上的所有珠子拨回原位,同时在十位杆上进一颗珠子。
这种“进位”机制听起来简单,却是算术运算的核心。一个熟练的算盘操作者,可以在几秒钟内完成加减乘除运算,速度甚至超过普通人使用计算器。在电子计算机普及之前,算盘一直是商业贸易和日常计算的主要工具。时至今日,在一些亚洲国家,仍然有人在使用算盘,而且研究表明,学习算盘运算对培养数感和心算能力有显著帮助。
算盘的另一个重要意义在于,它证明了计算可以“机械化”。在此之前,人类进行计算完全是依靠大脑的思维活动;而算盘引入了一种外部的物理装置来辅助(甚至部分替代)人脑的计算功能。这种“外部化”的思想,为后来所有计算工具的发展奠定了基础。
1.1.3 对数与计算尺:科学革命的算力引擎
时间来到17世纪,欧洲正经历着一场伟大的科学革命。牛顿、莱布尼茨等科学巨匠正在发展微积分,天文学家需要计算行星轨道,医生需要处理医学数据,海员需要精确的导航计算。科学的发展对计算能力提出了前所未有的需求,而简单的算盘已经无法满足这种需求。
在这种背景下,对数和计算尺应运而生。对数的发明者是苏格兰数学家约翰·纳皮尔(John Napier),他在1614年发表了《奇妙的对数定律》一书,介绍了一种可以把乘除运算转化为加减运算的数学方法。纳皮尔的思路是这样的:如果我们有两个数 $a$ 和 $b$,它们的乘积可以表示为 $a \times b$。但是,如果我们先把 $a$ 和 $b$ 转换成它们的对数 $\log(a)$ 和 $\log(b)$,那么乘积就变成了 $\log(a) + \log(b)$。计算完成后,再用对数表把结果转换回原来的数值。
这种方法的妙处在于,乘法和除法(复杂的运算)被转化成了加法和减法(简单的运算)。对于需要大量乘除运算的天文学计算来说,这无疑是一个巨大的福音。据说,当年天文学家利用对数表,把原本需要几个月才能完成的星表计算缩短到了几周。
计算尺则是对数思想的物理实现。1622年,英国数学家威廉·奥特雷德(William Oughtred)把两把带有对数刻度的直尺并排放置,发明了最早的计算尺。计算尺的工作原理是这样的:如果我们把两条刻有对数尺度的尺子并排放置,那么对齐的两个数的位置差,就对应着它们乘积的位置。通过滑动尺子,计算者可以完成乘除、平方、立方、开方等多种运算,速度比查对数表还要快。
在20世纪60年代电子计算器普及之前,计算尺是工程师、科学家和学生的标准计算工具。人类登月的阿波罗计划中,宇航员们就带着计算尺进入太空。你可能会惊讶:用计算尺怎么能把人送上月球?答案是,计算尺的精度虽然有限(通常只能精确到两到三位有效数字),但对于工程计算来说已经足够了。更重要的是,它能够在几秒钟内完成复杂运算,极大地提高了工作效率。
从结绳记事到算盘,从对数表到计算尺,我们可以看到一条清晰的发展脉络:人类一直在寻找能够扩展计算能力、加快计算速度、降低计算难度的方法。每一次工具的改进,都推动了科学的进步和文明的发展。然而,这些工具都有一个共同的局限——它们都需要人手动操作,运算速度受到人体生理极限的限制。要突破这个限制,人类需要一种全新的计算思想。
---
1.2 机械计算机:从齿轮到继电器
1.2.1 巴斯卡计算器:齿轮中的智慧
1642年,在法国卢瓦尔河畔的鲁昂,一位年仅19岁的年轻人正在埋头工作。他叫布莱兹·帕斯卡(Blaise Pascal),后来成为著名的数学家、物理学家和哲学家。但此刻,他正在为他的父亲——一位税务官员——解决一个实际问题:每天有大量的账目需要计算,手指拨打算盘已经不堪重负。
帕斯卡的解决方案是一台能够自动进行加减运算的机械计算器。他设计了一台名为“帕斯卡林”(Pascaline)的机器,这台机器使用齿轮和转盘作为计算元件,当一个数位上的齿轮转动满10圈时,会自动带动下一个数位的齿轮转动一格,实现进位功能。这种进位机制与算盘的原理相似,但完全由机械自动完成,不需要人工干预。
帕斯卡计算器在当时的引起了轰动。尽管它价格昂贵(相当于一个书记员好几年的工资),而且只能做加减运算,但它的设计理念影响深远。帕斯卡曾自信地说:“我的计算器可以在不考虑人类思维的情况下,完成人类思维所能完成的一切运算。”这句话虽然有些夸张,但预示了后来计算机科学的一个重要主题:机器能否替代人脑?
帕斯卡之后,许多发明家继续改进机械计算器。1673年,德国数学家戈特弗里德·莱布尼茨(Gottfried Leibniz)发明了一台可以进行乘除运算的计算器。莱布尼茨的设计更为精妙,他引入了一种叫做“步进鼓”的装置,可以自动完成乘以一系列固定值(1到9)的加法,从而实现乘法运算。这台机器虽然操作复杂,但它证明了机械装置完全可以实现复杂的数学运算。
1.2.2 差分机与分析机:梦想家的远见
时间来到19世纪,英国数学家查尔斯·巴贝奇(Charles Babbage)站在了机械计算的高峰。巴贝奇设想的机器叫做“差分机”(Difference Engine),它的设计目的是自动计算数学表,特别是对数表和三角函数表。在当时,数学表是航海、科学研究和工程设计不可或缺的工具,但手工计算不仅耗时,而且容易出错。巴贝奇希望通过机械自动化来消除这些错误。
差分机的原理基于一个数学事实:某些类型的数学函数可以用多项式来近似,而多项式的值可以通过反复的加法规律性地计算出来。巴贝奇设计了一套精妙的齿轮系统,可以自动完成这些加法运算,输出完整的多项式数值表。
巴贝奇在1822年完成了差分机的设计,但由于当时机械加工技术的限制,差分机只完成了很小一部分就陷入了资金困难。尽管如此,伦敦科学博物馆在1991年根据巴贝奇的设计图纸成功建造了一台完整的差分机二号(巴贝奇后来设计的改进版本)。这台机器重达2.6吨,包含8000多个零件,能够计算7阶多项式,精度可达31位数字。这个成功的重建证明了巴贝奇的设计是正确的,只是远远超前于他的时代。
巴贝奇并没有止步于差分机。1837年,他提出了一个更加革命性的设计——分析机(Analytical Engine)。分析机的设计思想超前得令人惊叹:它包括一个“仓库”(相当于现代计算机的内存)和一个“磨坊”(相当于现代计算机的处理器),用打孔卡片来编程,控制机器执行各种运算。巴贝奇甚至预见了条件分支和循环的概念——这些都是现代程序设计的基本要素。
巴贝奇的合作者艾达·洛芙莱斯(Ada Lovelace)——英国诗人拜伦的女儿——为分析机编写了详细的说明和示例程序。她在注释中提出了一个深刻的观点:机器不仅可以处理数字,还可以处理任何能用符号表示的事物。这段话被后来的计算机科学家视为“程序”和“软件”概念的雏形。艾达也因此被认为是世界上第一位程序员。
虽然分析机最终未能建成,但巴贝奇和洛芙莱斯的思想为后来的计算机发展指明了方向。他们证明了几个关键观点:第一,机器可以自动执行复杂的计算序列;第二,机器可以通过编程来执行不同的任务;第三,机器的潜力远不止于数值计算。这些观点在一个世纪后被电子计算机的实现所证实。
1.2.3 继电器计算机:机械与电学的融合
19世纪末和20世纪初,电力开始改变世界。工程师们意识到,既然可以用电来传输信号和控制机械,为什么不把电学引入计算器呢?于是,一种新的计算元件诞生了——电磁继电器。
继电器的工作原理很简单:它是一个用电流控制的开关。当线圈通电时,会产生磁场,吸引铁芯,使开关触点闭合或断开。这种简单的机制可以用来表示二进制信息:触点闭合表示“1”,触点断开表示“0”。
1937年,美国贝尔实验室的乔治·斯蒂比茨(George Stibitz)用继电器和电话交换机零件建造了一台叫做“Model K”的二进制计算机。这台机器只用了大约200个继电器,但它证明了继电器完全可以用来构建二进制逻辑电路。斯蒂比茨后来继续改进,建造了更复杂的继电器计算机,甚至实现了远程操作——操作者可以在另一个房间通过电传打字机向计算机输入指令。
与此同时,在德国,康拉德·楚泽(Konrad Zuse)也在独立地研发继电器计算机。楚泽是一位工程师,他在柏林一间狭小的公寓里,利用有限的资源,建造了一系列计算机。他的第三台机器——Z3——完成于1941年,被公认为是世界上第一台可编程的通用数字计算机。Z3使用了约2600个继电器,可以进行二进制加减乘除运算,并且可以通过打孔胶片来编程。尽管楚泽的机器在当时没有引起广泛关注,但它的设计思想与现代计算机非常接近。
继电器计算机虽然比纯机械计算机快得多,但仍然存在明显的局限。继电器是一种机械装置,它的开合需要物理运动,这就限制了运算速度——最快的继电器每秒钟也只能开关几十次。而且,继电器容易磨损,需要频繁维护。这些问题促使工程师们寻找更好的计算元件。
---
1.3 电子计算机的诞生:0和1的革命
1.3.1 真空管:去除机械的束缚
如果说继电器是机械计算向电子计算过渡的桥梁,那么真空管就是电子计算的真正起点。真空管的核心是一个被抽成真空的玻璃管,里面装有电极。当电流通过灯丝时,会产生热量,使阴极释放电子;这些电子可以在真空中自由移动,被阳极吸引,从而形成电流。更重要的是,如果在阴极和阳极之间加入一个栅极(第三个电极),改变栅极上的电压,就可以控制电子流的大小。这就是三极管的工作原理,它既可以作为放大器,也可以作为开关。
真空管作为开关,比继电器有巨大的优势:首先,它没有机械运动部件,开关速度可以快得多——最早的真空管计算机每秒钟可以进行数千次运算;其次,真空管没有磨损问题,理论上寿命更长(尽管早期的真空管可靠性也不高)。这些优势使真空管成为构建高速电子计算机的理想元件。
1946年,在美国宾夕法尼亚大学,世界上第一台通用电子数字计算机——ENIAC(Electronic Numerical Integrator and Computer)正式建成并投入使用。ENIAC是一个庞然大物:它占地170平方米,重达30吨,使用了约18000个真空管,7000个电阻,10000个电容,还有1500个继电器。ENIAC每秒钟可以执行5000次加法或300次乘法,这个速度在当时是惊人的——比继电器计算机快了一千倍!
然而,ENIAC也有明显的缺点。第一,它的体积太大了,30吨的重量和占据的庞大空间使得它几乎不可能移动。第二,ENIAC不是一台“存储程序”计算机——它的程序是通过重新连接线路来设置的,每次改变程序都需要几个人花几天时间重新接线,这完全抵消了电子元件的速度优势。第三,ENIAC的能耗惊人,每小时要消耗150千瓦的电能,而且真空管很容易烧坏——据估计,ENIAC平均每两天就会有一个真空管失效,需要专人检查更换。
ENIAC的成功和局限共同推动了计算机技术的下一步发展。许多参与ENIAC研发的科学家后来成为计算机科学的先驱,其中最著名的就是约翰·冯·诺依曼(John von Neumann)。
1.3.2 冯·诺依曼架构:计算机的蓝图
1945年6月,冯·诺依曼在《关于EDVAC的报告草案》中提出了一种全新的计算机架构。这份报告只有101页,但它所描述的设计思想影响深远,至今仍然是几乎所有通用计算机的基础架构。
冯·诺依曼架构的核心思想是把程序和数据都存储在计算机的内存中。以前的计算机(如ENIAC)需要通过人工重新接线来改变程序,而冯·诺依曼架构允许程序像数据一样被读写和修改。这意味着,计算机可以在运行过程中动态地改变自己的程序——这是一个革命性的想法。
冯·诺依曼架构的基本组成部分包括:
1. 运算器(Arithmetic Logic Unit, ALU):负责执行各种算术运算和逻辑运算,是计算机的“计算”核心。 2. 控制器(Control Unit):负责从内存中取出指令,解释指令,然后控制其他部件执行指令。运算器和控制器合在一起,被称为中央处理器(Central Processing Unit, CPU)。 3. 存储器(Memory):用于存储程序和数据。存储器被组织成许多连续的“单元格”,每个单元格有一个地址,可以存放一个数据或指令。 4. 输入设备(Input Devices):把外部信息转换成计算机能处理的二进制数据,如键盘、鼠标、扫描仪等。 5. 输出设备(Output Devices):把计算机处理的结果转换成人类能理解的形式,如显示器、打印机、扬声器等。
这种架构的工作流程是这样的:控制器从内存中取出一条指令,分析这条指令要做什么,然后指示运算器或其他部件执行相应的操作。执行完成后,控制器取下一条指令,继续这个过程,直到所有指令执行完毕。
冯·诺依曼架构的另一个重要特征是二进制系统。在计算机中,所有信息——无论是数字、文字、图像还是声音——都用“0”和“1”两个数字来表示。每个“0”或“1”叫做一个比特(bit),是信息的最小单位。为什么要用二进制呢?因为二进制只需要两种状态来表示信息,这两种状态可以用电路的通断、电压的高低、磁性的有无等多种物理方式来可靠地实现。相比之下,十进制需要十种不同的状态来表示0到9,这在物理上更难可靠地区分。
二进制还有一个重要的优势:它使得布尔代数(Boolean Algebra)可以直接应用于计算机的逻辑电路。19世纪中期,英国数学家乔治·布尔(George Boole)发展了一套用代数方法处理逻辑命题的数学系统。在布尔代数中,变量的值只有“真”和“假”两种。20世纪30年代,克劳德·香农(Claude Shannon)证明了布尔代数与电路的对应关系:AND(与)、OR(或)、NOT(非)等逻辑运算可以通过电路的串联和并联来实现。这一理论为数字电路的设计奠定了基础,而数字电路正是现代计算机的基石。
让我们来看一个简单的例子:假设我们想要计算机判断一个数是否大于10。在电路层面,这可以通过比较器的逻辑门来实现。如果这个数的二进制表示的最高位(第4位)已经是1(表示数≥16),那么它肯定大于10,电路输出“真”;如果最高位是0,我们需要继续检查下一位,依此类推。这个看似复杂的过程,在现代计算机中只需要几个逻辑门和几个时钟周期就能完成。
1.3.3 从ENIAC到现代计算机:微型化的革命
继冯·诺依曼架构之后,计算机技术进入了快速发展的时代。1949年,第一台基于冯·诺依曼架构的计算机EDSAC在英国剑桥大学建成。EDSAC使用水银延迟线存储器,可以存储32个字(每个字17位),每秒钟执行约650条指令。更重要的是,EDSAC使用了“微程序”的概念——把一些常用的指令序列预先存储在只读存储器中,大大简化了控制器的设计。
1951年,UNIVAC I(Universal Automatic Computer I)成为第一台商业化的电子计算机,它被美国人口普查局采用来处理人口普查数据。UNIVAC I的诞生标志着计算机从实验室走向商业应用的开始。此后,IBM公司等计算机厂商相继推出了各种型号的计算机,计算机开始进入银行、保险公司、政府机构和大企业。
然而,真正让计算机走进千家万户的是晶体管和集成电路的发明。1947年,贝尔实验室的威廉·肖克利(