机电计算时代
# 机电计算时代
- 1 -
机电时期是机械与电子之间一段狭小的过渡时期,时间虽短,却取得了质跃式的显著成就。
这一时期的机器不再局限于单纯的数学运算,开始具备更丰富的功能。它们有着五花八门的构造,并在专用和通用之间来回游走,却都不约而同渐渐朝着现代计算机的模样靠拢。
随着穿孔时代的开启,“新秀”二进制开始挑战十进制的“权威”,我们在祖思机、贝尔机和哈佛机上一步步领略过它的魅力。二进制在计算中的应用,既是布尔代数计算理论的探索成果,也是穿孔技术和开关电路在硬件上的“倒逼”使然。
比起追逐可靠性的机械时期,恰逢现代化战争伊始的机电时期将计算速度视为更重要的指标,这一需求敦促着先驱者们不断尝试新的材料和技术,为电子时期的到来埋下了伏笔。
- 2 -
在上一章,作者有意识地使用“计算器”(calculator)统称机械时期的计算设备,而从本章开始则使用“计算机”(computer)。和计算器不同,计算机有着更高的自动化程度。
单词computer最早出现于1613年英国作家理查德·布雷斯韦特(Richard Braithwait)的一本书中,指的不是机器,而是“负责计算的人”,即计算员。直到1897年,computer才有了“计算机器”的意思。在此之前,computer是一种地位不高的职业,往往由作为廉价劳动力的妇女或失业者从事,他们不需要有多高的文化程度,经过培训,借助机械计算器或手动计算工具帮助科学家和工程师完成一系列最基本的数学运算即可。他们和计算机一样,经过编程,按部就班地执行既定步骤。
从computer的词源来看,只有当一台机器除了运算,还能被指派运算的步骤,在一定程度上具有取代计算员的能力时,才有了被称为“计算机”的资格。
发明计算器时,人类将运算的能力交给机器;发明计算机时,人类将组织运算的能力交给机器。计算机的发展史,就是人类一步步将智慧交给机器的过程。
机电时期是人类社会从计算器时代步入计算机时代的关键拐点,本章的几位人物都是名副其实的计算机先驱。在IEEE计算机先驱奖的第一批获奖者中,祖思、斯蒂比茨和艾肯悉数在列。
- 3 -
但至此,即使通用计算机已经从巴贝奇的稿纸照进现实,人们研制机器的目的依然只限于解决目所能及的计算问题。计算机仍然只是一种工具,而没有进化为更系统的学科。但它的日益强大,终究促使一部分人开始思考:通用计算机的本质是什么?它的能力边界在哪里?
# 电的引入:令计算机费解的罪魁祸首
我们难以理解计算机,也许主要并不由于它复杂的机理,而是根本想不明白,为什么一通上电,这坨铁疙瘩就突然能飞速运转,它安安静静地到底在干些啥。
经过前几篇的探索,我们已经了解机械计算机(准确地说,我们把它们称为机械式桌面计算器)的工作方式,本质上是通过旋钮或把手带动齿轮旋转,这一过程全靠手动,肉眼就能看得一清二楚,甚至用现在的乐高积木都能实现。麻烦就麻烦在电的引入,电这样看不见摸不着的神物(当然你可以摸摸试试),正是让计算机从笨重走向传奇、从简单明了走向令人费解的关键。
1752年,以本杰明·富兰克林(Benjamin Franklin)为代表的科学家们用风筝线将闪电引到了地表,这个像神话一般的大胆实验,宣告着人类正式从造物主那里接收了这件将从根本上改变计算技术的神物。
在早期的计算设备中,电的应用主要有两大方面:一是提供动力,靠电动机(俗称马达)代替人工驱动机器运行,这一应用在部分机械计算器中已经有了预热;二是提供能力,靠一些电动器件实现运算和运算步骤的执行,这一应用则开启了机电计算的时代。
# 电动机
1820年4月,丹麦一位名为汉斯·克里斯蒂安·奥斯特(Hans Christian Ørsted)的物理学家在实验中发现通电导线会造成附近磁针的偏转,证明了电流的磁效应。
电磁继电器的组成结构和工作原理十分简单,主要部件包括:
- 电磁铁:在线圈通电时可产生电磁效应。
- 衔铁:可上下摆动的导电体。
- 弹簧:默认状态下将衔铁拉离电磁铁。
- 动触点:衔铁末端引起电路通断的金属小块,可随衔铁上下摆动,因而得名。
- 静触点:固定在动触点上下两侧的金属小块。默认状态下,上侧静触点与动触点接触,故名常闭触点,下侧静触点与动触点分离,故名常开触点。当线圈通电,电磁铁产生的电磁效应将衔铁向下吸引,动触点转而与常开触点接触,与常闭触点分离。更简易的电磁继电器也可以只有常闭触点或只有常开触点,用于控制单个电路的通断。
# 从二进制到逻辑门
二进制来自哲学,自然万物两两相对,白天与黑夜、太阳和月亮、苍天与大地、男人和女人、寒冷与炎热、甘甜和苦涩……我国传统文化中的阴阳学说、太极八卦,都是在讲这些自然的本质。
不光中国,在很久很久以前,世界各地的文明也都或多或少意识到了二进制的意义,只是除了参悟哲学道理,一直没有用到数学中去。
直到17~18世纪,数学上的二进制才由莱布尼茨首次提出。莱布尼茨首先是位伟大的哲学家,至简的理念始终贯穿在他的哲学和数学研究中。他认为,任何数字都可以在0和1的基础上产生。他对中国的哲学文化有着十分浓厚的兴趣,当了解到《易经》时,不禁感叹其中充满智慧的符号系统和他的二进制理论竟如此相仿
那么,“逢2进1”的二进制如何表示数字呢?我们知道,对于一个十进制数,从最右侧的个位开始,越往高位,数位上的数字所代表的值越大,相邻数位上相同的数字所代表的值相差10倍。比如1024中,个位上的4代表3,十位上的2代表20,千位上的1则代表1000,用数学语言表达就是:
下表罗列了部分常用的二进制数,在计算机领域,为了方便阅读和处理,常常会以4位为单位在二进制串前补零。
莱布尼茨还设想过一种可以进行二进制加法的机械计算器,这种机器需要有一排可以开闭的洞口,洞口打开表示1,洞口关闭表示0,通过往洞中扔小弹珠表示加法,每个洞中最多只能存放1颗弹珠,每满2颗它们就会一起从机器中滚出来,洞口也相应关闭,高一位洞口则打开。
# 布尔代数
莱布尼茨坚信,人类的思想和数字一样可以化繁为简——所有思想都可以分解为数量不多的简单思想。这些简单思想通过一些既定规律,可以组成任意的复杂思想,就像数学运算一样。当两个人发生了争执,他们可以把自己的观点通过数学计算的方式梳理出来,谁对谁错就一目了然了。
为了“计算”思想,莱布尼茨阐述了后来被称为合取(conjunction)、析取(disjunction)、否定(negation)等的逻辑运算规则,成为数理逻辑(mathematical logic)最早的探索者之一。
但逻辑运算在数学上的系统性定义,要等到19世纪由英国数学家乔治·布尔(George Boole)首次提出。布尔分别在1847年和1854年发表了著名的《逻辑的数学分析》和《思维规律的研究》,将数学中的代数方法引入到逻辑学中,被后人称为布尔代数(Boolean algebra),逻辑运算因而也叫布尔运算。
下面通过一个例子介绍简单一下逻辑运算,假设有X、Y两个命题。
- X:乔治·布尔发明了二进制。
- Y:乔治·布尔创立了布尔代数。
显然,X命题是错的,Y命题是对的。在逻辑学中,我们称:X命题为假,Y命题为真。如果用连词将X、Y两句话连起来说呢?
比如:乔治·布尔发明了二进制且创立了布尔代数。这句话是错的,即“X且Y”的组合命题为假。
再比如:乔治·布尔发明了二进制或创立了布尔代数。这句话是对的,即“X或Y”的组合命题为真。
这就是逻辑学中的合取与析取,也称逻辑与和逻辑或。
当然,也有对单个命题的逻辑运算,比如:乔治·布尔没有发明二进制。这句话是对的,即“非X”为真。
这就是逻辑学中的否定,也称逻辑非。
与、或、非是3种最基本、最常用的逻辑运算。将它们组合起来,还可以形成与非、或非、异或、同或等复杂逻辑运算。历史上,布尔和许多其他逻辑学家曾使用过各种层出不穷的符号来表示它们,如今,我们常用下表中的表达形式。
# 数字电路
20世纪,随着继电器电路的发展,许多科学家开始将二进制、布尔代数和电路联系到一起,最终,由美国一位名为克劳德·香农(Claude Shannon)的数学家做出了完整阐释。1938年,就读于麻省理工学院的香农发表了他那篇著名的硕士论文《继电器与开关电路的符号分析》,奠定了数字电路的理论基础。
# 逻辑门
逻辑电路发展成熟后,工程师们更多地把它们作为一种电路中的元器件(而不是电路本身)使用。他们不关心这些元器件的内部实现,更关注当代表0或1的信号从它们的输入端进去,从输出端出来的是0还是1。这种通过逻辑电路实现二进制信号转换的元器件称为逻辑门(logic gate),门的概念很形象,二进制数据可以从门通过,也可能被门挡住,庞杂的计算机电路正是靠着一扇扇这样的门组合而成的。下图为IEEE和IEC ^[2]^ 标准中规定的逻辑门符号,统一的矩形表示更有利于绘制复杂的集成电路,信号从矩形左侧进入,从矩形右侧输出。
# 组合逻辑电路
逻辑门像一块块标准化的积木,我们可以用这些积木灵活地搭建出实现各种功能的组合逻辑电路。举个最简单的例子——二进制加法器。要实现两个二进制数的相加,首先要实现单个数位的两两相加。用A和B表示两个二进制数某一位上的值,表示来自低位的进位值,S和
表示
之后该位的值和向高位产生的进位值,得单数位的加法真值表:
# 制表机:穿孔时代的到来
从1790年开始,美国每十年进行一次人口普查。百年间,随着人口繁衍和移民的增多,从1790年的400万不到,到1880年的5000多万,人口总数呈爆炸式地增长。
不像现在这个的互联网时代,人一出生,各种信息就已经电子化、登记好了,甚至还能数据挖掘,你无法想象,在那个计算设备简陋得基本只能靠手摇进行四则运算的19世纪,千万级的人口统计就已经成了当时政府的“不能承受之重”。1880年开始的第10次人口普查,历时8年才最终完成,也就是说,他们在休息两年之后就要开始第11次普查了,而这一次普查,需要的时间恐怕要超过10年,那第12次、13次呢?本来就是10年一次的统计,如果每次耗时都在10年以上,这件事情就变得没有意义了。
这可愁煞了当时的人口调查办公室,他们决定面向全社会招标,寻求能减轻手工劳动、提高统计效率的发明。正所谓机会都是给有准备的人的,一位毕业于哥伦比亚大学的年轻人赫尔曼·霍尔瑞斯(Herman Hollerith)带着他在1884年申请的专利从众多方案中脱颖而出。
他发明的机器叫制表机(tabulator/tabulating machine),顾名思义,就是专门用来制作数据统计表的机器。制表机主要由示数装置、穿孔机、读卡装置和分类箱组成。
示数装置包含4行、10列共40个示数表盘,每个盘面被均匀地分成100格,并装有两根指针,和钟表十分相像,“分针”转一圈可计100,“时针”转一圈则计10000。可见,整个示数装置可以表达很庞大的数据。
# 穿孔卡片的应用
此前的某一天,霍尔瑞斯正在火车站排队检票,目光不经意落到检票员手中咔咔直响的打孔机上。他发现,检票员会特意根据乘客的性别和年龄段,在车票的不同地方打孔。越来越多的人过检,他进一步确认了这个规律。一个灵感朝他袭来:如果有一张更大的卡,上面有更多的位置可以打孔,就可以用来表示更多的身份信息,包括国籍、人种、性别、生日等等。
这就是用在1890年人口普查中的穿孔卡片,一张卡片记录一个居民的信息。卡片设计长约18.73cm,宽约8.26cm,正好是当时一张美元纸币的尺寸,因为霍尔瑞斯直接用财政部装钱的盒子来装卡片。
卡片设有300多个孔位,与雅卡尔和巴贝奇的做法一样,靠每个孔位打孔与否来表示信息。尽管这种形式颇有几分二进制的意味,但当时的设计还远不够成熟,并没有用到二进制真正的价值。举个例子,我们现在一般用1位数据就可以表示性别,比如1表示男性,0表示女性,而霍尔瑞斯在卡片上用了两个孔位,表示男性就其中一处打孔,表示女性就在另一处打孔。其实性别还凑合,表示日期时浪费得就多了,12个月需要12个孔位,而常规的二进制编码只需要4位。当然,这样的局限也与制表机中简单的电路实现有关。
细心的读者可能发现卡片的右下角被切掉了,那不是残缺,而是为了避免放反而专门设计的,和现在的二维码只有3个角是一个道理。
这类实用的细节设计在穿孔机上表现得更为出色。下图为一位操作员正在使用穿孔机给卡片打孔的情景,她并不需要在卡片上吃力地搜寻孔位,而是直接对着孔距更大的操作面板打孔,一根杠杆将两者的孔位一一对应。操作面板还做成了弧形,颇有一分如今人体工程学键盘的风姿。
# 统计原理
打好了孔,下一步就是将卡片上的信息统计起来。读卡装置的组成如下图所示,其外形和使用方式有点类似现在的重型订书机,将卡片置于压板和底座之间,按压手柄,就完成了对这张卡片的信息读取。
原理上,通过电路通断识别卡上信息。底座中内嵌着诸多管状容器,位置与卡片孔位一一对应,容器里盛有水银,水银与导线相连。底座上方的压板中嵌着诸多金属针,同样与孔位一一对应,针的上部抵着弹簧,可以伸缩,压板的上下面由导电材料制成。这样,当把卡片放在底座上,按下压板时,卡片有孔的地方,针可以通过,与水银接触,电路接通,没孔的地方,针就被挡住。
这一基本原理与雅卡尔提花机类似,不难理解。重头戏是,如何将电路通断对应到所需要的统计信息呢?霍尔瑞斯在专利中给出了一个简单的例子,如下图所示。这是涉及性别、国籍和人种3项信息的统计电路图,虚线为控制电路,实线为工作电路。
# 祖思机:第一台二进制可编程计算机 - 简书
巴贝奇领先全人类一个世纪提出了可编程机械计算机的设想,但最终没能将其转换为现实——分析机的建造甚至迄今都没有人能完成。历史翘首期盼了百年,却在纳粹德国见证了第一台可编程计算机的诞生。
它的发明者——康拉德·祖思(Konrad Zuse)虽不为人所熟知,却是名副其实的“现代计算机之父”。
祖思出生于柏林,从小聪慧过人,长大后进入世界顶尖学府——柏林工业大学学习工程学和建筑学,不久后又转读土木工程。1935年毕业后,在福特汽车公司工作不久后跳槽至另一家交通行业的巨头——亨舍尔。亨舍尔公司从1933年开始建造军用飞机,祖思负责飞机在飞行过程中的受力分析,要解各种各样的微分方程。这份在外人眼中的高智商工作,在祖思看来却无异于体力劳动,他被大量的重复运算损耗着精力,无暇顾及更有价值的创造性设计。尽管办公桌上配有一台当时先进的手摇计算器,但他仍然觉得很不方便。
1936年,祖思便辞职回家,决定建造一台更便捷的计算机器。他的父母十分开明,把整个客厅腾出来作为他的工作室。
# Z1
1938年,第一台祖思机——Z1建造完成。这是一台纯机械的机器,由成千上万的金属片和金属杆组成,靠电动马达驱动运转。Z1从未投入实际使用,并连同图纸毁于1944年1月30日的一场空袭。
1987~1989年,在西门子公司的资助下,祖思在欣费尔德的家中重建了Z1。移交柏林德国技术博物馆时,为了顺利起吊这组重达1吨的精密钢铁,祖思家里的墙面都被拆除了一部分。下图为德国技术博物馆展厅中的Z1,后人对Z1的了解基本源自这台复制品。
# 工作原理
与以往靠齿轮实现计算的机械设备大不相同,Z1是二进制的。从机身侧视,可以看到下层一列列整齐的金属杆支撑着上层一叠叠整齐的金属片,像极了建筑工地上正在打地基的楼房胚子。
其实,早在1937年,祖思就已经着手开展了真空电子管的研究。他的搭档赫尔穆特·施赖尔(Helmut Schreyer)也在很早就提出了建造电子计算机的建议,但这个设想在当时的人们眼中简直是天方夜谭。当时的电子设备顶多使用少量的真空管,了解真空管可靠性的行家都清楚地知道,需要成千上万个真空管组成的计算机根本不可能正常运行。就连祖思在一开始也不相信真空管能建造计算机。在施赖尔的坚持下,他们向政府提出了将Z3全面电子化的建议,但政府没有意识到这件事的重大意义,而是在权衡利弊之后,认为机电计算机已经够用了,进一步尝试真空管对战争的意义不大。
于是,祖思的第4台机器——Z4仍然是机电结构的,纳粹德国错过了一次改写历史的机会。
Z4是Z1~Z3的集大成者,是研制时间最长的一型,也是唯一在战争中幸存的一型。1945年,二战已近尾声,2月3日的一场轰炸摧毁了祖思的生产车间,祖思不得不将未完成的Z4从柏林紧急转移至哥廷根。战后的德国元气大伤,直到1949年祖思才得以恢复Z4的工作。1950年7月12日,苏黎世联邦理工学院买下了Z4用于数学和工程研究,Z4成为历史上第二台商业计算机 ^[1]^ ,同时也是当时欧洲大陆唯一在役的计算机。
如今,Z4藏于德意志博物馆。它用回了机械存储器,字长扩展到32位,除了四则运算和开平方,还多了求最大、最小值和计算正弦的功能。它弥补了Z3的缺憾,装备了两台穿孔带读取器以实现条件分支(一台读取主程序、一台读取子程序)(原设计中,甚至计划配备6台穿孔带读取器)。它的输出也更多样化,可以打印,也可以(在胶卷上)打孔。
# 贝尔机:带你领略编码的魅力
当祖思凭一己之力开启德国现代计算机的历史,大西洋彼岸的美国也毫不示弱地完成了本土的设备升级。和前者的孤军奋战不同,后者主体是上世纪叱咤风云的贝尔实验室。
众所周知,贝尔实验室及其所属公司是做电话起家、以通信为主要业务的,虽然也做基础研究,但为什么会涉足计算机领域呢?其实跟他们的老本行不无关系——最早的电话系统是靠模拟量传输信号的,信号随距离衰减,长距离通话需要用到滤波器和放大器以保证信号的纯度和强度,设计这两样设备时需要处理信号的振幅和相位,工程师们用复数表示它们——两个信号的叠加是两者振幅和相位的分别叠加,复数的运算法则正好与之相符。这就是一切的起因,贝尔实验室所面临的大量的复数运算,全是简单的加减乘除,工程师们不堪重负,并开始雇佣文化程度不高的妇女(当时的廉价劳力)全职辅助计算。
从结果来看,贝尔实验室发明计算机,一方面是源于自身需求,另一方面也从自身技术上得到了启发。电话的拨号系统由继电器电路实现,通过一组继电器的开闭决定谁与谁进行通话。当时实验室研究数学的人对继电器并不熟悉,而继电器工程师又对复数运算不尽了解,将两者联系到一起的,是一名叫乔治·斯蒂比茨(George Stibitz)的研究员。
# Model K
斯蒂比茨毕业于康奈尔大学数学物理专业,1930~1941年就职于贝尔实验室。1937年的某一天,他觉察到继电器的开闭状态与二进制之间的联系。他找来两节电池、两个继电器和两个小灯泡,然后从易拉罐上剪下一个U形触片,用电线把它们连成了一个最简单的二进制加法电路。
# Model I
1939年,斯蒂比茨带领贝尔实验室的团队仅花了6个月就完成了专门用于进行复数运算的复数计算机(Complex Number Computer),后人也称之为Model I。Model I只支持复数的乘除运算,而没有实现最基本的加减,因为贝尔实验室认为加减法足够简单,只需要口算就够了,再不济也可以直接使用现成的机械计算器。不过后来他们惊喜地发现,只要不清空前一个数,在此基础上把新的数和1(或-1)相乘,就相当于与前一个数求和(或求差)。
# 客户端/服务器架构
除了编码,Model I的另一大亮点是它首次采用了操作终端和后台计算明确分离的架构,用现在的行话讲,就是C/S(客户端/服务器)架构。
斯蒂比茨为Model I配备了3台操作终端,用户在任意一台终端上键入要算的式子,后台将收到相应信号并在解算之后传回结果,由集成在终端上的打字机打印输出。只是这3台终端并不能同时使用,像电话一样,只要有一台“占线”,另两台就会收到忙音提示。
# 哈佛机:体验一把穿孔纸带上的编程
稍晚些时候,踏足机电计算领域的还有哈佛大学。当时,一名在校的物理学博士生——霍华德·艾肯(Howard Hathaway Aiken),和当年的祖思一样,被手头繁复的计算困扰着,一心想建台计算机,于是从1937年开始,抱着方案四处寻找愿意合作的公司,最终是IBM伸出了橄榄枝。
彼时的IBM,已是单元记录市场的巨头企业,拥有丰富的计算设备建造经验。而除了其主营的制表机型,当时的总裁托马斯·沃森(Thomas John Watson)对尝试通用计算机也颇有兴趣。
艾肯想实现自己的理想,沃森想进一步提高公司的声誉,两人一拍即合。1939年3月31日,哈佛和IBM签订协议,哈佛方面由艾肯主导设计,IBM方面则派出顶尖的工程师团队负责实现,最终成果归哈佛所有。
IBM斥资40~50万美元,却甘愿把成果拱手相让,正是因为沃森不在乎钱也不准备打造产品,而纯粹是为了彰显公司的实力。照理说,哈佛和IBM的贡献是对等的。不料,在机器建好之后的庆典上,哈佛新闻办公室与艾肯私自准备的新闻稿中,严重偏袒了己方的功绩,对IBM的功劳没有给予足够的认可,把沃森气得与艾肯老死不相往来。
这台强强联合、于1944年完成的计算机名叫Harvard Mark I,在“娘家”IBM被称为IBM自动顺序控制计算机(IBM Automatic Sequence Controlled Calculator),ASCC。