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