跟陶叔学编程

提升思维层次

导读

书接上回:一篇读罢头飞雪:计算机发展时间线(上)| 跟陶叔学编程。欢迎来到20世纪,这是一个悲伤的世纪,发生了两场世界大战。这又是一个充满激情与创意的世纪,我们熟悉的各种科学理论与科技产品纷纷出现,二进制运算、量子力学、电子管、晶体管……奇思妙想不断闪耀光芒。这还是一个英雄辈出的时代,范内瓦、图灵、香农、冯·诺依曼……正排着队向我们走来。这更是一个技术门派不断兴替的江湖,机械派、机电派、电子派……你方唱罢我登台。江湖为什么精彩?因为江湖中有英雄,有起伏跌宕的人生,有数不尽的传说!

第一回 马可尼跨洋发 ,电子管上台鞠躬

20世纪

  1900年,奥德纳算术仪的销量超过了托马斯算术仪。至奥德纳的工厂于1918年关闭,30年不到的时间里它生产了约23000台机器。

  1901年,意大利发明家伽利尔摩·马可尼(Guglielmo Marconi,1874年4月25日—1937年7月20日)发射的无线电信息成功地穿越大西洋,从英格兰传到加拿大的纽芬兰省。

1901年,马可尼演示无线电设备

  这次表演是无线电从实验室走向商业化的标志性事件,也是马可尼为自己的无线电公司打的一个非常成功的广告。从此,他的“马可尼无线电 公司”一鸣惊人,赚得盆满钵满。但是马可尼此时接收无线电使用的检波器是十分落后的“金属屑”检波器(检波是调幅的逆过程,其频谱搬移与调幅相反,即把调幅波的频谱由高频不失真地搬到低频),性能很差亟需改进。

金属屑检波器

  1904年,英国物理学家约翰·安布罗斯·弗莱明(John Ambrose Fleming,1864年11月29日—1945年4月18日)利用爱迪生效应发明了电子管(或真空管),结构和爱迪生的灯泡类似,因为有两个电极(涌出电子的灯丝为阴极,接收电子的金属片为阳极)而被称为电子二极管(或真空二极管)。当阴极与电源负极相连、阳极与电源正极相连时,二极管导通,表现为没有电阻的导线;反之,二极管不通,表现为一个没有合上的开关。由于这样单向导通的特性,电子二极管主要用作交流电整流器(把交流电转换成直流电的装置)和无线电检波器。

弗莱明及其电子二极管

  1905年,据当时统计销轮计算器的历史总产量已有数百万台,并持续增长到70年代电子计算器普及为止。

  1906年,美国发明家李·德福雷斯特(Lee de Forest,1873年—1961年)在二极管的灯丝和金属片阴阳两极之间增加一个电极——一根波浪形的金属丝(后来金属丝被改成金属 ),称为栅极(Grid),加上原来的阴极、阳极,真空玻璃管内就有了三极。就这样他发明了电子三极管。

德福雷斯特及其三极管

德弗雷斯特惊讶地发现,波浪形金属丝装入真空管内之后,只要把一个微弱的变化电压加在它之上,就能在阳极接收到更大的变化电流,而且变化频率完全一致——德弗雷斯特发现的正是三极管的“放大”作用。但是当时的人们并没有马上认识到三极管具有的重大意义,把它当作一个“毫无价值的玻璃管”。为了证明自己的发明有用,德弗雷斯特坚持不懈地设计着各种试验。

  同年,霍尔瑞斯给制表机添加了接插线板(plugboard)——一块布满导电孔的板卡,可通过改变导线插脚在板上的位置改变线路逻辑。这是因为原来的制表机线路是固定的,遇到新的统计任务,改造起来十分麻烦。而接插线板的内部已经布好了具有各种功能的线路,但它们都处在断开状态,各自连接着接插线板上的某两个孔位,线路就被导通以后这部分功能才会运行。这是对可编程性需求的一种最低程度的支持。

接插线板

  1912年,德弗雷斯特来到加利福尼亚旧金山附近的帕洛阿托小镇。在爱默生大街913号小木屋,德弗雷斯特把若干个三极管级连起来,即上一个三极管的输出作为下一个的输入,再把电话机话筒接入第一个三极管的栅级,最后一个三极管的阳极与耳机相连。当他把自己的手表放在话筒前方时,手表的“滴哒”声几乎把戴着耳机的耳朵震聋。成功了!三极管可以用作通信中的电信号放大器。帕洛阿托市的德弗雷斯特故居,至今依然矗立着一块小小的纪念牌,以市政府名义书写着一行文字:“李·德弗雷斯特在此发现了电子管的放大作用。”用来纪念这项伟大发明为新兴电子工业所奠定的基础。这个城市,如今已成长为全球闻名的硅谷

  二极管中,与电源正负极的相连本质上造就了阴极与阳极之间的电压差,与电源正极相连总能获得更高的电压。水往低处流,电流也一样,从高压的地方流向低压,可电子却不是,它总爱从低压的地方挪向高压,因为它带负电荷,所以要跟我们的常识反着来。那么,有么有可能通过增加电源和电极,以产生更多不同的电压差,从而实现更复杂的功能呢?还真有。栅极的表现与阳极十分类似,其作用取决于它和阴极之间的电压差。当施加在栅极上的电压比阴极低时,从阴极发射的部分电子将受到阻碍而无法到达阳极,栅极上的电压比阴极低得越多,这种阻碍效应就越大,直至完全阻隔;反之,当栅极上的电压比阴极高时,它反而开始吸引电子,助阴极一臂之力将更多电子传到阳极。结果是,稍微改变一下栅极上的电压,就可以对阳极上的电压产生很大影响,因而三极管常用作无线电通信中的信号放大器。

三极管阻断(左)和导通(右)原理电路

  1912年,刚成立的门罗公司开始商业化生产鲍德温的销轮计算器。

  1913年7月,经过一番谈判,最终德福雷斯特把他的真空三极管专利以39万美元的价格卖给了美国电话电 公司(AT&T)。作为电信号放大器,三极管不管对于无线电通信还是长途有线电话通信都有极大的价值。

  1914年,菲尔特出版了一本厚达600页的专著——《Applied Mechanical Arithmetic as practised on the Comptometer》,提供了各种主流计算问题的最佳算法。菲尔特不仅开辟了按键计算器市场,还诱发了另一个配套行业的兴起——计算仪培训。由于人机交互方式从手摇到按键的根本性变革,解决计算问题的操作步骤和技巧也与以前有了很大不同。菲尔特认为,本身只提供加减功能的计算仪更像一款通用型工具,只有掌握了丰富的算法,才能应对各领域复杂的计算问题。到20年代晚期,全美一共涌现了超过百家计算仪的培训学校,加上其他国家的学校,平均每年约有2万名毕业生成为合格的计算仪操作员(comptometrist),支撑起日渐繁荣的机械计算时代。

  1914年~1918年,因为在无线电等技术中的应用,一战中西方电子公司(Western Electric,AT&T的供应商)为美军生产了50万支电子管。在1918年一年内,美国制造了100多万支电子管,这已经是战前的50多倍。

  同样在一战期间,矿石检波器在无线电接收机中也得到了大量应用。矿石检波器一般是用方铅矿或者黄铁矿来作为核心部件。找一小块矿石,然后用针扎到矿石上,矿石本身就能完成检波的作用。使用矿石检波器的无线电接收机,不需要电源就可以使用。

美军BC-14A型军用接收机,右图中心位置是矿石检波器

  实际上,矿石检波器起到的作用和真空二极管是相同的,但是内部原理和真空管完全不同。矿石检波器的好处是结构简单,使用时不需要通电也不用加热,经久耐用。但是矿石检波器的调试需要工程师不断的寻找探针接触的位置。针扎在哪里效果最好,这全靠人一点一点去测试。因此矿石检波器的品控非常难。

  矿石能起到检波的作用,这是因为它是个天然半导体。半导体是指一种导电性可控,范围从绝缘体到导体之间的材料。半导体的电导与所加电场的方向有关,即它的导电有方向性,在它两端加一个正向电压,它是导通的;如果把电压极性反过来,它就不导电,这就是半导体的整流效应。矿石检波器就是对半导体整流效应的一种简单应用。

  1924年,CTR制表机公司更名为IBM,全面进入计算机领域。

  1925年1月1日,AT&T总裁华特·基佛德(Walter Gifford)收购了西方电子公司的研究部门,成立一个叫做“贝尔电话实验室公司”的独立实体(AT&T和西方电子各拥有该公司的50%的股权)。再后来,这个公司改名为贝尔实验室。

  同年10月2日,英国发明家约翰·洛吉·贝尔德(John Logie Baird,1888年8月13日—1946年6月14日),

采用机械扫描的方法,经过上百次的反复尝试,在影像接收机中看到自己玩偶比尔的脸。

最早传输的电视图像

贝尔德的发明思路是把图片分解成无数的小点,通过改变小点的位置来改变图像,最终让图片运动起来。由于经费不足,贝尔德收集了大量破旧的零件来制造机器。他的机箱外框是盥洗盆制作的,电动机是垃圾堆捡来的,“扫描圆盆”是用马粪纸自制而成,投影灯固定用的是饼干盒子,像霓虹管、加热棒等大部分电子元件都来自 废电台。

贝尔德和他发明的半机械式电视机

  1928年,德国物理学家、量子力学创始人之一马克斯·普朗克(Max Karl Ernst Ludwig Planck,1858年4月23日—1947年10月4日,就是那个普朗克常数)在应用量子力学研究金属导电问题中,提出固体能带理论。能带论第一次科学地阐明了固体为什么可按导电能力的强弱,分为绝缘体、导体、半导体。

马克斯·普朗克

  随后在1931年,英国物理学家查尔斯·威尔逊(Charles Thomson Rees Wilson,1869年2月14日—1959年11月15日)在能带理论的基础上,提出半导体的物理模型。威尔逊模型相当完好地说明了与体内性质有关的半导体的行为特征,它奠定了半导体学科的理论基础。1939年,苏联物理学家А.С.达维多夫(А.С.Давыдов,关于达维多夫的资料太少了!)、英国物理学家内维尔·莫特(Nevill Francis Mott,1905年9月30日—1996年8月8日)、德国物理学家华特?肖特基(Walter Hermann Schottky,1886年7月23日—1976年3月4日)各自独立地提出了解释金属—半导体接触整流作用的理论。达维多夫首先认识到半导体中少数载流子的作用,而肖特基和莫特提出了著名的“扩散理论”。

  就这样,能带论、导电机理模型和扩散理论这三个相互关联逐步发展起来的半导体理论模型,大体上确立半导体器件发展的理论背景。

第二回 范内瓦模拟计算,图灵机开辟宗门

  1930年,美国麻省理工学院和哈佛大学的博士范内瓦·布什(Vannevar Bush,1890年3月11日—1974年6月26日),在一些工程技术人员的协助下,试制出一台微分分析仪的样机。

范内瓦研制计算器的初衷是为了求解与传输电路有关的微分方程。那时为了求出一个方程的解,演算工作量大得惊人,常常冥思苦想好几个月,浪费掉几百张草稿纸也得不出答案。有一天他突然冒出个想法,与其再这样因为计算耗费时间,不如制作一台计算装置帮助求解更合算。完成的微分分析仪是一台“大型”计算机器,说它是“大型机”并不为过,因为这台机器自重超过了100吨,占地约几十平方米。它与现代的计算机很不一样,它没有键盘,看起来像好多个台球桌,又有点像印刷机。装备着数百根平行的钢轴,需要用一系列电动机驱动。一个参观过微分分析仪的人曾挖苦说,必须“一手拿扳手,一手拿改锥”才能操作机器进行计算。但当时它却让麻省理工学院的科学家们兴奋不已,因为他们终于有了求解数学难题的有力武器。

  微分分析仪是第一台模拟计算器。前面介绍的计算器都是属于数字计算器(不管它是机械的,还是电子的),这条道路是由帕斯卡提出差分思想后开辟的,即将各种函数用幂级数展开方式转换为多项式,将函数运算最终变为相乘与相加。在求微积分时也是同样的思路,以差分代微分,以求和代积分,总之是以有限代无限。而模拟是用一种物理量来表征另一种物理量,就好比我们测体温的水银温度计,就是一个典型的模拟设备,温度有多高,水银高度就成比例地有多高。模拟计算器则是由想要解的方程支配的物理系统。在给出初始条件后,模拟计算器的变量随时间变化,其结果就是该方程的解。微分分析仪是用钢轴的连续转动来模拟变量的变化,从而运算得出最终结果。

  在试制出第一台样机后,范内瓦又采用电子元件来取代某些机械零件,成为“洛克菲勒微分分析仪2号”。但总的来说它仍然是一台机械式的计算装置。这种机器至少被人仿造出5台,在第二次世界大战中,美军曾广泛用它来计算弹道射击表。而英国也用它来计算德军V-2导弹的弹道表,发挥了重要的作用。现今在麻省理工学院和伦敦博物馆里,还各收藏着一台不太完整的这种机器,但都已不能正常运转了。

  1931年,IBM推出IBM 601机。这是一台能在一秒钟算出乘法的穿孔卡片计算器。这台机器无论在自然科学还是在商业意义上都具有重要的地位。大约造了1500台。

  1936年,英国数学家阿兰·图灵(Alan Turing,1912年—1954年),发表了在计算机发展历史上影响深远的论文《论可计算数及其在判定问题中的应用》,提出了使其成为“计算机科学之父”的图灵机。

  逻辑结构上图灵机由四个部分组成:

  1. 一个无限长的存储带。带子由一个个连续的存储格子组成,每个格子可以存储一个数字或符号
  2. 一个读写头。读写头可以在存储带上左右移动,并可以读、修改存储格上的数字或符号
  3. 内部状态存储器。该存储器可以记录图灵机的当前状态,并且有一种特殊状态为停机状态
  4. 控制程序指令。指令可以根据当前状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作(左移还是右移),并改变状态存储器的值,令机器进入一个新的状态或保持状态不变。

  或者可以将图灵机总结为四大集合,即:输入集合、输出集合、内部状态集合和程序指令集合。

  图灵机提供了一个这样的解决问题的思路:问题从简单到复杂,都可以通过分别增加机器4个部分的丰富程度来解决——存储带符号类型更多,读写头输出符号类型更多,状态存储器状态更多,控制程序指令组合更多。我们根据要解决的不同问题可以设计出具有各种功能的图灵机,其中控制程序指令组合实质就是编程。图灵想到,如果把控制程序指令组合信息(可以称为策略)以统一的格式写成符号串,放在纸带的头部,再将图灵机设计成能在运行开始时从纸带上读取这些策略(也就是通过第1和第2部分的操作,对第3和第4部分进行初始化),那么针对不同的任务,就不需要设计不同的图灵机,而只需改变纸带头部的策略即可。这种能靠纸带制定策略的图灵机,称为通用图灵机UTM(universal Turing machine)。如今的所有通用计算机都是图灵机的一种实现,两者的能力是等价的。当一个计算系统可以模拟任意图灵机时,我们称其是图灵完备的(Turing complete);当一个图灵完备的系统可以被图灵机模拟时,我们称其是图灵等效的(Turing equivalent)。图灵完备和图灵等效成为衡量计算机和编程语言能力的基础指标。如今几乎所有的编程语言都是图灵完备的,这意味着它们可以相互取代,一种语言能写出的程序用另一种也照样可以实现。

  图灵这篇论文的本意是提出一个模型来解答数学上的判定问题。判定问题是数理逻辑中的一个重要问题。它表现为寻求一种可行的方法、一种机械的程序或者算法,从而能够对某类问题中的任何一个在有穷步骤内确定是否具有某一特定的性质。图灵在论文中证明了没有任何机器可以解决所有数学问题(图灵机存在“停机问题”无法从根本上解决),却同时也证明了机器可以完成所有人类能完成的计算工作。图灵首次阐明了现代计算机原理,从理论上证明了现代通用计算机存在的可能性。图灵回答了判定问题,更参透了数学和计算机的本质关系——计算机是为解决数学问题而诞生的,却又基于数学,因而数学自身的边界也框定了计算机的能力范围。从图灵开始,计算机有了真正坚实的理论基础,更多人开始投身计算机的理论研究,而不仅是尝试构建一台机器。从如今的应用来看,图灵机之于计算机领域的价值远高于数学领域,毕竟判定问题还有许多其它解答,但计算机的原始公式,只有图灵机这一个。(数学才是数学家真正追求的快乐,计算机只是他们的副产品!)

  同年,德国工程师康拉德·祖思(Konrad Zuse,1910-1995)从建造军用飞机的亨舍尔公司辞职。

因为祖思负责飞机在飞行过程中的受力分析,要解各种各样的微分方程。这份在外人眼中的高智商工作,在祖思看来却无异于体力劳动,他被大量的重复运算损耗着精力,无暇顾及更有价值的创造性设计。尽管办公桌上配有一台当时先进的手摇计算器,但他仍然觉得很不方便。他决定建造一台更便捷的计算机器。他的父母十分开明,把整个客厅腾出来作为他的工作室。

  同年,苏联科学家Vladimir Lukyanov打造了液压积分器(Hydraulic Integrator)的第一台原型机。制造它的目的是为了研究和计算铁路桥梁的混凝土,在不同温度下开裂的相关数据。它是世界上第一台可以求解偏微分方程的计算器,它更大的独特之处是用水作为计算载体:水箱中液位高度代表数据。若干水箱间用各种水管连接,不同的水管出水的压力不同,再用它们作为变量实现运算。不同于别的计算机叫做电脑,它被称为“水脑”。从原理可以得知,这是一种机械式模拟计算设备。

现存于莫斯科理工博物馆的液压积分器

在此基础上,1941年,Lukyanov又采用模块化的设计理念,对其进行改进,甚至五十年代还进行了量产。直到70年代,这种计算器依然在苏联的115个工厂、研究院所服役,后逐渐被数字电子计算机所取代。

第三回 Model K二制运算,香农爷理论奠基

  1937年的某一天,贝尔实验室研究员乔治·斯蒂比茨(George Robert Stibitz,1904年—1995年),

他觉察到继电器的开闭状态与二进制之间的联系。于是他找来两节电池、两个继电器和两个小灯泡,然后从易拉罐上剪下一个U形触片,用电线把它们连成了一个最简单的二进制加法电路。

实现的效果是:按下触片B,灯泡L2亮;按下触片A,灯泡L2亮;同时按下A和B,灯泡L1亮(进位)。所实现的加法逻辑如下:

因为是在厨房(kitchen)里搭建的模型,斯蒂比兹的妻子称之为Model K。Model K看似简单,却为斯蒂比茨验证了制造二进制计算机的可行性。

  从结果来看,贝尔实验室产生用继电器实现二进制运算的技术,是源于他们长期使用继电器的经验和对复数运算的需要。电话的拨号系统由继电器电路实现,通过一组继电器的开闭决定谁与谁进行通话。同时,最早的电话系统是靠模拟量传输信号的,信号随距离衰减,长距离通话需要用到滤波器和放大器以保证信号的纯度和强度。设计这两样设备时需要处理信号的振幅和相位,两个信号的叠加是两者振幅和相位的分别叠加,复数的运算法则正好与之相符。贝尔实验室面临大量的复数运算,全是简单的加减乘除,工程师们不堪重负,并开始雇佣文化程度不高的妇女(当时的廉价劳力)全职辅助计算。当时研究数学的人对继电器不熟悉,而一般在工作中使用继电器的工程师又对复数运算不尽了解,而斯蒂比茨正好是将两者联系到一起那个人。

  随后的夜晚,斯蒂比茨对这个简单的一位加法器进行改进与扩充,使之能完成其他运算。在初步设计完成以后,他把装在胶合板上的这台“样机”带到实验室表演给数学部主任桑顿·弗雷(Thornton C. Fry)演示。弗雷开始时对斯蒂比茨的这一创新并没有太重视。

  同年,一名哈佛大学在校的物理学博士生——霍华德·艾肯(Howard Hathaway Aiken,1900年—1973年)受困于自己的博士论文。

因为博士论文涉及空间电荷传导理论,需要计算非常复杂的非线性微分方程。艾肯在图书馆里发现了巴贝奇和艾达的论文,他产生了发明一种机器代替人工计算,用来解决数学难题的想法。艾肯准备好了一份可行性 告,四处寻找愿意合作的公司。他曾找到生产销轮计算器的门罗公司,但是没有谈成。

  1938年,第一台祖思机——Z1建造完成。这是一台纯机械的机器,由成千上万的金属片和金属杆组成,靠电动马达驱动运转。与以往靠齿轮实现计算的机械设备大不相同,Z1利用了布尔代数的原理,是第一台完全采用二进制运算方式的可编程计算机。Z1从未投入实际使用,并连同图纸毁于1944年1月30日的一场空袭。

Z1的珍贵照片

  1987年~1989年,在西门子公司的资助下,祖思重建了Z1并移交柏林德国技术博物馆。后人对Z1的了解基本源自这台复制品。可惜的是,尽管祖思的设计看起来精致而优雅,然而不论是1938年的Z1还是1989年的复制品都无法顺利运行。

位于德国技术博物馆的Z1复制品

  Z1在组成上已初具现代计算机的特点,主要包括控制器、存储器、运算器、输入设备(穿孔带读取器和十进制输入面板)和输出设备(十进制输出面板)5大部分。Z1计算机最大的贡献是第一次采用了二进制数。从机身侧视,可以看到下层一列列整齐的金属杆支撑着上层一叠叠整齐的金属片。靠金属片和金属杆在水平面内4个方向(前后左右)移动,它们相互作用就可以完成二进制计算。在薄钢板组装的存储器中,楚泽用一个在细孔中移动的针,指明数字“0”或“1”。他的这种选择,明显地受到莱布尼茨著作的启发,他后来发表的研究 告,副题就是“向莱布尼茨致敬”。和制表机一样,Z1也用到了穿孔技术,不过不是穿孔卡片,而是穿孔带,由35毫米电影胶卷制成。数据则由一个数字键盘敲入,计算结果用小电灯泡显示。

  Z1是世界上第一台二进制可编程计算机,其设计是极富开创性的,其中许多理念都被现代计算机所沿用:

  • 基于完全的二进制架构实现内存和处理器,引入了实现二进制计算的基本要素——逻辑门。为了用二进制数表示小数,引入浮点数表示法,如今已被纳入IEEE标准。
  • 将数据存储和指令处理分开,这正是现代计算机的做法。在复制品中,机器大约一半由内存和穿孔带读取器构成。另一半由处理器、I/O控制台和微控制单元构成。
  • 可编程:拥有由8条指令组成的指令集(四则运算、内存读/写、从十进制面板读入数据、将结果寄存器里的内容显示到十进制展板)。具体编程操作是用穿孔带记录8比特长的代码后传入机器(穿孔带只存储指令,数据通过按键面板输入)。代码的组成方式为两种:一是2位表示内存读写操作码、6位表示内存地址,二是以3位表示四则运算和I/O操作的操作码)。
  • 有了明确的机器周期概念。操作被分解成一系列微指令,一个机器周期一条微指令。
  • 从架构上看,我们今天的计算机进与1938年的祖思机一致,反而与1945年的ENIAC不同。直到后来的EDVAC 告草案,以及冯·诺依曼和图灵开发的位串行机中,才为ENIAC引进了更优雅的体系结构。

      同年,由于贝尔实验室计算任务压力的增大,有人建议把台式机械计算器的轴连在一起以加快计算。这从理论上来说虽然是可行的,但实现起来很复杂,操作也麻烦。弗雷这时想起斯蒂比茨的发明,问他能不能用他的发明解决复数计算问题。斯蒂比茨这时已成竹在胸,当即接受了任务。在实验室另一位工程师塞缪尔·威廉姆斯(Samuel Williams)的协助下,新型计算机的研制工作开始了。

      同年,麻省理工学院就读的克劳福德·香农(Claude Elwood Shannon ,1916年4月30日—2001年2月24日,这是祖师爷要拜拜)完成了自己的“硕士毕业论文”《继电器和开关电路的符号分析》,在这篇论文中,香农首次用布尔代数对开关电路进行了相关的分析,并证明了可以通过继电器电路来实现布尔代数的逻辑运算,从而奠定了数字电路的理论基础。同时明确地给出了实现加,减,乘,除等运算的电子电路的设计方法。香农在MIT就读期间,他的老师中有一位就是范内瓦·布什。

    祖师爷之凝视

      香农完成论文之后曾去贝尔实验室与斯蒂比茨交流彼此的研究成果。但香农并未参与到斯蒂比茨的计算机开发工作之中。在30年代末期,使用继电器实现二进制逻辑是一种普遍共识,同时期在日本也有类似的发现。

      同年,图灵在取得美国普林斯顿大学博士学位后返回了正在紧张备战的英国。不久,他便秘密参与到政府的密码破译项目中,和全国各地顶尖的数学家们一起,在白金汉郡的布莱切利公馆(Bletchley Park)中深居简出,左右世界战争的格局。二战时期,各国已经使用无线电进行作战指挥,由于信号可以轻易被敌国接收,需要对无线电内容进行加密。当时的德国使用一种叫谜机(Enigma machine)的加密机器,按下某个字母的按键,其加密后对应的字母小灯就会亮起。内部的转轮和接插线板将这种对应关系随意打乱,每按一次按键,转轮就会转动一次,组合成新的对应关系,比如第一次按下A,D灯亮起,再按一次A,亮起的可能是Z灯,毫无规律可循。更棘手的是,德军几乎每天都会变更其中的接线。

    3转轮谜机

    解密的方式是穷举,即遍历所有可能的对应关系,直到找出有意义的关键词,而这恰恰是机器最擅长的事。英国的同盟国波兰在战前就成功研制了破解谜机的炸弹机(bomba),可惜德国在1938年年底将谜机上的转轮从3个增加到了5个,解密的复杂度呈爆炸式增长,针对3转轮谜机设计的炸弹机还未在二战发挥价值就已经宣告 废。

      解决这个难题的关键人物正是图灵,新建的炸弹机(bombe)成功破解了5转轮谜机。其难度之大,大到英国首次利用破解的信息破坏德军行动时,德国的密码专家首先排除了谜机被破解的可能性。

    图灵炸弹机

    随后,对密码学有着深刻认识的图灵还探索出一种高效的解密算法,人称图灵方法(Turingery),该算法成为布莱切利破解德国密码的核心理论。布莱切利的工作是图灵在短暂的一生中,为人类所做的第二项伟大贡献。他的成果使战争至少提前2年结束,挽救了至少1400万人的生命。前英国首相温斯顿·丘吉尔曾表示,二战的胜利最该感谢的人就是图灵。这段故事被改编成电影《模仿游戏》(The Imitation Game),由两个“大长脸”本尼迪克特和凯拉主演,并在奥斯卡获奖。

    第四回 师徒首用电子管,维纳提出五原则

      1939年10月,斯蒂比茨带领贝尔实验室的团队完成了专门用于进行复数运算的复数计算器,后人也称之为Model I。它是世界上最早的电磁式计算器,使用继电器组成的运算单元。Model I只支持复数的乘除运算,而没有实现最基本的加减,因为贝尔实验室认为加减法足够简单,只需要口算就够了,再不济也可以直接使用现成的机械计算器。不过后来他们惊喜地发现,只要不清空前一个数,在此基础上把新的数和1(或-1)相乘,就相当于与前一个数求和(或求差)。Model I进行一次复数乘法用时约30~45秒。

      在最终实现的时候,为了电路实现的简单,Model I并未完全采用二进制,而是引入了一种混合编码方式BCD(binary-coded decimal?,二进制编码的十进制),将十进制数的每个数位都用4位二进制码表示。每个数位上的值进行运算时都是二进制的,用继电器实现运算,而在整体上又表现成十进制。这说明当时的人们还没有完全理解二进制运算带来的进步,更多的是认可继电器开关对比机械传动还来的效率上的提升。

      Model I的另一大亮点是它首次采用了操作终端和后台计算明确分离的架构,用现在的行话讲,就是C/S(客户端/服务器)架构。斯蒂比茨为Model I配备了3台操作终端,用户在任意一台终端上键入要算的式子,后台将收到相应信号并在解算之后传回结果,由集成在终端上的打字机打印输出。

    Model I的操作终端

    只是这3台终端并不能同时使用,像电话一样,只要有一台“占线”,另两台就会收到忙音提示。Model I不仅是第一台多终端的计算机,还是第一台可以远程操控的计算机。贝尔实验室利用自身的技术优势,在达特茅斯学院(Dartmouth College)和400多公里开外的纽约本部之间搭起线路。1940年9月9日,斯蒂比茨带着一台小小的终端来到学院演示,不一会就从纽约传回结果,在与会的数学家中引起了巨大轰动,他们纷纷上台亲自验证,其中有很多计算机史上鼻祖级的人物,包括日后大名鼎鼎的冯·诺依曼、“控制论之父”诺伯特·维纳(Norbert Wiener)、“人工智能之父”约翰·麦卡锡(John McCarthy)和“ENIAC之父”约翰·莫奇利(John Mauchly)等。斯蒂比兹由此成为远程计算第一人。(考虑到电话公司是干什么的,远程计算由贝尔实验室发明似乎也是一种必然)

      同年,时任美国爱荷华州立大学数学和物理学教授的约翰·阿塔纳索夫(John Vincent Atanasoff,1903年—1995年)申请到了学校给的启动经费(区区650美元),决定自己建造一台计算机。

    约翰·阿塔纳索夫

      他拥有佛罗里达大学电气工程学士学位、爱荷华州立大学数学硕士学位和威斯康星大学理论物理博士学位,专业上繁重的计算令他苦恼已久。受到范内瓦微分分析仪的启发,他曾经计划改造学校的一台IBM制表机,在被阻止之后决定自己建一台新的。扎实的数学功底使他在设计机器时游刃有余,电气和物理方面的专业知识使他在开始设计时的目标就是用电子管来组成运算逻辑单元。一位同事将自己优秀的学生克利福德·贝里(Clifford Berry,1918年—1963年)推荐给了他,当时贝里刚从电气工程专业本科毕业,便顺势成为了阿塔纳索夫的研究生。师生二人组成了“系统设计+工程实现”的搭档。

      具有通断两种状态的电子管和电磁继电器作用类似,但继电器中衔铁的摆动是机械的,而电子管的通断几近光速。如果使用电子管组成开关电路,进而实现逻辑门,以此为基础元件建造的计算机不就可以拥有空前的运算速度了吗?显然,用电子管建造计算机在理论上是完全可行的。下图给出了一种用电子二极管和三极管构建的与、或、非门电路,用相对的高电压表示1、相对的低电压表示0。

    与门(左)、或门(中)、非门(右)

  • 与门由两个二极管组成,输入端X和Y与两者阴极相连,输出端Z与两者阳极相连并施以高电压。给X和Y任意一者施加低电压时,对应的二极管导通,Z也便处于低压;给X和Y同时施加高电压时,两个二极管都不通,Z便保留了高压。
  • 或门也由两个二极管组成,输入端X和Y与两者阳极相连,输出端Z与两者阴极相连并施以低电压。给X和Y任意一者施加高电压时,对应的二极管导通,Z也便处于高压;给X和Y同时施加低电压时,两个二极管都不通,Z便保留了低压。
  • 非门由单个三极管实现,输入端X与其栅极相连,输出端Z与其阳极相连并施以高电压。给X施加高电压时,三极管导通,Z便获得了阴极的低电压;给X施加比阴极更低的低电压时,三极管不通,Z便保留了高压。
  •   虽然理论上可行,但因为那时的电子管不但体积大、能耗高、价格昂贵,可靠性还差,只是以极少的数量应用在无线电设备中,用成千上万的电子管建造计算机几乎是不可能完成的任务。然而,还是有一批不惧困难的科学家在历史的关键时刻接下了这个任务,用一根根灯丝的微弱之光,点亮了电子计算的前途。

      同年3月31日,哈佛和IBM签订协议共同研发计算机。哈佛方面由艾肯主导设计,IBM方面则派出顶尖的工程师团队负责实现,最终成果归哈佛所有。在经过艾肯2年坚持不懈的奔走后,IBM伸出了橄榄枝。彼时的IBM,已是单元记录市场的巨头企业,拥有丰富的计算设备建造经验。而除了其主营的制表机型,当时的总裁托马斯·沃森(Thomas John Watson,1874年2月17日—1956年6月19日)对通用计算机也颇有兴趣。艾肯想实现自己的理想,沃森想进一步提高公司的声誉,两人一拍即合。

    IBM老板托马斯·沃森

    有了钱,艾肯开始了“MARK I”的研发。与同时期其他“重复制造轮子”的先驱不同,艾肯“站在了巨人的肩膀上”,他充分参考了帕斯卡、莱布尼茨、巴贝奇、霍列瑞斯等前人的成果,也将他们的失策引以为戒——正是有了巴贝奇的教训,艾肯选择直接利用IBM现成的制表机零件,而没有走自己生产元件的弯路。MARK I借助电流进行运算,最关键的部件采用继电器组成,安装了大约3000个继电器。继电器接通电路表示“1”,继电器断开则表示“0”。继电器能在大约1/100秒内接通或断开电路。

      为MARK I编制计算程序的人中有一位女数学家格蕾斯·霍波(Grace Murray Hopper)。有一天,在调试程序时出现了故障,拆开继电器后,人们发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。从此,霍波恢谐地把程序故障统称为Bug(虫子)。

      同年,惠普(Hewlett-Packard,HP)公司在帕洛阿尔托市成立。两位创始人比尔·惠利特(Bill Hewlett)和戴维·普卡德(Dave Packard)(知道为啥叫HP了吧)都是时任斯坦福大学电子通讯实验室主任弗雷德里克·特曼(Frederick Emmons Terman,1900年6月7日—1982年12月19日)的学生。弗雷德里克·特曼被誉为“硅谷之父”。

    硅谷之父弗雷德里克·特曼

    特曼在MIT获得电子学博士学位的导师是范内瓦·布什。美国两个著名的高科技工业园区——加州的“硅谷”和波士顿128号公路的“高科技走廊”的诞生都凝结了范内瓦的心血。

      1940年,阿塔纳索夫的计算机器就在物理大楼的地下室开始运转了。这是一台专用的计算机,用于求解线性方程组,最多支持29个方程。机器有数百个电子管,以鼓状电容器来存储数字(因为电容便宜)。因为是阿塔纳索夫设计的,人们便理所当然地称之为阿塔纳索夫机,其实贝里的贡献也不容忽视。在1963年贝里自杀去世之后,阿塔纳索夫为了纪念这位出色的学生、自己的得力助手,正式将机器命名为阿塔纳索夫—贝里计算机(Atanasoff–Berry computer),简称ABC。巧合的是,这个在英文中代表“入门”和“基础”的单词,也正是第一台电子计算机的名字。

      可惜的是,这台划时代的计算机没有保留下来,我们现在所能见到的是爱荷华州立大学1997年重建的复制品。它借用IBM的80列穿孔卡片输入十进制数据,读卡器在读入后将它们转换为二进制形式存入两个滚筒状的存储器(图中另一个滚筒存储器被右侧控制台遮挡),计算单元由电子三极管逻辑电路构成,计算结果被转换回十进制后通过示数齿轮显示。滚筒的筒壁上整整齐齐排布着32圈、每圈50个电容,其中30圈用于存储数据,多余的2圈作为备份。电容具有两个电极,可分别施加高电压和低电压,故而可用“一高一低”和“一低一高”两种状态表示0和1。并且,带电的电容可以提供导通电子管的电压,反之,电子管也可以为电容充电——两者天生具备着二进制数据的传递能力。由于电容比较“健忘”(离开电源后在一定时间内会自行失电),滚筒每秒旋转一周,固定在台面上的电刷就对电容进行一次充电。在滚筒旋转一周的短短1秒内,计算单元便完成了30对二进制数的加减运算,机械和机电时期的人们估计很难想象这种魔鬼般的计算速度。

    ABC滚筒电容存储器

    ABC使用了二进制加法器(减法通过二进制补码转换为加法),每个单数位加法器由14个三极管(7个双三极管)组成。机器工作时,站在一旁的操作人员能明显感觉到它们的热量。

    尽管有着很高的计算速度,但ABC每次只能处理2个方

    声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及版权,请您尽早时间联系jinwei@zod.com.cn

    相关推荐