Posts

Showing posts from August, 2017

是谁发明了计算机(六)

让我们还是回到1937年。那一年,彷佛大家都被下了同样的魔咒,美国衣阿华州立大学的文森特·阿塔纳索夫(John Vincent Atanasoff)也被繁琐的数学计算搞得心烦意乱,开始琢磨设计一台计算机来取代这种低效的重复劳动。由此可见,至少在计算机这个行业,吃苦耐劳不算是一种美德。 文森特以最高的GPA从佛罗里达大学本科毕业,拿到了衣阿华州立的奖学金去读硕士,虽然哈佛大学后来也录取了他,但他还是决定做小池塘里的大鱼,去了衣阿华州立,毕业之后又去威斯康星大学拿了个物理学博士,然后回到衣阿华州立做了助理教授。文森特放弃哈佛也许是他人生的一大败笔,因为在衣阿华州立他找不到志同道合,又同样才华横溢的人可以同他合作。 文森特设计的计算机,使用的是二进制,在逻辑运算处理部分用上了电子真空管,而内存(Memory)部分,还是为了省钱,文森特决定使用电容器(Capacitor),所以这台机器虽然运算速度极快,但数据的读写却大大地拖了后腿。 1939年底,文森特向学校领导展示了他设计的样机(Prototype),然后递上一份35页的申请报告,要求5330美元的经费来完成他设计的计算机,这台机器的主要功能是解复杂的线性代数方程。文森特还留了个心眼,特地复印了一份他的申请报告给衣阿华州立的专利律师,让学校帮着申请专利。可是,出人意料的是这位律师根本没把这事放在心上,居然一直没有申请,这也为后来文森特的专利官司种下了祸根。估计文森特后半辈子一直在问候这位律师的祖宗八代。

是谁发明了计算机(五)

依然是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,这台机器基本实现了图灵机的设想,和现代计算机的唯一差别,就是没有电子开关,它使用的还是电动机械开关。哎,民科到底还是不行,若是使用了真空管,

是谁发明了计算机(四)

还是在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次,这个和以前的机械计算器相比,简直是神一样的存在了。虽然这还不是现代意义上的电子计算机,因为复数计算器是无法编程的,但它至少给我们看到使用电子线路进行二进制运算是完全可行的。 同样是1937年,MIT的邻居也没有闲着。

是谁发明了计算机(三)

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

是谁发明了计算机(二)

巴贝奇的新想法是造一台可以编程的计算机! 这台被称为“分析机”(Analytical Engine)的机器,在巴贝奇的构想中,可以根据外部的指令执行不同的数值运算。那么如何给机器提供指令呢?巴贝奇最先的想法是使用一种类似齿轮的装置,但后来他从法国人Jacquard发明的自动织布机中获得了灵感。 Jacquard 使用的是打孔卡(punch cards)。通过打孔卡小孔的不同位置来控制织布机的主轴,从而织出不同的花样图案,巴贝奇见此设计之后,茅塞顿开。打孔卡可以一张接一张无限制地提供指令给分析机,而且一套不同的打孔卡可以对机器重新编程,执行不同的运算,现代计算机最主要的两个特征: “通用”(general-purpose)和“编程”(programmable)已经呼之欲出了。 可是,也许是因为吃够了差分机的苦头,当时的英国政府和科学界对“分析机”反应冷淡。也难怪他们,要是今天中国政府给了你两艘航母的经费,十年的时间,你交出个1/7的半成品,然后你说你要搞个更伟大的项目,任凭你说得天花乱坠,估计也没人再愿意上当了。于是任凭巴贝奇磨破了嘴皮子,大家都无动于衷,只有一个人除外,一个女人。 爱塔(Ada Lovelace)是英国大诗人拜伦的独生女儿,但父母在她满月之日就离异了,爱塔的母亲痛恨她父亲拜伦的失德行为,并将此归咎于他的诗人气质,于是从小就让爱塔远离文青,专攻数理,为她打下了坚实的数学基础,这也让她在英国的科学界有了许多朋友。 早年爱塔曾一度试图说服巴贝奇做她的数学私教,不过被巴贝奇婉言谢绝了。当她了解到巴贝奇“分析机”的构想时,我们年轻的伯爵夫人被深深地迷住了,她甚至梦想成为巴贝奇的合伙人和公关主任,游说世人出资建造“分析机”。 1843年,爱塔写下了阐述分析机原理的《注记》(Notes),在爱塔的注记中,她认为分析机不但可以处理数学问题,而且应该可以处理任何能够转化成数字符号的东西,包括音乐和艺术,她笔下的“分析机”简直就成了多媒体电脑的化身。而且更加神奇的是,爱塔在注记里写下了世界上第一段软件程序 -- 计算伯努利数。爱塔设计的整段程序一共需要75张打孔卡,里面不但有子程序(subroutine),甚至还有递归循环(recursive loop)。 1983年美国国防部将内部使用的计算机编程语言命名为Ada,用来纪念这世界上第一位的程

是谁发明了计算机(一)

        故事要从十九世纪的英国讲起。工业革命带来了蒸汽机和各种机械装置,将人们从各种劳动中解放了出来。        这一天,在剑桥大学的办公室里,年轻的数学家查尔斯·巴贝奇(Charles Babbage)对着一张错误百出的对数表,气得七窍生烟。旁边,他的好友,天文学家约翰·赫歇尔(John Herschel)充满同情地看着他。巴贝奇嘟囔着,“上帝啊,我真希望可以用蒸汽机产生对数表,这样就不会有这么多人为的错误了”,赫歇尔愣了一下,随口答道,“嗯,有意思,这个想法是完全有可能实现的。”        于是在1821年,巴贝奇开始着手设计一台可以自动生成对数,指数,三角函数的机器,这就是差分机(Difference Engine)的原型。巴贝奇把这些复杂的数学计算,分解成若干步骤,而每个步骤都可以通过简单的加减运算来实现。譬如,要生成指数函数 f(x)=x²,最终的结果是这样一个数列:1,4,9,16,25,36,49 ...... , 它们之间的差值是:3,5,7,9,11,13,......,而这个新的数列的差值是:2,2,2,2,2 ......,所以如果要产生下一个指数,8的平方,我们可以把最后得到的等差2,加到上个数列的最后一个数值13上,就得到15;然后再把15加到最先的那个数列的最后一个数值49上,这样就可以得到8的平方(49+15=64)。通过这个原理,巴贝奇甚至可以用差分机算出一到一千万之间的所有质数(a table of prime numbers up to 10 million),这在当时简直是个奇迹。         英国政府对差分机表现出异常浓厚的兴趣,在后面的十年里慷慨解囊,为巴贝奇的神器投下了17000英镑,这是一笔可以用来制造两艘战舰的巨资。可在这十年中,巴贝奇不停地修改他的设计,试图精益求精,但最终却因为严重超支,只完成了差分机的1/7,而此时巴贝奇却又有了新的想法。