计算机从简单到复杂

昨天我和你谈到了算盘,它让古代中国人在记账上非常先进。但是使用算盘时,人类会遇到一个不方便的地方,就是要求打算盘的人牢记珠算口诀,并且练习,熟练到成为一种本能的反应。这时候的人其实不过是一个有动力的机器而已,但是做到这一点又谈何容易。

算盘的另一个缺陷是,万一不小心拨错了一个珠子,差错可是很麻烦的,因此打算盘的人通常至少要打两遍。即便如此,出错也是经常的。上一代会计都有这样的体会,有时因为两分钱对不上号,要来回来去打一晚上算盘。

为了解决自动计算的难题,人们就想要设计一种能够通过机械传动完成计算的机器。人类的这种努力其实在古代就有,但是都不太成功。第一个成功实现用机器实现简单计算功能的,是我所钦佩的 法国数学家帕斯卡(Blaise Pascal ),他发明了一种被称为机械计算机的装置。

帕斯卡的这个机械装置其实原理很简单,它由上下两组齿轮构成,每一组齿轮可以代表一个十进制的数字,在齿轮组外面有对应的一排小窗口,每个窗口里又刻了0~9十个数字的转轮,用来显示第一个操作数和计算结果。

该计算机的动力来自于一个手工的摇柄   ,要计算时,将上下两组齿轮拨到相应的位置,比如要做加法运算15+29,就把第一组的两个齿轮分别拨到1和5的位置,第二组齿轮上相应的齿轮拨到2和9的位置。然后转动手柄直到转不动为止,在这个过程中,齿轮带动有数字的小转轮运转,最后停到应该停的位置,这时计算结果就出现在计算机上方的小窗口里。

帕斯卡计算机操作很简单,但显然不可能算得很快,甚至比算盘慢很多。不过即便如此,帕斯卡计算机也是一个巨大的进步,因为计算是自动的,只要输入的数字不错,答案就错不了。这也就是说,计算机的控制,由人变成了机械。

在所有控制机械计算器的部件中,最复杂的是一个逢十进一的机械装置。这种进位装置在机械钟表中经常用到,帕斯卡用到的就是类似的装置。但是,这个装置对复杂的机械计算机并不是很方便。

后来大数学家莱布尼茨为了改进帕斯卡的计算机,花了足足40年的时间。他先后制作了两个机械计算机,它们可以做乘法,这些机械今天经过修复后,居然可以工作。但是和帕斯卡的计算机一样,它们并不好用。

不过,后人要感谢莱布尼茨在研制计算机的过程中发明了一种转轮,它可以很好地解决进位的问题,在随后的三个世纪里,各种机械计算机都要用到这种转轮。

除了改进机械计算机,莱布尼茨还发明了二进制,它成为了今天计算机的基础,关于这一点我以后还会仔细讲。

不过我今天要说的一点是,莱布尼茨所设计的计算器还是十进制的,和二进制无关,而他发明二进制,从某种程度上是为了证实上帝的伟大。关于这一点,他还给康熙皇帝写了封信,希望后者皈依基督教。

讲回到早期的计算机,无论是算盘还是欧洲人发明的机械计算器,其实都只能做加、减、乘、除运算,从这个角度讲,它们是专用的。当然,从能够做各种不同的四则运算来讲,它们也是通用的平台。

接下来的问题就是,它们能否做更多的事情,或者比加、减、乘、除更复杂的事情。在莱布尼茨之后的近两百年里,大家一直在考虑这个问题。直到十九世纪中期,英国数学家巴贝奇才有了本质的突破。

如果说世界上有天才的话,巴贝奇(Charles Babbage,1791—1871)必定能入选。他24岁时成为了英国皇家学会会员(院士),后来担任了剑桥卢卡斯数学教授,这个讲席教授可是以前牛顿担任的。巴贝奇参与创建了英国天文学会和统计学会,还是科学管理的先驱。

在研究科学管理时,他整天琢磨怎么能把脑力计算的工作让机械来做,并且从法国人杰卡德发明的提花织布机上得到了灵感,马上灵光一动地想到了, 既然人们能够按照设计的旨意控制织布机的运动,编织出各种图案,为什么不能够用一种相应的控制流程来控制齿轮的运动,从而自动计算不同函数的数值呢?

巴贝奇对当时齿轮机械控制的原理非常了解,他开始设计运算所对应的齿轮控制流程,这个流程一旦启动,它就控制齿轮的转动,并且在流程结束时,让机械停止下来,停下来的位置就是答案。

为了证实他的这种想法是可行的,他决定用机械来解决微积分计算的问题。在20岁的时候,巴贝奇便设计制造了一个简单的差分机,让它完成微积分中一些简单的运算。

在巴贝奇那个时代,机械加工水平极差,整个计算机从设计绘图到零件加工,都得他自己亲自动手。好在他从小就酷爱机械加工,车、钳、刨、铣、磨,样样拿手,而他那位银行家的父亲让他不必为生计发愁。

在孤军奋战了10年后,巴贝奇终于造出来了一台差分计算机,运算精度达到了6位小数,当即就为大家算出好几种函数表。后来证明,这种机器非常适合于编制航海和天文方面的数学用表。

接下来巴贝奇就致力于研制一台有20位精度的差分计算机。由于有第一台的成功经验,他幸运地拿到了英国政府1.7万英镑的资助,这在当时是一笔巨款,因为制造一台蒸汽机车的费用还不到800英磅。

但是巴贝奇显然高估了当时的机械加工的水平,第二台差分机大约有25000个零件,每个零件的误差不得超过千分之一英寸,即使用21世纪的加工设备和技术,要想造出这种高精度的机械也绝非易事。

在随后的10年间,巴贝奇不仅花光了政府的资助,自己还倒贴了1.3万英镑。人们都说他是骗子,包括皇家学会里的一些同事。但就在这时,著名诗人拜伦爵士的女儿阿达(Ada),也就是洛甫雷斯伯爵夫人,成为了他的支持者和研究伙伴。

阿达当时只有27岁,有着极高的数学造诣和研究热情。在她的帮助下(包括财力的资助),巴贝奇的工作取得了很大的进展,但不幸的是,她在36岁时英年早逝了。

阿达去世后,巴贝奇又独自坚持了20年,最终只完成了这台计算机的一小部分。因此他是带着遗憾离开人世的。所幸的是,巴贝奇和阿达留下了30种不同的设计方案,近2100张组装图和50000张零件图,清晰地告诉了后人他们的设计思想,而今天的人根据他们的设计图制造出了能工作的差分计算机。

这台差分机在制造完成之后重达4吨,它的一个副品保留在今天硅谷的计算机博物馆里。这里顺便说一下,美国国防部主导设计了一种程序语言,就是以阿达的名字Ada命名的。

今天的故事是讲完了,我帮助大家梳理一下思维的脉络:

1. 从算盘,到帕斯卡、莱布尼茨、最后到巴贝奇, 你可以看出发明的一个轨迹,就是为了让一种设备完成更多、更复杂的功能,发明变得越来越复杂了。这是发明的常态。 为什么我们讲专业知识重要,因为没有精深的专业知识,就无法应对越来越复杂的工作。

2. 在上述过程中, 我们再次看到“控制”对于计算机的重要性,或者说它是计算机的本质之一。 控制从人,到简单机械,到复杂机械,这是一个渐进的过程,但是设计这些控制过程的永远是人。

3. 巴贝奇的悲剧在于他的想法太超前,以至于当时的工业基础无法满足他的设计要求。 从这个意义上讲,巴贝奇更多地是科学家,而不是工程师。我在《见识》一书中介绍了前苏联设计和制造“米格25”战斗机的成功经验,从那个案例中可以看出好的工程师是如何在边界之内做事情的。

4. 显然,我们不能为了做越来越复杂的事情,就把设备越做越复杂, 事实上,当什么东西变得太复杂后,就要有人换一个思路进行发明,将它重新变得简单,这也是发明的大趋势。 关于这一点,我和你明天再聊。

推荐阅读更多精彩内容