1833 年,一个机器的图纸被铺在伦敦一间工作室的桌上。设计者用了将近十年时间构思这台装置,它有齿轮、凸轮和穿孔卡片,能够执行任意的数学运算——读取指令,分支判断,循环执行。设计者叫查尔斯·巴贝奇(Charles Babbage),这台机器叫分析机(Analytical Engine)。它从未被完整建造出来,但它的逻辑结构与一个世纪后诞生的现代计算机惊人地相似。
破除误解:巴贝奇不是失败者
历史上有一种叙述:巴贝奇是个天才的失败者,他的机器因为工程困难和资金问题而胎死腹中,他的一生是一个宏大的悲剧。这种叙述扭曲了更重要的事实。
巴贝奇最大的成就不是建造了任何机器,而是在电子技术存在之前,用纯机械工程语言,系统地构思出了通用计算机的全部核心概念:输入单元(穿孔卡片)、存储单元("仓库")、运算单元("磨坊")、控制单元(条件分支与循环)、输出单元(打印机)。这五个部分的分工,与冯·诺伊曼 1945 年所描述的现代计算机体系结构几乎一一对应。
他没有失败——他超前了整整一百年。
现场:维多利亚时代的计算危机
19 世纪初的英国正处于工业革命的高峰,但数学表格却是手工计算的产物,充斥着错误。天文表、对数表、保险精算表——所有依赖这些数字的工程师、航海员和金融家,都在用可能有误的数据做出关键决策。当时《航海年鉴》中的一个数值错误,在海上就可能意味着一次触礁。1821 年,巴贝奇与好友约翰·赫歇尔(John Herschel)一起核对天文学会委托的数表,对两组手工计算之间的大量出入感到沮丧,说出了那句后来被广泛引用的话:"我真希望这些计算能由蒸汽机来完成(I wish to God these calculations had been executed by steam)。"
这不是随口一说。1822 年 6 月,他向刚刚成立两年的皇家天文学会递交论文《关于将机器用于天文表计算的一点说明》,并附上一台能运转的小型模型机,次年获得政府首批拨款。巴贝奇花了接下来二十年时间,尝试把这个愿望变成现实。
第一台机器:差分机(Difference Engine)
差分机(Difference Engine)的原理基于有限差分法:许多数学函数(多项式、对数、三角函数的近似值)可以通过反复的加法来计算,完全不需要乘法和除法。这意味着一台只会"加法"的机器就能生成复杂的数学表格。
1822 年,巴贝奇向英国皇家学会展示了一台小型差分机原型,运行顺利。1823 年,政府拿出第一笔 1500 英镑拨款资助建造完整版本——这在当时是一笔可观的公共科研投入,项目原计划两三年完成。然而接下来的十年里,项目深陷困境:巴贝奇与首席工程师约瑟夫·克莱门特(Joseph Clement)在工钱、车间选址和工具归属上反复争执,1833 年 4 月克莱门特停工离场,带走了按当时行业惯例属于雇主的专用机床图纸与工具,工程就此瘫痪。到项目被搁置时,政府已投入约 17,000 英镑,巴贝奇自己也贴进了数千英镑私人财产,而机器本身只完成了一小部分。
差分机的失败有真实的工程原因——19 世纪的机械加工精度还不足以让数千个互相配合的齿轮以微米级别的公差协同工作。但它也有项目管理的原因:巴贝奇性格固执,在工程尚未完成时就开始构思更宏大的下一台机器,已造好的零件随设计修改不断报废。1842 年,在皇家天文学家乔治·艾里(George Biddell Airy)明确否定其实用价值之后,罗伯特·皮尔(Robert Peel)的政府正式终止了这个拖了近二十年的项目。
值得注意的是,差分机并不是从未被人造出来过。瑞典出版商佩尔·格奥尔格·朔伊茨(Per Georg Scheutz)与儿子爱德华读到巴贝奇的构想后,用远为简陋的条件造出了一台真正能运转、能打印的差分机,1853 年在斯德哥尔摩投入使用,后来一台卖给了英国户籍总署用来印制人寿保险表,一台卖给了美国达德利天文台。朔伊茨父子的机器证明了原理可行,也反衬出巴贝奇项目的问题不在"图纸错了",而在规模、资金与协作方式。
1847 年,巴贝奇把从分析机研究中得到的简化算术机构回灌到旧设计中,画出了差分机 2 号的图纸:零件数压缩到约 8,000 个,只有 1 号设计的三分之一,运算精度却更高。这套图纸在他生前同样无人愿意出资建造。直到 1985 年,伦敦科学博物馆的馆长多伦·斯韦德(Doron Swade)与悉尼大学的计算机史学家艾伦·布罗姆利(Allan Bromley)发起重建工程,严格使用维多利亚时代可行的材料与工艺公差,主体于 1991 年 6 月——巴贝奇诞辰两百周年——如期完成并正常运转,巴贝奇原设计中配套的打印输出装置则在 2000 年补上,同样一次通过。它证明了图纸本身是正确的。
核心突破:分析机(Analytical Engine)
大约从 1833 年起,巴贝奇开始设计一台根本不同的机器。差分机只能计算多项式,而分析机理论上可以执行任何可以被描述为有限步骤的运算。
分析机的关键创新:
| 现代计算机部件 | 巴贝奇的对应设计 |
|---|---|
| 内存(RAM) | "仓库"(Store),可存储 1000 个十进制数(1837 年设计为每数 40 位,巴贝奇 1864 年的描述扩到 50 位) |
| CPU(运算单元) | "磨坊"(Mill),执行四则运算 |
| 程序(指令) | 两组穿孔卡片:一组控制运算,一组输入数据 |
| 条件分支(if/else) | 条件卡片,根据运算结果选择不同的卡片序列 |
| 循环 | 卡片可以反向传送,重复执行同一段指令 |
| 输出 | 打印机、曲线绘图仪、穿孔卡片输出 |
穿孔卡片的灵感来自雅卡尔织机(Jacquard Loom)——这种用穿孔卡片控制纺织图案的装置在 1800 年代已经广泛使用。巴贝奇意识到,控制织机和控制计算过程在逻辑上是同构的。1840 年,他应邀到都灵向意大利数学家讲解分析机,在场的年轻军事工程师梅纳布雷亚据此写成介绍文章——正是这篇文章后来引出了阿达·拉芙蕾丝的著名注释。
巴贝奇估算过这台机器的速度:一次 50 位十进制加法约一秒钟,两个 20 位数相乘约三分钟。以今天的标准看这慢得可笑,但关键不在快慢——它意味着计算第一次被设想为一种可以完全委托给机器的通用过程。
条件分支是分析机中最革命性的部分。它意味着机器的执行路径可以依赖于中间计算结果——机器不只是在"执行",而是在某种意义上在"判断"。这是现代编程中 if-else 语句的直接祖先。
阿达·拉芙蕾丝的贡献
1842–1843 年,巴贝奇的朋友阿达·拉芙蕾丝(Ada Lovelace)将意大利工程师路易吉·梅纳布雷亚(Luigi Menabrea)关于分析机的法语文章翻译成英语,并附上了自己的大量注释——注释的篇幅是原文的三倍。
在这些注释中,阿达描述了用分析机计算伯努利数的完整算法。这个算法被许多计算机史学家认为是历史上第一个"计算机程序"。她还提出了一个至今仍有争议但极富洞见的问题:机器只能做人类告诉它做的事,它能否真正创造出新的东西?
关于"第一个程序员"的归属,史学界存在一场真实的争论。1985 年,多萝西·斯坦(Dorothy Stein)在传记《Ada: A Life and a Legacy》中尖锐地主张:阿达的数学功底不足以独立写出伯努利数算法,程序实际出自巴贝奇之手。巴贝奇本人在 1864 年的自传中留下了模糊的证词:插图例子的"挑选完全是她自己的",代数推导也大多由她完成,唯独伯努利数一例由他代做以省她麻烦——而她把稿子退了回来,因为发现了他在推导中犯的一个严重错误。晚近的研究则走向更平衡的判断:牛津数学家霍林斯(Christopher Hollings)、马丁(Ursula Martin)与赖斯(Adrian Rice)重新检视了阿达与数学家德摩根的通信档案,证明她受过相当严肃且远非常规的数学训练。今天较稳妥的结论是:把"第一个程序员"的桂冠单独颁给任何一人都不准确,但阿达是第一个把分析机理解为通用符号机器的人——她看到了它不止能算数,还能按规则操作任何可编码的对象,包括音乐。
巴贝奇本人从未完成分析机,生前发表的关于它的文字也很有限。阿达的注释是当时最系统、最深入的分析机文档,也是后人理解他思想的主要窗口之一。
机器之外:政治经济学与科学体制
巴贝奇的一生不止有两台机器。1832 年,他出版了《论机械与制造业的经济》(On the Economy of Machinery and Manufactures),这是他多年走访英国与欧洲大陆工厂的成果,被后世视为运筹学与产业经济学的早期奠基之作。书中提出了后来被称为"巴贝奇原理"的观察:亚当·斯密用扣针工场说明过分工提高效率,而巴贝奇往前多走了一步——分工应按工序所需的技能等级来切分,这样雇主就不必为每一道工序都支付熟练工的全价。这个把劳动按技能定价的思想,直接影响了约翰·斯图亚特·密尔,马克思在《资本论》和《哲学的贫困》中也多次引用他对机器与分工的分析。可以说,在政治经济学的谱系里,巴贝奇是把"工场内部的技术安排"当作严肃研究对象的第一批人——这种把生产过程本身当作分析对象的眼光,与他设计计算机器的思路是同一个:把复杂过程分解成可定义、可优化的步骤。
他还是一位科学体制的改革者。1820 年他参与创建皇家天文学会并任首任秘书之一;1828 年当选剑桥大学卢卡斯数学教授(牛顿曾任的教席),任至 1839 年,尽管他几乎不去剑桥讲课。1830 年,他发表措辞尖刻的《英格兰科学衰微之反思》,抨击皇家学会被不懂科学的权贵把持、研究者得不到国家支持——这本小册子引发的论战直接催生了次年的英国科学促进会(BAAS)。1834 年他又参与创办皇家统计学会。讽刺的是,一个如此擅长批评"科学组织不善"的人,恰恰在自己最大的工程项目上印证了组织问题的致命性。
代价与争议
巴贝奇的工程项目消耗了英国政府约 17,000 英镑(按当时价值,足以建造两艘战舰),以及他自己的大量私人财富。他与英国科学机构的关系趋于破裂,晚年几乎被视为一个喋喋不休的失意者。
历史评价上也存在真实的张力:一些计算机史学家强调,巴贝奇的设计在理论上是完备的,他确实"发明了"通用计算机。另一些人指出,没有实际运行的机器,仅凭图纸不足以证明这种主张——毕竟,从未被建造的机器也不需要面对工程现实的检验。
还有一个值得注意的问题:巴贝奇设计的是十进制机械计算机,使用的是齿轮上的十个位置表示 0–9。现代计算机使用二进制,不是因为巴贝奇的传统,而是因为乔治·布尔(George Boole)的逻辑代数和电子开关的物理特性。两条线索在 20 世纪初才被香农等人合并。
跨域连接
- 数值方法:差分机的全部原理是一条恒等式——多项式的高阶差分为常数,于是求值可以换成逐级累加,一台只会加法的机器就能生成整张表。代价藏在同一条恒等式里:误差沿累加链传递而不是各自独立。这也解释了他为何坚持机器必须直接排版:只要人工抄写介入,传抄错误就会叠加在累积误差之上。
- 工艺放大:差分机的失败点不在设计而在互换性——数千个齿轮要在统一公差下可互换,而这项能力当时正在形成之中。这是"原理可行"与"能造出来"之间最常见的一种落差:放大失败通常来自公差、一致性与工艺链,而非原理错误。后世按原图纸复现成功,正好把责任判给了工艺而不是图纸。
- 公共政策:政府资助的是"造出一台机器",而他在交付前不断修改设计,已完工的零件随之报废。合同按里程碑付款,却没有约束设计冻结的条款,风险因此全部落在出资方。这类项目的失败点通常不在技术能力,而在规格何时被冻结、由谁有权解冻。
- 半导体物理:现代计算机用二进制不是因为数学更优,而是因为器件只在导通与截止两端附近稳定,增益足够把噪声压回去。十个可分辨的齿轮位置在机械上没问题,十个可分辨的电平在电子上极难维持。表示法由载体的噪声容限决定——这才是他的路线与后来分道的真正原因。
- 计算机体系结构:仓库、磨坊、卡片、条件卡与打印装置,对应内存、运算器、程序、分支与输出。关键在于这套分工可以脱离实现方式成立:同一组角色既能落在齿轮上,也能落在电子管与晶体管上,这正是它一个世纪后仍然成立的原因。
历史遗产的重新评价
今天,对巴贝奇的评价在"天才预言家"和"失败的工程师"两个极端之间摇摆。更公允的看法是:他是一个生错了时代的系统设计师。他的系统设计直觉是正确的,但实现工具(19 世纪的机械加工)与理论之间的鸿沟无法靠个人意志跨越。
科学博物馆那台差分机 2 号展示了一件令人心情复杂的事:机器本身可以在那个时代制造出来并正常运行,但社会、资金和工程协作的条件没有成熟。朔伊茨父子的小机器与科学博物馆的大机器从两端证明了同一点——巴贝奇的悲剧不只是技术的,更是组织和历史的。
参考文献
- Swade, D. The Difference Engine: Charles Babbage and the Quest to Build the First Computer. Viking Press (2001). (最权威的巴贝奇传记,含科学博物馆重建工程的一手记录)
- Collier, B. The Little Engines That Could've: The Calculating Machines of Charles Babbage. Harvard Univ. PhD Dissertation (1970). (分析机设计的学术研究)
- Babbage, C. On the Economy of Machinery and Manufactures. Charles Knight, 1832. ("巴贝奇原理"原始出处)
- Menabrea, L. F. (trans. and annot. A. Lovelace). Sketch of the Analytical Engine Invented by Charles Babbage. Taylor's Scientific Memoirs 3 (1843). (阿达注释版,分析机第一手文献)
- Stein, D. Ada: A Life and a Legacy. MIT Press, 1985. ("第一个程序员"之争中质疑方的代表作)
- Hollings, C., Martin, U. & Rice, A. Ada Lovelace: The Making of a Computer Scientist. Bodleian Library Publishing, 2018. (基于档案对阿达数学能力的重新评估)