是谁发明了计算机(中) 10/24/2019 04:58
是谁发明了计算机(中)
2019-10-23 10:33:09


波士顿的新人
旧事已过,都变成新的了

1937年在计算机的发展史上是个神奇的年份。

这一年,图灵(Alan Turing)在指导教授数学家纽曼(Max Newman)的启发下发表了一篇论文,其中提到了逻辑运算机(Logical Computing Machine),这就是后来大名鼎鼎的“图灵机”。

在1928年的时候,数学大拿希尔伯特(Hilbert)在一次年会上提出了三个问题:第一,在一个数学体系中,是否存在一套规则,可以判断任何一个命题的真伪;第二,这样的系统是否具有一致性,也就是一个命题不能一会儿被证明是真的,一会儿被证明是假的;第三,是否有一个机制来判断一个命题是否可以被验证。

三年之后,25岁的数学天才哥德尔(Kurt Gödel)对第一和第二个问题给出了否定的答案。哥德尔给出这样的一个例子,“这句话是无法被验证的。”(This statement is unprovable) 如果这句话是真的,那我们就无法验证它的真假,这个是矛盾的,因为既然无法验证,我们怎么能说这是真的呢?但如果这句话是假的,那就是说这句话是可以被证实的(This statement is provable),结果变成 This statement is proved to be unprovable, 也是矛盾的。这和“我说的是假话”有异曲同工之妙。

最后问题的焦点就到了第三题,是否存在这样的机制可以决定一些命题可被验证,但另一些命题是无法验证的,如果有这样的机制,那么我们就可以找出那些无法验证的命题(就像我们上面提到的This statement is unprovable 的例子),把它们排除之后,就可以找到满足希尔伯特第一第二问题的系统了。而图灵的论文就是试图回答这个问题。

他设计了一台假想的逻辑运算机(Logical Computing Machine),有四部分组成:

1. 一个内存(Memory),这是一条无限长的纸带,上面有一个个的小方格,格子里是字符(最简单的就是 0/1),或者是空白;
2. 一个读写头,它停在小方格上,可以有三个动作:读取字符,改写字符,向左或向右移动一小格;
3. 一个状态寄存器(Register)
4. 一个控制程序(Table of Instructions),根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。

明眼人都看出来了,这不就是一台计算机的雏形吗?就是用这台逻辑运算机,图灵解开了希尔伯特的第三个问题。首先,图灵提出在逻辑运算机进行运算的过程中,机器最终会到达两种可能的状态:一个是计算完成,机器停止,这就是停机状态;另一个是无限循环,计算永远完成不了。然后图灵设计了一个巧妙的悖论:假设存在一个判断程序H,它可以判断某个程序P是否会到达停机状态:

如果P会停机, 那么 H(P)=Halt;

如果P不停机, 那么 H(P)=NOT Halt

我们再构建一个程序K,它会把判断程序H当作子程序(subroutine)来调用,然后根据H对K判定的结果,反其道而行:

如果H说我会停机,也就是 H(K)=Halt,那么我就无限循环 K will Not Halt;

如果H说我不停机,也就是 H(K)=NOT Halt,那么我就停机 K will Halt

这样矛盾就出来了,H判断K会停机,可是K因此决定无限循环,所以H判断错了;但如果H判断K会无限循环,K却会因此停机,这样我们就永远也无法通过H来判断K会不会停机,所以结论是:不存在一个可以判定停机问题的程序H。图灵就这样轻轻巧巧地就回答了希尔伯特的第三个问题:停机就代表一个命题是可证的,不能停机就是说那个命题无法验证,而判断程序H就是那个判断命题是否可证的机制,既然H不存在,那么也就不存在一个可以判定命题可证性的机制了。

图灵的论文也许对数学理论的建立有一些帮助,但他更大贡献却是那台假想的逻辑运算机,可以说现代计算机的所有基本要素都已经出现在这台机器里了。

写完论文,图灵的指导教授就把他推荐给了普林斯顿大学的另一位数学大牛Alonzo Church。于是图灵远渡重洋,来到了普林斯顿,搬进了爱因斯坦,哥德尔等人所在的数学系大楼(那真是一个群星璀璨的年代)。正是图灵的新老板Alonzo Church,当看完图灵的论文,非常慷慨地把“逻辑运算机”改成了以作者本人命名的“图灵机”,从此“图灵机”扬名天下,而24岁的图灵也在计算机发展史上,打下了一个永恒的印记。

剩下的问题就是如何才能真正地把图灵机制造出来了。

还是在1937年,麻省理工的克劳德·香农(Claude Shannon)写出了有史以来最具影响力的硕士论文,被后世称之为“信息时代的大宪章”(the Magna Carta of the Information Age)。

那是37年的夏天,还在MIT读研究生的香农在贝尔实验室找到一个实习的机会,在那里他见识了电话交换系统,研究了各种电子开关和继电器的应用之后,香农脑中灵光一现,把电子开关和布尔代数开始联系起来。

如果“开”代表0,“关”代表1,那么两个开关串联,其实就是“与”(and)的运算,因为只有两个开关都合上,电路才会流通;而两个开关并联,就是一个“或”(or)的运算,因为只要有一个开关合上,电路就会接通。而这个正是电子计算机二进制运算的基石!有时想想真的是不公平,这些容易的发明发现都让前辈们用完了,留给我们的都是些难啃的骨头,什么攻克癌症啦,长生不老啦,人工智能啦,都不是一个夏天的实习可以搞定的。

37年的秋天,香农回到MIT,在指导教授布什(Vannevar Bush)的鼓励下,写下了那篇著名的硕士论文《A Symbolic Analysis of Relay and Switching Circuits》。

而就在同一年,贝尔实验室的George Stibitz在家中厨房的桌子上搭建了一个可以做二进制加法的电子线路,这个模型被Stibitz的妻子戏称为K-Model,因为是在Kitchen里搭出来的。贝尔实验室对Stibitz的K-Model大力支持,找了一个团队来和他一起搭建更复杂的模型,终于在1939年造出了复数计算器(The Complex Number Calculator),这台机器有超过400个电子开关,每个开关一秒中可以开关20次,这个和以前的机械计算器相比,简直是神一样的存在了。虽然这还不是现代意义上的电子计算机,因为复数计算器是无法编程的,但它至少给我们看到使用电子线路进行二进制运算是完全可行的。


★火眼金睛☆ 发表评论于 2019-10-24 00:00:31
照这个节奏,好像下篇写不完啊
chufang 发表评论于 2019-10-23 18:10:25
von Neumann的控制论也是个经典。
HBW 发表评论于 2019-10-23 17:44:05
"有时想想真的是不公平,这些容易的发明发现都让前辈们用完了,留给我们的都是些难啃的骨头..."

西方的很多数学、物理的理论发现过程都有这个特性。问题在于他们的思考方法和学术环境。可以酝酿出学术成果,以定理、文档的形式保存下来。后来者很容易的获得前人的知识,站在新的起点开始新一轮的思考。长年累月就慢慢建立起知识的大厦。灵光闪现前的知识积累及科学方法训练不是一天就促成的。
cys254 发表评论于 2019-10-23 17:42:43
还有一个von Neumann也很重要, almost all modern computers still follow Von Neumann architecture
老生常谈12 发表评论于 2019-10-23 17:14:47
谢谢新人科普。
是谁发明了计算机(下)
2019-10-24 18:59:01

波士顿的新人
波士顿的新人
旧事已过,都变成新的了
首页 文章页 文章列表 博文目录
给我悄悄话
打印 (被阅读 1805次)

依然是1937年,MIT隔壁的哈佛,有个博士生艾肯(Howard Aiken)在为他的物理论文进行着枯燥的计算,实在受不了了,艾肯就向学校提出应该造一台机器来做这些重复劳动,系主任就和他讲,在哈佛的科学中心的阁楼里好像有你要的机器哦,不过就是有点旧。嗯,有多旧?大概100年吧。艾肯当时心中跑过多少匹草泥马,史书中没有记载。

进了阁楼,艾肯发现的正是巴贝奇的差分机的样品,那是巴贝奇的儿子根据老爹的设计,制作而成的六部样品机中的一部。和当年的爱塔小姐一样,艾肯被巴贝奇的机器迷住了。那年秋天,艾肯写了份22页的申请报告,要求哈佛和IBM合作,一起建造巴贝奇计算机的现代版。哈佛对此犹犹豫豫的,物理系对他的建议兴趣不大,甚至提醒他说,干这种吃力不讨好的事,对他以后晋升哈佛教授不会有太大帮助,倒是当时的哈佛校长柯南特(Conant)大力支持,批准了这个项目。

于是1941年的春天,IBM开始根据艾肯的设计蓝图,动工制造马可一号(Mark I),到1944年马可一号终于完成,这是一个八十尺长,五十尺宽,重达五吨的庞然大物,它没有采用二进制,也没有使用电子开关,用的是马达驱动的机械开关,做个乘法要6秒钟,而贝尔实验室Stibitz的复数计算器因为用了电子开关,同样的乘法计算只要一秒钟就够了。但马可一号实现了全自动,所有的数据和程序都是通过纸带输入的,可以在无人操作的情况下,自动运算数天之久,用艾肯的话来讲,就是“巴贝奇的梦想终于成真了”。

可是艾肯也好,前面提到的香农,Stibitz也好,他们都输给了一个德国人。

还是在1937年,德国柏林,工程师 Konard Zuse 在他父母家中的起居室里完成了Z1的原型,这个完全是高手在民间的典范。Z1采用二进制运算,起初用的是穿孔纸带来进行数据输入,后来 Zuse 发现废弃的电影胶卷更为价廉物美,就换成了用胶片作为输入媒介。Z1用的是机械开关,因为全是手工打造的,时不时会卡壳。于是在建造 Z2 的时候,在朋友的建议下,Zuse 试图采用当时最先进的电子真空管作开关,可是一打听,这个属于天价,只得放弃,退而求其次,使用了电话公司二手的电动机械开关。

到1941年,Zuse完成了Z3,这台机器基本实现了图灵机的设想,和现代计算机的唯一差别,就是没有电子开关,它使用的还是电动机械开关。哎,民科到底还是不行,若是使用了真空管,那么第一台电子计算机发明人的桂冠就非他莫属了。

1942年,Zuse向德军总部申请用真空管制造更快更好的计算机,预计要两年的时间,但遭到拒绝,因为司令部确信战争不用两年就可以结束了,德军对制造武器比计算机更有兴趣。

1943年,盟军对柏林实行空袭,Zuse的计算机和设计图纸一起,在轰炸中灰飞烟灭。

还是回到1937年。那一年,彷佛大家都被下了同样的魔咒,美国衣阿华州立大学的文森特·阿塔纳索夫(John Vincent Atanasoff)也被繁琐的数学计算搞得心烦意乱,开始琢磨设计一台计算机来取代这种低效的重复劳动。由此可见,至少在计算机这个行业,吃苦耐劳不算是一种美德。

文森特以最高的GPA从佛罗里达大学本科毕业,拿到了衣阿华州立的奖学金去读硕士,虽然哈佛大学后来也录取了他,但他还是决定做小池塘里的大鱼,去了衣阿华州立,毕业之后又去威斯康星大学拿了个物理学博士,然后回到衣阿华州立做了助理教授。文森特放弃哈佛也许是他人生的一大败笔,因为在衣阿华州立他找不到志同道合,又同样才华横溢的人可以与他合作。

文森特设计的计算机,使用的是二进制,在逻辑运算处理部分用上了电子真空管,而内存(Memory)部分,还是为了省钱,文森特决定使用电容器(Capacitor),所以这台机器虽然运算速度极快,但数据的读写却大大地拖了后腿。

1939年底,文森特向学校领导展示了他设计的样机(Prototype),然后递上一份35页的申请报告,要求5330美元的经费来完成他设计的计算机,这台机器的主要功能是解复杂的线性代数方程。文森特还留了个心眼,特地复印了一份他的申请报告给衣阿华州立的专利律师,让学校帮着申请专利。可是,出人意料的是这位律师根本没把这事放在心上,居然一直没有申请,这也为后来文森特的专利官司种下了祸根。估计文森特后半辈子一直在问候这位律师的祖宗八代。

真正摘取第一台电子计算机桂冠的是ENIAC,它是由莫奇利(John Mauchly)和埃克特(J. Presper Eckert)在美国军方的资助下研制成功的。

莫奇利可算是世家子弟,父亲是物理学家,周围的邻居也多是科学家,从小在这样的环境中长大,造就了莫奇利好学善问的习惯,加上他非常外向的性格,让他从我们前面提到的一众计算机先驱的发明中了获得了许多灵感。

1939年,他在纽约世博会上看到了使用打孔卡的计算器和使用电子真空管的密码加密机;1940年,他看到了贝尔实验室 George Stibitz 研制的复数计算器(The Complex Number Calculator)的一个演示;同年12月,莫奇利遇到了我们前文提到的,申请专利出了纰漏的阿塔纳索夫(Atanasoff),阿塔纳索夫声称他研制的计算机价廉物美,处理3000位数码(digits)的造价只有6000美元(还记得这位老兄为了省钱放弃了真空管吗?),平均每位数码只要2美元 ($2 per digit),这引起了莫奇利的极大兴趣,因为根据他的估算,自己设计的计算机造价每位数码至少要13美元。于是1941年6月,莫奇利专程拜访了阿塔纳索夫,看了他样机之后,莫奇利其实有点失望,因为使用电容代替真空管,虽然价廉但却并不物美,速度跟不上啊。这次拜访之后,1941年的夏天,莫奇利参加了由军方发起的,在宾州大学举办的为期十周的电气工程培训班,而就在这个暑期班上,他遇见了他的合作伙伴埃克特。

埃克特是个典型的“别人家的孩子”,长得有点像格里高利·派克,老爹是百万富翁地产开发商。有了高富帅还不算,他自己居然是个超级学霸,12岁时用磁铁和变阻器造了一个船模导航仪,赢得了费城市级科学竞赛的大奖,14岁时改装了家里的室内通话系统(Intercom),用交流电代替直流电,替家人消除了常常要给系统换电池的麻烦。高中毕业,埃克特不出所料地被MIT录取,但父母不舍得他离家“远”游,逼着他去了宾州大学(UPenn)。在宾大,埃克特继续光芒四射,先是发明了搞怪的“接吻器”,让一对恋人分别握住仪器的两端,然后热吻之际,电路被接通,如果人体电阻足够小的话(比如说这个吻接得足够湿),接吻器就会大放光芒,而且会鸣号祝贺。那时的他简直就是哈利波特小说中弗雷德和乔治·韦斯莱(Fred and George Weasley)的真人版。到了大三,埃克特用光调制技术(light modulating method)把声音记录到了胶卷上,从而获得一项专利。1941年埃克特宾大毕业,顺利地留校,在军方举办的暑期培训班上传授电气工程的知识,从而遇上了莫奇利。莫奇利在暑期培训班结束后也被聘任为宾大电气工程系摩尔学院(Moore School)的讲师。至此,莫奇利和埃克特汇聚在了莫尔学院。

1941年正是二战打得难分难解的时候,莫尔学院承担了为军方计算火炮弹道射击表的任务。计算一张射击表涉及到的数学运算非常巨大,而且对应某种型号的火炮需要根据气温、湿度、纬度等几百种不同的参数编制很多张射击表。当时他们用的是麻省理工Vannevar Bush发明的差分分析机(Differential Analyzer),Vannevar Bush 就是当年指导香农写下信息时代大宪章的那位教授。不过光有机器还不够,宾大又雇了170位计算师(computers)来帮助机器工作,英文的计算机(computer)就是由此得名的。即便如此,他们一周才能完成一张火炮射击表,完全无法满足军方的要求。

1942年8月,莫奇利起草了一份研制电子计算机的报告:“The Use of High-Speed Vacuum Tube Devices for Calculating”,获得军方首肯之后,埃克特又对这个报告进行了细化补充。他们给军方画了一张大饼,预测他们的机器将会把计算一个弹道需要的时间,从现在的20个小时缩短到100秒。

1943年4月9日,历史性的时刻来临了,军方要召见莫奇利和埃克特,决定是否为他们的设计立项拨款。头天晚上两人彻夜未眠修改他们的提案,等到上了军方的专车,两个小时的车程里,他们全程在后座讨论修改,下车进了军方的会客室,两人依然没有定案,还在继续商议,这样的临时抱佛脚真是可以载入史册了。

会议由 Oswald Veblen 主持,军方的代表是陆军弹道研究实验室主任西蒙上校(Colonel Leslie Simon),会议开了没多久,Veblen起身站了起来,对上校说了一句,“西蒙,掏钱吧”,然后转身扬长而去。估计此时莫奇利和埃克特一定是心花怒放,恨不得马上找间卧室先好好睡一觉再说。你也许会问 Oswald Veblen 是何方神圣?说实话,这人我也不熟,我只知道他是普林斯顿高等研究院(IAS - Institute for Advanced Study)的院长,他的手下有爱因斯坦,冯诺伊曼,哥德尔等众多大神。

1943年6月ENIAC(Electronic Numerical Integrator and Computer)开工建造,莫奇利担任设计指导,埃特克为总工程师,两个人配合默契,埃特克用他完美主义者的病态对工程精益求精,莫奇利则与技术人员谈笑风生,打成一片,为他们打气鼓劲。一年之后,正是1944年6月诺曼底登陆之际,1/6的机器完成,进行了一个简单的乘法运算测试,结果顺利完成,众人是一片欢呼。

1945年11月,ENIAC终于完工,100英尺长,80英尺高,用了17468个真空管,一秒钟可以进行5000次的加减运算,30秒可以完成一个弹道的计算,比他们当初的预测还要棒。而且最重要的是,这不是一台样机,而是可以立刻投入到实际工作中的实用产品。

人类历史上第一台全自动可编程的通用电子计算机就这样诞生了!
波士顿的新人 发表评论于 2019-10-25 15:59:04
多了一个零,应该是8英尺高
新年好运 发表评论于 2019-10-25 13:06:23

铱 发表评论于 2019-10-25 01:25:53
80英尺高!
XYZ94538 发表评论于 2019-10-24 22:02:48
计算机和网络技术都是美国政府的项目,不是私人或私人公司发明的。
smilhaNew at 10/25/2019 22:09 快速引用
是谁发明了世界上第一台计算机?

科普中国网 2018-06-23

        

作者:焦述铭

  在106年前的今天,1912年6月23日,“计算机科学之父”艾伦?图灵诞生。今天,我们就来聊一聊,是谁发明了世界上第一台计算机!

  如果让计算机自己来回答“第一台计算机”是什么时候诞生的,只要打开搜索引擎输入这个问题,就会看到各种各样的答案,其中大多是:世界上第一台计算机是1946年在美国诞生的电子数值积分计算机,简称ENIAC。

  其实这个题目并没有标准答案,ENIAC只是其中一个答案而已。在历史上人们很早就开始尝试制造可以自动计算的机器了,经过多年的发展,才有了计算机今天的模样。很多种类的计算机都可以算作是“第一台计算机”,这要看你如何定义“计算机”。

  如果能帮我们做算术的东西就能称得上是计算机的话,古代的算盘应该也称得上是一种计算机,不过它完全是手动的。在17世纪到20世纪的几百年间,曾经出现过一批不带电的计算机,这些计算机里面没有电路板,只有一堆机械齿轮。

  17世纪法国有一位“全能超人”帕斯卡,他是数学家、物理学家,也是哲学家、流体动力学家,还是概率论的创始人之一。帕斯卡造出了一个内部装着一堆齿轮的盒子,只要旋紧发条,它就可以转起来。不过,这个“第一台机械式计算机”只能进行简单的加减运算,其水平大概只相当于幼儿园小朋友。后来,德国数学家莱布尼茨制造出了一台可以进行加减乘除运算的机械式计算机,它的计算能力达到了小学生的水平。英国数学家巴贝奇在19世纪20年代制造出的差分机,则会计算一些数学函数了。虽然巴贝奇梦想着制造出一台功能更齐全的第二代差分机,但他最后并没有成功。

  后来人们意识到,如果只使用机械齿轮进行计算,计算能力是极其有限的,要想让计算机拥有更强的计算能力,只有另辟蹊径。于是,电子计算机被制造出来了。依靠电力来工作比依靠齿轮工作速度更快,因此电子计算机有更强的计算能力。在第二次世界大战期间,战场上飞机、炮弹的飞行轨迹需要大量复杂的计算来获取,这让电子计算机有了一展身手的机会。以世界上第一台大型自动数字计算机“马克1号”为例,它可以储存72组数据,每组数据有23位小数。进行加法运算一次需300毫秒, 乘法运算一次需6秒,除法运算一次需15.3秒,尽管现在看起来这个速度比较慢,但是它实现了计算技术历史性的突破,帮助人们完成了大量计算任务。

  那么,电子计算机的发明者是谁呢?也有好几种答案。1936年英国数学家图灵首先提出了一种以程序和输入数据相互作用产生输出的计算机构想,后人将这种机器命名为通用图灵机。1938年出现了首台采用继电器进行工作的计算机“Z-1”,但继电器有机械结构,不完全是电子器材。1942年阿坦那索夫和贝利发明了首台采用真空管的计算机,以他们俩名字的首字母命名为ABC。不过ABC只能求解线性方程组,不能干其他的工作。在图灵指导下,第一台可以编写程序执行不同任务的计算机COLOSSUS则到了1943年才在英国诞生,用于密码破译。

  公认的人类历史上第一台现代电子计算机是1946年在美国宾夕法尼亚大学诞生的ENIAC。尽管它比前面提到的那些机器晚诞生了一段时间,但它拥有了今天计算机的主要结构和功能,是通用计算机,并且是第一台与通用图灵机等效的计算机。虽然在今天看来,ENIAC的计算能力恐怕连小小的计算器、智能手机都比不上,但当时称得上是功能强大。ENIAC体积非常庞大,占满好几个房间,全身上下拥有一大堆缠绕的电线和真空管。它的耗电量也非常惊人,工作的时候,全城的人都知道,因为家家户户的电灯都变暗了。最初ENIAC的程序设置需靠人工移动开关、连接电线来完成,改动一次程序要花一星期时间。为了提高效率,工程师们设想将程序与数据都放在存储器中。数学家冯·诺依曼将这个思想以数学语言系统阐述,提出了存储程序计算机模型,后人称之为冯·诺依曼机。

  现在,人们普遍认同现代计算机理论最重要的奠基人是图灵与冯·诺依曼。前者建立了图灵机的理论模型,发展了可计算理论;而后者确定了现代计算机的基本结构。不过,计算机的发展很难简单地归功于某一个人或某一台机器,历史上每一台迸发出创新火花的计算机都有资格称得上计算机历史上的第一,它是人类智慧的共同结晶。

  关键词:计算机 计算机发明
smilhaNew at 10/25/2019 22:18 快速引用
[Time : 0.010s | 11 Queries | Memory Usage: 678.82 KB]