- 读书 >
- 全球科技通史 - 吴军 >
- 第四篇 现代科技 >
- 第九章 信息时代
从算盘到机械计算机
计算机是一个既年轻又古老的工具。说它年轻,是因为今天我们使用的电子计算机在1946年才诞生;说它古老,是因为在逻辑上类似于计算机、能够实现计算功能的工具的历史其实很久远。在美国硅谷的山景城(Mountain View)有世界上最大的计算机博物馆,一进门最显眼的地方立着一个大展牌,上面写着“计算机有2000年的历史”。为什么说计算机的历史长达2000年呢?因为科学史专家将中国的算盘算作最早的计算机。
算盘这个物件本身并非最早诞生于中国,这一点和绝大部分中国人的认知不同。最早的算盘(或者说类似算盘的计算工具)出现在美索不达米亚地区。公元前5世纪,古希腊出现了用小石块或者铜球帮助计算的铜质(或木质)计算工具,今天英文里面算盘一词abacus便是源于古希腊文(áβακασ)。后来古罗马人在古希腊算盘的基础上发展出罗马算盘(外观和中国的算盘颇为相似,见图9.1)。中国出现算盘最早可能在东汉至三国时期。中国今天使用的算盘出现在宋代,比古希腊晚了很多。不过算盘能够被称为计算机,则要感谢中国人发明了珠算口诀。
古希腊和古罗马的算盘实际上是用来帮助计算过程中的计数,很多计算工作还是要靠心算。也就是说,它们有了存储的功能,但是不是用指令控制的,因此它们只是辅助计算工具,而不能被算作计算机。中国的算盘(见图9.2)与古希腊和古罗马的算盘最大的不同之处是,它有了一套珠算口诀,也就有了一套指令。真正会打算盘的人,不是靠心算,而只是执行珠算口诀的指令而已。在整个计算的过程中,人所提供的不过是动力,而非运算能力,计算是算盘在口诀指令的控制下完成的。比如我们都知道一句俗话“三下五除二”,其实就来自一句珠算加法口诀。它的意思是说,用算盘加3,可以先把算盘上面代表5的珠子落下来,再从下面扣除2个珠子,其实就是把3=5–2这个数学公式程序化了。其他的珠算口诀也是类似的程序。有了这些程序,操作算盘的人就不需要熟悉数学,只要背下这些口诀,操作的时候别拨错珠子即可。这就是中国算盘和之前的算盘最大的不同之处,也是中国的算盘能够被看作计算机的原因。
▲图9.1 计数功能的罗马算盘
▲图9.2 中国算盘,配合珠算口诀使用
当然,中国算盘也有不少缺陷,比如要求使用者必须熟记上百条四则运算的口诀,另外拨打的过程完全是手工操作,所以很难避免由于疏忽而产生的错误。万一不小心拨错了一颗珠子,出了差错可是很麻烦,因此打算盘的人通常至少要打两遍。过去一些会计有时会因为两分钱对不上账,要来回打一晚上算盘。算盘作为计算工具还有一个更深层的缺陷,就是它难以采用机械动力,只能使用人作为动力,这最终会限制它的运算速度。
为了解决自动计算的难题,人们需要设计一种能够通过机械传动完成计算的机器,即机械计算机,有时也被称为机械计算器。第一个用机器实现简单计算功能的是法国著名的数学家帕斯卡(Blaise Pascal,1623—1662),1642年,他发明了帕斯卡计算器(见图9.3)。
▲图9.3 硅谷计算机博物馆中帕斯卡计算器的复制品
帕斯卡计算器的原理很简单,它由上下两组齿轮组成,每一组齿轮可以代表一个十进制的数字,在齿轮组外面有对应的一排小窗口,每个窗口里有刻了数字0~9的转轮,用来显示计算结果。该计算器的动力来自一个手工的摇柄。
帕斯卡计算器的原理并不复杂,比如我们要做加法运算24+17,就把第一组最后两个齿轮(分别代表十位数和个位数)分别拨到2和4的位置,在第二组齿轮上,类似地将最后两个齿轮分别设置到1和7的位置,然后转动手柄直到转不动为止。在这个过程中,齿轮带动有数字的小转轮运转,最后停到应该停的位置,这时计算结果就出现在计算器上方的小窗口里。类似地,帕斯卡计算器还可以做减法,并且可以通过重复加法或减法来做乘法和除法。
帕斯卡计算器操作很简单,但不可能算得很快,操作者要先把每个齿轮的计数清零,然后仔细地将齿轮的位置拨到运算数字对应的位置,这个速度甚至比算盘还要慢很多。不过即便如此,帕斯卡计算器也是一个巨大的进步,因为计算是自动的。依靠齿轮的设计,只要输入的数字正确,答案就错不了。帕斯卡机械计算器,以及后来的各种机械计算器还有一个算盘所没有的优点,就是它们由机械动力来驱动,这就为未来的计算机进行连续运算提供了可能性。
第二个对机械计算机做出重大贡献的科学家是德国数学家莱布尼茨。今天很多人知道莱布尼茨,是因为他发明了计算机所用的二进制,而且发明过程是受到了中国八卦的启发。当然,八卦并不是二进制,因为作为数学的一种进制,有严格的要求,比如要有一套计算规则,要有零元素和一元素等,这些与八卦并不符合。
莱布尼茨在机械计算机上的直接贡献有两个。首先,为了改进帕斯卡计算器,1671年,莱布尼茨发明了一种能够直接执行四则运算的机器(在之前加法和减法的基础上,实现了直接运算乘法和除法),并在此后数年不断改进。其次,他在研制机械计算机时,还发明了一种转轮——莱布尼茨轮,可以很好地解决进位问题。在随后的三个世纪里,各种机械计算器都要用到莱布尼茨轮。
当然,莱布尼茨对计算机技术的最大贡献不在于改进了帕斯卡计算器,而是在1679年发明了二进制。不过,他发明二进制不是为了改进计算机,而是出于哲学和宗教目的,所以莱布尼茨并没有把二进制和计算机结合在一起,甚至没有看到它们之间的相关性。因此,二进制在发明后长达两个半世纪的时间里没有发挥什么作用。
当机械计算机可以完成四则运算后,数学家开始考虑如何设计能够计算微积分的计算机。直到19世纪英国著名数学家巴贝奇设计出差分机(difference engine),才解决了这个问题。1823年,英国政府出资让巴贝奇制造差分机。但是由于这个机器太复杂,里面有包括上万个齿轮在内的2.5万个零件,当时的工艺水平根本无法制造。直到1832年,巴贝奇用了近10年的时间,仅造出一台小型的工作模型(只完成整体设计的1/7),该项目后来也被暂停。
▲图9.4 内部机构非常复杂的巴贝奇差分机复制品,现收藏于硅谷的计算机博物馆
巴贝奇用了一辈子时间也没有能造出差分机。不过他的设计后来被证明是正确的。1840年,英国发明家舒茨(Georg Scheutz,1785—1873)制造出世界上第一台可以工作的差分机。
巴贝奇的困境说明,到19世纪末,机械思维就快走到尽头。当时人们需要解决的问题越来越复杂,相应的机械也越做越复杂,因此对于计算机这样超级复杂的设备,需要在设计思想上有所突破。最初实现将计算的设计和制造简单化的,是德国的工程师楚泽(Konrad Zuse,1910—1995)。