软件故事:谁发明了那些经典的编程语言(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-03 13:42:26

点击下载

作者:(美)史蒂夫·洛尔

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

软件故事:谁发明了那些经典的编程语言

软件故事:谁发明了那些经典的编程语言试读:

献辞

谨以此书献给弗雷德、特里和尼基。

译者序

要想真正把事情搞得一塌糊涂,还得依靠计算机。

这是我真正见到计算机之前看到的一句话。

后来,我学习了BASIC、FORTRAN、C 和其他一些语言,也写过一些大大小小的程序。我曾为调试程序苦思冥想,也曾为自己的“作品”沾沾自喜,却从未认真想过这些编写程序的程序从何而来。那些创造出如此美妙东西的,该是怎样神奇的人?

所以,当我看到这本介绍软件发展史的书时,它立刻就引起了我的兴趣。本书不但详细介绍了计算机各个发展阶段中主流软件的产生过程,而且讲述了很多鲜为人知的故事。特别值得一提的是,书中讲述了众多人物的故事,其中不乏一些大名鼎鼎的业界传奇人物,当然也有不少不为人知的“无名小卒”。但他们都是创造了软件历史的人,都是值得我们尊重的人。

作者史蒂夫·洛尔曾是《纽约时报》的技术、商业和经济专栏作家。为撰写本书,他进行了大量调查、研究和走访。本书英文版于2001 年由Basic Books首次出版。

由于译者水平有限,书中难免有错误和疏漏之处,欢迎读者批评指正。我的邮箱:cx10@sina.com.cn。

致谢

1

1999 年春天,吉姆·格雷去领取图灵奖(计算机科学领域的诺贝尔奖)时途经纽约,让我萌生了撰写本书的想法。格雷是土生土长的加利福尼亚人,20 世纪60 年代就读于加州大学伯克利分校。毕业后,他大部分时间都在硅谷工作。他对硅谷的商业周期了如指掌,对当时盛行的电梯游说和IPO 等互联网投资热潮不以为然。当时,人们似乎更加热衷于赚钱而非关注技术——按照格雷的标准来说,这是个扭曲的世界。

1.Jim Gray(1944—2007),著名的数据库专家、事务处理技术权威,是1998 年图灵奖得主。2007年1 月28日独自驾船出海而失踪。——编者注

他说,诚然,这个领域中有才能的人生活得更好。“但这与钱无关,”他指出,“真正的乐趣和吸引力在于能够运用这种超酷的软件技术应对和创造事物。”

我认为,对计算机编程的历史进行深入探索,并与构建和缔造软件世界的大师进行对话,也许是一件非常有趣的事情。计算机是相对新兴的行业,而且发展十分迅速,所以大部分编程先驱都还健在,这又是一个便利之处。因此,当时看起来撰写本书是个不错的想法。

有些人也认同这是一项有趣的工程,在此我要向他们表示感谢。感谢Brockman 公司的约翰·布罗克曼和卡廷卡·麦特森,要不是他们的鼓励,我可能不会开始创作本书。感谢Basic Books 出版社决定出版本书,编辑主任伊丽莎白·马奎尔和编辑威廉·莫里森都思维缜密、敏捷干练。感谢《纽约时报》,尤其是执行编辑约瑟夫·莱利维尔德,他慷慨地批准我休假,而我休假的时间超过了预期。

感谢哥伦比亚大学新闻研究生学院院长汤姆·戈尔茨坦,在我离开《纽约时报》期间他热情地为我提供工作场所。

向艾尔弗雷德·斯隆基金会以及负责公共科技常识项目的主管多伦·韦伯致以最诚挚的感谢,因为得到帮助我才得以完成本书。

感谢那些专业的教育机构大力支持我开展研究。美国计算机协会允许我访问他们的数字图书馆,这是难能可贵的。查尔斯·巴贝奇研究所的口述历史项目也是我重要的资料来源。计算机历史中心博物馆(2000 年更名为计算机历史博物馆)资助的录像讲座对我也非常有帮助。

特别要感谢那些接受我采访的人,他们付出了大量的时间,展现了无穷的耐心与智慧。他们经常受到我的打扰,要接受当面采访、接听电话或回复邮件,采访冗长而又烦琐,有时还要多次重复,有的人甚至还要审阅部分手稿。他们包括亚历克斯·艾肯、弗兰·艾伦、丹尼斯·艾利森、马克·安德列森、约翰·巴克斯、珍·巴蒂克、布莱恩·贝伦多夫、罗伯特·贝莫、蒂姆·伯纳斯-李、丹·布里克林、小弗雷德里克·P.布鲁克斯、汤姆·巴顿、马丁·坎贝尔-凯利、彼得·卡佩克、史蒂夫·卡普斯、唐·钱伯林、阿兰·库珀、乔治·康乐瑞斯、理查德·道金斯、道格·恩格尔巴特、鲍勃·弗兰克斯顿、约翰·盖奇、比尔·盖茨、理查德·戈德堡、詹姆斯·高斯林、吉姆·格雷、萨提什·顾普塔、洛伊丝·海波特、安迪·赫兹菲尔德、安德斯·海尔斯伯格、托尼·霍尔和瓦茨·汉弗雷等。

还要感谢比尔·乔伊、菲利普·卡恩、霍华德·卡兹、阿兰·凯伊、肯·肯尼迪、布莱恩·柯尼汉、高德纳、托马斯·库尔茨、J.A.N.李、巴特勒·兰普森、约翰·麦卡锡、帕米拉·麦可杜克、丹·麦克拉肯、道格拉斯·麦克罗伊、罗杰·尼达姆、约翰·H.帕尔默、拉吉·瑞迪、丹尼斯·里奇、珍·萨梅特、戴维·赛尔、埃里克·施密特、卡尔·夏皮罗、弗雷德·夏皮罗、迈克·谢里丹、约翰·肖奇、查尔斯·西蒙尼、理查德·斯托曼、盖伊·斯蒂尔、本贾尼·斯特劳斯特卢普、兰迪·特布什、查尔斯·泰克、肯·汤普森、林纳斯·托瓦兹、约瑟夫·特劳布、盖伊·特里布尔、亚瑟·范·霍夫、莫里斯·威尔克斯、王文科、理查德·索尔·沃尔曼以及欧文·齐勒等。

此外,还要感谢我的朋友和同事约翰·马尔科夫。感谢他的忠告以及在旧金山容我借宿,也感谢他的耐心,在我销假回去工作后,他才请假写作他的书。另外,还要谢谢他的妻子莱斯利·特齐安热情款待我这样一位常客。

最后,一如既往地感谢特里和尼基。第1章引言:软件和编程艺术的兴起

秋高气爽的黄昏,凭窗远眺,华盛顿湖碧波荡漾,一叶孤舟划过,泛起层层涟漪。远处的地平线上,依稀可见西雅图市的轮廓。这就是从查尔斯·西蒙尼位于华盛顿湖畔的家中看到的景象。1966年,这位年仅17岁的电脑编程奇才离开了匈牙利首都布达佩斯,远走他乡,从此开始了非凡的人生历程。他这幢房子依山傍水,占地1800多平方米,配有图书馆、计算机实验室、健身中心和游泳池。不过,从公路上几乎完全看不到。整套房子从内到外都由玻璃、木头和钢材建造而成,堪称现代主义的典范。黑色的磨光石地板闪闪发光,访客需要换鞋方可进入。墙上仅挂了几幅洛伊·李奇登斯坦、贾斯培·琼斯和维克托·瓦萨雷里的现代主义画作。除了这些艺术品,西蒙尼还收藏喷气式飞机。他收藏了两架飞机,其中包括他驾驶过的一架已经退役的北约战斗机。此外,他慷慨大方,曾捐赠数百万美元支持高校科研,牛津大学因此设立了一个以他的名字命名的教授席位,普林斯顿高级研究院还将他的名字刻在了数学系大楼上。年少的西蒙尼逃离匈牙利时一无所有,但是现在,已是亿万富翁的他却视金钱为无物。他说:1“我现在已经不再为了逐利而做事。”

1.2000年10月10日,作者访谈。

谈起他所取得的成绩,西蒙尼把这一切都归功于软件业的兴起,以及他在编写计算机代码方面的天赋异禀,当然,还有机遇、运气以及资本市场的反复无常。他的职业生涯始于20世纪60年代中期,那时他在匈牙利中央统计局工作,有点像美国青少年电脑黑客。他涉猎广泛,不断充实自己,自学了如何在俄制的Ural II电脑上进行编程。论计算机发展水平,布达佩斯还处于20世纪50年代早期的技术水平,比西方落后了几十年。多年来,软件不断发展,编程人员的视线不再局限于二进制数字或数位——机器语言0和1。但是,西蒙尼尝试用纯粹的机器语言与计算机对话。“那是编程的石器时代,”他回忆道,“我穿越了时间隧道。”

移民美国后,西蒙尼就把他的名字卡罗利改为了查尔斯。他先后进入加州大学伯克利分校和斯坦福大学学习,毕业后就职于施乐公司帕洛阿尔托研究中心(Xerox PARC)。那时正值20世纪70年代的黄金时期,他们的团队进行了大量的研究和开发工作,正是这些工作使人们使用个人电脑的方式初具雏形。在施乐帕洛阿尔托研究中心,西蒙尼是Bravo最重要的开发者。Bravo是一种全新的书写和文本编辑程序,可以在电脑屏幕上显示单词,就像熟练的排字工捡字那样。这就是后来广为人知的“所见即所得”(WYSIWYG,What You See Is What You Get)功能,它开启了桌面出版(desktop publishing)的大门,个人电脑从而成为提高个体创造力的工具。

但是,施乐公司并没有真正意识到帕洛阿尔托实验室工作的重要性。西蒙尼看透了这一点,并开始另谋高就。1980年夏季,他低调地拜访了西雅图城外一家在个人电脑行业初出茅庐的小公司——微软。虽然公司刚刚起步,仅有40名员工,但在这里,西蒙尼看到了希望。他和比尔·盖茨一见如故,于是加入了微软。

微软的Word文本编辑器如今已是世界上使用最广泛的软件程序之一,它是Bravo的商业化产物,西蒙尼则是当之无愧的“Word之父”。在他看来,个人电脑只是软件的传递载体,给用户很大帮助,并使编程人员如虎添翼。“写下几行代码,瞬间就能改变亿万人的生2活,”他说,“这就是软件。”

2.1999年11月18日,作者访谈。

从微软退休前的最后几年中,西蒙尼一直致力于一个重要的研发项目,旨在大大提高计算机编程人员的生产力。他认为编程人员目前使用的工具和方法依然过于原始,限制了人类智力在软件开发过程中的发挥,从而阻碍了软件业的发展。尽管如此,西蒙尼还是对软件的兴起赞叹不已:“这表明软件的力量强大无比。即使用现有的简单工具,软件也能做那么多事,这太神奇了!”战后,软件业作为一个探索领域、一个行业以及通信与商业之间的媒介,取得了令人瞩目的迅速发展,而这一切几乎都发生得悄无声息。计算机编程的起源至少可追溯到19世纪。当时英国数学家查尔斯·巴贝奇正致力于解决分析机的计算问题;分析机是现代计算机概念化的雏形。今天,我们可以将其所做的事情称为编程。编程中最基本的概念是算法,即执行某种操作的一组指令,或者说是计算的方法。追根溯源的话,算法(algorithm)最早出3现在巴比伦,而algorithm这个词则是对波斯学者Muhammad ibn 4Musa al-Khwarizmi姓氏的讹传,他写过一篇关于代数方法的专著。3.马丁·坎贝尔-凯利和威廉·埃斯普瑞,Computer: A History of the Information Machine,第181页。4.波斯数学家。高德纳,《计算机程序设计艺术,卷1:基本算法》,第1-2页。但是,在第二次世界大战之前,电子技术还不够先进,人们尚未开发出有用的计算机。早期的编程只是后期任务的附属工作,更像是技术人员烦琐的劳动,通常被认为是机器的“设置”或“编码”。真正吸引人的是硬件,因为它被认为是真正的科学和工程。人们普遍认为,电子数字集成器和计算器,即ENIAC(Electronic Numerical Integrator and Computer),才是开启数字电子计算时代的关键所在。其实,这台存放于宾夕法尼亚大学的机器只是一台裸机。操作人员必须对这台机器进行手动设置,插拔那些让人眼花缭乱的线缆,并把一排一排的开关放到正确的位置。每解决一个新问题似乎都要重建机器,因为它采用的是硬接线方式。为此,当局雇用了一些具备数学技能的年轻女士,并对她们进行了培训。这些女性程序员称为“计算员”(computer),这个词可追溯至18世纪,专门指那些为绘制地图或航海图而编制统计表的计算者。对ENIAC进行编程,使其计算出火炮的弹道轨迹,这是一项艰难的工作,但却是美国国防部指定的任务。为此,这些女程序员想出了一些技巧来简化流程。她们先在纸上画出详尽的图表,并标出在这台机器上可以解决问题的最有效方法。然后,她们再5对机器进行手动设置。珍·巴蒂克这样回忆道:“我们清楚地知道如何设置每一条线和每一个开关。”这种操作可能会花费好几个星期的时间。不过,正是由于她们的努力,ENIAC的公开演示才获得了巨大成功:一条炮弹轨迹用很短的时间就能计算出来,比炮弹本身的飞行速度还快。巴蒂克回忆道:“那简直棒极了,是我一6生中最激动的一天。”当时已是战后,1946年的春天。5.2000年9月11日,访谈。6.摘自1995年2月10日出版的珍·巴蒂克21页的个人史,第9页。对于新兴职业的从业者来说,他们的职业称谓变化很快。人工的“计算员”(computer)变成了“编码员”(coder),然后,这个平淡无奇的称谓又被“程序员”(programmer)势不可当地取代了。事实上,这是英国从业者的贡献。很明显,新称谓听起来更有身份,也更具文学气息。葛丽丝·霍普是软件方面的领军人物,于1944年开始在哈佛Mark I上从事战备方程式的计算。她一直认为,用“编程”(programming)这个词来形容初期的工作过于高尚。“直到从英国传过来,‘程序员’这个词才开始广泛使用。”她回忆道,“事实上,我认为,书写机器代码的过程就是编码,我们应该留着‘编程’这个词来描述更高一级的工作。但是,它是从英国传过来的,而且比编码员要好听得多,于是每个人都7想被称为程序员。”7.克里斯托弗·埃文斯1976在加州对葛丽丝·霍普的访谈,现为查尔斯·巴贝奇研究所口述历史项目的一部分,印刷本,第8页。由于计算机设计上的突破,更高一级的编程很快就成为现实。这个想法最初源于ENIAC工作团队,随后,1945年6月发表的由约翰·冯·诺依曼撰写的文章“关于EDVAC的报告初稿”(A First Draft of a Report on the EDVAC)对其进行了详尽的阐述。作为著名的数学家和博弈理论家,冯·诺依曼受聘担任原子弹开发项目“曼哈顿计划”的顾问。原子弹的设计需要成千上万次的计算,当时主要是由大量计算员借助台式计算机来完成的。计算机的潜力引起了冯·诺依曼的兴趣,于是他在1944年成为了ENIAC项目的顾问。后来,在ENIAC的基础之上,经过改进,又有了EDVAC(Electronic Discrete Variable Automatic Computer),即电子离散型变量自动计算机。除了冯·诺依曼,还有很多人参与设计了EDVAC,其中最为著名的便是ENIAC项目负责人J.普雷斯普尔·埃克特和约翰·莫克利,但由于最终负责撰写报告的是冯·诺依曼,因此他获得了设计“存储程序式计算机”的殊荣。这种设计思路就是后来广为人知的冯·诺依曼架构。事实上,现在所有的计算机使用的都是冯·诺依曼架构。第二次世界大战后,早期的存储程序式计算机才真正开始出现。存储程序的理念在于,不仅计算机的数据——当时用于计算的主要是数字——而且程序指令也会储存在机器中。从某种程度上来说,这无疑能够提高效率,并能实现计算自动化。由于程序指令可以设置到打孔卡片或纸带上,与将要处理的数据一起存入计算机中,所以,再也不用手动设置开关和线缆了。然而,存储程序这个概念还有更深刻的含义。用计算机科学家巴特勒·兰普森的话来说,它使软件构建成为了一门“独特的自8引用”工程学科,因为所有的计算机制都可以应用在自身中。也就是说,存储程序式计算机可使程序修改其他程序或创建新的程序。正是有了这种以计算机为中介的编程交互方式,如今的计算机编程语言才远远超越二进制0和1的组合,更易于人类理解。这种编程交互方式相当于计算机内部的数字生态环境:一段代码迅速跳到进程外去修改其他代码,而后者又会循环回来与其他代码混合。无论是电脑游戏、互联网,还是人工智能,所有这一切都源于代码的这种组合、重组以及持续地自我修正的能力。8.2001年1月5日,访谈。早期存储程序式计算机的开发人员最早体会到了编程的复杂性,而且这种复杂性常常是无法预料的。剑桥大学的莫里斯·威尔克斯率领的团队制造了第一台存储程序式计算机,并投入运行。这台机器称为EDSAC(Electronic Delay Storage Automatic Calculator,电子延时存储自动计算器)。在回忆录中,威尔克斯还清楚地回忆起第一次认识到bug注定是程序员的克星时的情景。他这样写道:“到了1949年6月,人们已经意识到,要得到正确无9误的程序并不像看起来那么容易。”当时,威尔克斯正在研究他的第一个“重大项目”,而当他在剑桥大学的事业更上一层楼时,他回忆道:“我突然强烈地意识到,我接下来的时间都要花费在寻找程序的bug上了。”9.莫里斯·威尔克斯,Memoirs of a Computer Pioneer,第145页。

计算机投入应用很长一段时间之后,“软件”这个词才出现,可见人们对这种相当麻烦的技术只是勉强认同。1958年,在《美国数10学月刊》上,“软件”作为计算机术语首次在出版物上使用。普林斯顿大学的数学家约翰·杜奇在文中这样写道:“如今的‘软件’已包括精心设计的解释路径、编译器以及自动化编程的其他方面,对于现代电子计算器而言,其重要性丝毫不亚于那些由晶体管、转换器和线缆等构成的‘硬件’。”但这样的观点在当时并不普遍。

10.首次公开发表。该发现是耶鲁法学院的图书管理员弗雷德·夏皮罗做出的。“软件一词的来源:JSTOR电子期刊档案中的证据”,IEEE Annals of the History of Computing, 22(2000):第69-71页。

在当时的计算机工程文化氛围下,程序员曾长期被硬件人员轻视。后者认为程序员只不过是从事计算行业的一群放荡不羁的人,硬件才是真正的学科,因为硬件人员大都来自发展较完善的电子工程领域。那时,各个大学都已开设电子工程系,而且硬件的表现也符合物理、化学之类“硬科学”的严谨准则。虽然有些数学家也对计算机和编程着迷,但是他们往往沉迷于理论的高度,而不是编写代码和排查程序。直到20世纪60年代,随着计算机科学系的成立,编程才被学术界正式认可,并从此稳步发展。

在20世纪50年代以及此后的一段时间里,程序员的招聘和雇用几乎没有任何科学性可言。那时亟需编程技能:新员工必须经过培训,但是并没有可靠的方法测试其是否具备编程技能。“在报纸的广告里发现某个人,还没了解清楚,你可能就已经决定要雇用这个人了。在编程的早期就是这样,就像是在讲故事,”在20世纪50年代后期担任IBM编程研究部经理的罗伯特·贝莫这样说道,“我们就好像直接从大11街上招人回来一样。”刚刚从瓦萨学院毕业的洛伊丝·海波特于1955年加入IBM,成为FORTRAN编程语言开发团队的一员,该团队共有10人。她回忆道:“任何一个人,如桥牌玩家、象棋手,甚至是女性,12只要看起来具备解决问题的能力,就会被他们招入麾下。”作为IBM的经理,贝莫广泛撒网招揽人才。“我曾经决定以登广告的方式招募象棋手,因为我认为他们会成为相当出色的程序员。这招非常奏效。我们甚至招募到了全美象棋冠军亚瑟·比斯盖尔。此前,他大部分时间都在下棋,几乎没编过程序。”但是,事实证明,在编程领域,象棋手并不比常人更出色。1957年刊登在《纽约时报》《洛杉矶时报》以及《科学美国人》杂志上的广告,最终帮助贝莫招到了四五个合适的人,收获还算不错。贝莫估计,当时美国大概有1.5万名专业的程序员,约占全世界代码编写人员的80%。

11.IEEE Annals of the History of Computing,第6卷,第一期(1984年1月),第16-17页。

12.2000年9月11日,访谈。

如今,这种情况已大为改观。软件行业有了巨大的发展,全球拥13有近900万名专业程序员。在学术界,计算机科学已经成为受人尊重的领域,科研人员投入大量研究资金来探索软件的奥秘。我们有充分的理由相信,软件不仅赋予了个人电脑和互联网活力,还推动了电话、信用卡网络、机票预订系统、车辆燃料加注系统以及厨房用具等领域的发展。1999年,总统的科技顾问团队发现,软件已经成为“信息时代全新的物理基础设施”,是一种不可或缺的原材料,“对经14济发展、科技研究以及国家安全至关重要”。

13.斯蒂芬·亨德里克和卢多维克·布鲁诺,The 2001 IDC Professional Developer Model,2001年6月出版。2000年,国际数据公司的数字为873.9万,预计2011年增为978.3万。

14.总统信息技术咨询委员会1999年2月23日发布的Information Technology Research: Investing in Our Future。

的确,现代经济建立在软件基础之上,而且这种依赖性还会继续增强。商业周期和华尔街的狂热周而复始,转瞬即逝,但对软件的需求却从未间断。程序员就是信息时代的技师、工匠、砌砖工和建筑师。这些在早期都是难以想象的,因为没有人能预见迅猛的技术变革会带来什么——依赖硬件和软件的进步,计算领域得到了前所未有的拓展。约翰·冯·诺依曼和赫尔曼·高德斯汀是当时计算机领域的卓有远见者,他们在1946年写道,大约1000行的程序指令是“解决目前可以15想见的复杂问题的合理上限”。如今,一个电动牙刷就可能有3000行代码,而个人计算机程序则有数百万行的代码。

15.引自高德纳的《计算机程序设计艺术,卷1:基本算法》,第231页。

抛开其重要性不提,对于大多数人来说,计算机编程仍然很神秘。这不足为奇,毕竟,软件几乎是完全看不见、摸不着的东西,无法被人感知。但正是软件使计算机能够完成那些有用的、有趣的、令人愉悦的事情。计算机只不过是机器,它很强大,但也很愚蠢。在它们的世界里只有1和0、开或关。20世纪70年代的视频游戏Pong(《乒乓球》),用两条光束作为“球拍”,击打一个像光标一样的“球”,运行这款游戏的简单计算机所能看到的世界是这个样子的:0011101010101000011100011010101000

而曾在1997年击败世界象棋冠军加里·卡斯帕罗夫的IBM超级计算机“深蓝”,它所看到的世界也是这个样子的:0011101010101000011100011010101000

从本质上讲,这两台计算机只有两点区别。一是涡轮增压的位处理引擎使“深蓝”在速度和动力上占有优势,再就是软件。软件是人类智能的体现,是人和机器之间的中介,把我们的问题或命令传达给计算机。作为一个专业,编程是艺术、科学和工程的奇妙结合。软件开发仍然是一项异常艰苦、循序渐进的工作,它更像是手工艺,而不是机器魔法,它是一种以软件为中介的创造形式。正如厨师烹饪食物,画家创作油画一样,程序员编写代码。不过编程仍是一种实践性很强的艺术形式,热爱它的人们都会为程序有效运行的魅力以及创造事物的渴望所深深吸引。还是个孩子的时候,葛丽丝·霍普就会拆装闹钟;Unix操作系统的创始人肯·汤普森,在后院制作了火箭;电子表格软件的合作开发者丹·布里克林,用希斯套件(Heathkit)组装了家用电视机;Java编程语言的发明者詹姆斯·高斯林,在他祖父位于加拿大卡尔加里市的院子里,改装了旧农机。对那些天生迷恋编程的人来说,创造事物似乎能带来真正的快感,软件尤其能带给他们这种体验,因为它是没有实体约束的中间体。程序员不用钢筋、玻璃和混凝土,就能够建造模拟的城市;不用铝、喷气发动机和轮胎,就能够制造模拟的飞机;不用光、热和水,就能够模拟天气。程序员可以用计算机把想法变成现实,至少是视觉上的真实感,并在自己创造的虚拟世界中对其进行测试。

计算机编程的大部分历史可看成是努力扩大其使用范围的过程,即让更多的人能够更容易地编程。FORTRAN是第一个真正意义上的编程语言,旨在使科研人员和工程技术人员轻松自如地编程。COBOL则是为了让商务人士能随心所欲地进行编程。经过多年的发展,编程已经不像原来那么繁重困难了。不过,理想的情况是让每个人都能编程。早在20世纪60年代,就有人提出这种愿景,但至今仍未实现,虽然编程已取得了长足的进步。现在,几乎每个人都会使用计算机,数万甚至数百万人都能够完成诸如制作网页或者在电子表格中创建财务模型所需要的基本编程。

然而,更重要也更值得一提的是,迄今为止,大部分编程仍然局限于精英阶层。目前,人们已针对熟练的程序员开展了研究。研究表明,他们在智力上的确具备某种特质。他们属于那种对工作之外的事情同样怀有浓厚兴趣的人。例如,对科幻小说感兴趣的程序员会特别关注一两个作者,对音乐、休闲活动或者其他方面感兴趣的程序员也是如此。这种较高的智商和高度的专注正是编程所需要的。心理学领域的研究人员在研究心流时曾观察过软件程序员。“心流”状态指的是,注意力高度集中,全身心投入,心智水平达到最高。这种身心合一的境界就如同运动员进入“状态”。

不过,这类研究只能表明如何才能成为天才程序员以及哪些人具备这样的潜质。“某些人确实非常适合做程序员,他们比具有其他同等教育水平和同等智商的人在这一方面好很多倍,”莱斯大学的计算机科学教授肯·肯尼迪这样说道,“现在我们还不能真正理解这种现16象。”这进一步表明,编程不仅是一门科学,还是一门艺术。

16.2000年6月19日,访谈。

斯坦福大学的荣誉教授高德纳终生都在教授学生掌握这项技能。计算机科学能够成为一门学科,高德纳功不可没。他以编写软件方面的权威著作《计算机程序设计艺术》而闻名于世。他从1962年开始17动笔撰写,目前已出版了三卷。他的家在斯坦福大学后面的山丘上,二楼的书房里摆着一排排的书。高德纳在书房里说道:“确实有少部分大学生——大概2%左右——具备异于常人的心智,擅长计算机编程。他们精于此道,智慧如同泉涌……只有这些人才能让计算机做到18令人惊叹的事情。我希望这不是真的,但是事实就是如此。”

17.2011年出版了第4卷的第一部分4A卷。——编者注

18.2000年12月7日,访谈。

本书讲述的就是这些具有特殊心智的极少数人的故事,他们能够利用代码创造出神奇的世界。本书只是代表性地——绝非结论性地——对计算机编程历史进行回顾,主要讲述那些著名人物的生平事迹以及他们开发的软件。第2章FORTRAN:早期的“转折点”

1952年8月,IBM的新型豪华计算机——国防计算机(Defense Calculator)已经准备好接受试验。包括洛斯阿拉莫斯核武器实验室、道格拉斯飞机公司、洛克希德飞机公司在内的六家客户早已预订了这款机器,而且他们还被邀请到IBM的波基普西工厂,第一时间目睹这台机器的风采。计算机用于计算尚处于初级阶段,是继实验室试验之后迈出的第一步。对这种电子庞然大物感兴趣的主要是美国国防部及相关保密部门,还有新兴的航空企业。他们主要想借助这种庞大的机器使乏味的科学计算过程实现自动化。当时,这项工作是由大量办公室职员用台式计算器手动完成的。后来,人们才逐渐意识到,这种计算机的性能要远远超过那些大的加法机。如果程序编得好,这些计算机完全可以用于探索新的知识领域。

国防计算机的研制始于朝鲜战争。1950年,朝鲜战争爆发,美国迫切需要生产新型飞机和新型武器。当时,第二次世界大战刚刚结束5年,这些装备的设计和生产意味着对工程计算的需求再度激增。美国国防部及其企业供应商都是财大气粗的客户,但是像他们这样的买家数量并不多。况且,电子计算机不知疲倦的计算能力在国防部门之外是否还有获利的空间也尚未可知。

对此,IBM内部有两种意见。以小托马斯·沃森为首的拥护派、科学家和年轻管理人员认为,对计算的需求将会广泛扩展。雷明顿·兰德公司已经把一台UNIVAC计算机卖给了人口调查局,这就是很好的佐证。持怀疑态度的一派,包括IBM的董事长老托马斯·沃森以及大多数资深管理人员,担心客户太少,而且制造这样极具技术挑战性的机器将会耗尽公司的工程资源。1951年年初,研发新机器的计划获得1了批准,不过,鉴于内部怀疑派的意见,这台机器取名为“国防计算机”,表明这是为战争服务的特殊项目。

1.查尔斯·拜什等人,IBM's Early Computers,第130-135页。

虽然取名为国防计算机,但它是一台存储程序计算机,因此也是一台通用的机器,一旦收到程序指令就能开始处理各种问题。实际上,这台机器在1953年4月面世时,已经改名为IBM 701,成为IBM 700系列的首台机器。该系列为IBM奠定了世界主要计算机生产商的地位。按照当时的标准,701属于小巧时尚的机型。整个系统由一些独立的单元集合而成,看起来就像百货公司陈列的20世纪50年代的厨房家电:一对纸带阅读机像巨大的橱式电视机,打印机像个烤箱,阴极射线存储器就像冰箱。1952年夏天,当那些特邀观众在波基普西工厂一睹701计算机的风采时,其运行速度给他们留下了深刻的印象。他们带来试样程序,编码之后在纸带上打孔。“他们都被这台计算机惊2呆了,”当时在场的IBM的高级管理者卡思伯特·赫德这样回忆道,“刚把程序输进计算机,计算结果就出来了……我们都坐在那儿,说,怎样才能让这台机器一直忙下去?它简直太快了。我们怎样才能做到?”

2.出自1982年5月26日IBM的FORTRAN纪录片,13分钟。毫无疑问,20世纪50年代,IBM研发的这台巨大而又昂贵的机器,数据处理能力并不高,甚至不及今天手提电脑的十分之一。但在1952年,701却是一台运行速度极快的庞然大物。因此,IBM陷入左右为难的境地——计算机软件和计算机硬件是两个截然不同的领域,但二者又必须相互依赖,正如太极中的阴和阳,缺一不可。要回答赫德关于如何才能让这台高速计算机一直忙下去的疑问,其实很简单,那就是把更多的问题输入机器。但是还有一个瓶颈,那就是编程。要把工程或科技问题输入计算机,准备工作既艰难烦琐又枯燥乏味,可能要花好几个星期的时间,而且还需要专门的技能。只有很少一部分人具备这种与机器对话的神奇能力,就像原始社会的大祭司一样。然而,这些祭司里面也有离经叛道之人,年轻的程序员约翰·巴克斯就是其中之一。巴克斯曾在“与机器的较量”中受挫,于是他迫切地希望能加快速度、简化编程。“我猜一定有3更好的办法,让编程变得更容易。”将近50年之后,在位于旧金山可以俯瞰金门大桥的家里,巴克斯如此回忆道。

3.若无其他注释,则全部引自巴克斯,大部分对他背景及作品的描述源自四次访谈。其中,两次面谈分别于2000年8月7日和9月29日在他旧金山的家中进行,另两次是2001年4月27日和5月3日的电话采访。1953年年末,巴克斯给赫德写了一封简短的信,请求赫德允许他寻找一种更好的编程方法。得到赫德首肯之后,这个研究项目开始启动,并最终在1957年取得了历史性的突破,发明了名为FORTRAN的计算机编程语言。项目组的管理一直都很宽松,工作环境也很随意。尽管这个研究项目不断扩展,完成时间一次又一次地推迟,但巴克斯从未做过正式的预算。FORTRAN的研发团队4是逐步建立起来的,成员一个接一个地加入,最终达到10个人。这是一个年轻的团队,当FORTRAN正式对外发布时,他们才20多岁或者30岁出头。由于当时大量的计算都涉及数字分析、数学运算和分类整理,所以整个团队都要接受数学方面的强化训练。4.IBM的部分资料显示是11个人,包括葛丽丝·米切尔。依据巴克斯和齐勒的说法,葛丽丝致力于参考手册以及向用户传播FORTRAN I。不过,他们仍然是别具一格的一群人,有晶体学家、密码员、象棋高手、从联合飞机公司借来的雇员、麻省理工学院的研究员,还有刚刚从瓦萨学院毕业的女大学生。这些人在一个开放的环境里共同工作,办公桌并排摆放在一起。事实上,他们经常在夜间工作,因为只有这个时候才有宝贵的上机时间,对代码进行测试和调试。除了一起工作,紧密配合之外,他们还共度闲暇时光,例如,午餐时一起下象棋,冬天即兴打雪仗。他们彼此了解,友情也日益深厚,熟悉各自的代码以及工作的机器,甚至是机器的每个部件。而且他们当时都是这个行业的门外汉,成功的5机会看起来微乎其微。“我们是当时的黑客。”理查德·戈德堡在76岁高龄时如此回忆道。5.2000年9月12日,访谈。FORTRAN团队的成功具有双重意义。首先,他们开发出一种像是结合了英语速记和代数的编程语言。这是一种计算机特有的语言,与科学家和工程师日常工作中使用的代数公式非常相似。因此,FORTRAN向当时那些需要借助计算机解决问题的人们开启了编程的大门。只要稍加训练,他们就再也不用依赖那些计算祭司把自己的问题翻译成机器语言了。FORTRAN将人与计算机的交流提高了一个层次,更加接近人类,同时更加远离机器。这就是为什么FORTRAN被称为第一个高级语言。此外,更重要的是,FORTRAN运行良好。它生成的程序的运行效率与那些最优秀的程序员辛辛苦苦手动编写出来的程序一样。正是由于在编程自动化方面的飞跃,FORTRAN才被人们采用。机器时间是成本高昂的宝贵资源。如果用FORTRAN编写的程序运行速度很慢,比手编程序还要消耗更多的机器时间,那么它就不具备经济实用性了。当时人们认为,没有什么能比得上手工编程的效率。然而,IBM团队巧妙地设计了FORTRAN编译器,结果成功地做到了这一点。简单来说,编译器本身就是一个程序,它可以捕获输入的程序中的人类意图,并按照机器可以理解和执行的方式,对程序进行改写。新版本的FORTRAN语言仍然广泛应用于某些科学计算任务中,例如,天气预测、建立气候变化模型以及高能物理等方面的数字分析。直到现在,那些经验丰富的计算机科学家和程序员依然对FORTRAN念念不忘,因为FORTRAN是他们学习的第一种编程语言。但是后来由于要适应更新的计算类型,所以新开发出来的语言逐渐取代了FORTRAN。从某种程度上来说,FORTRAN是编程的源头。无论编程工具更新换代的速度有多快,FORTRAN给软件世界带来的巨大进步都不可磨灭。其他程序语言都是在FORTRAN建立的基础上发展起来的。杰出的计算机历史学家、弗吉尼亚理工大学教授J.A.N.李称,FORTRAN是编程语言及编译器6技术(软件的等效晶体管)发展过程中的“转折点”。1969年在贝尔实验室设计了Unix操作系统的肯·汤普森指出:“如果没有FORTRAN,95%的早期编程人员将一事无成。FORTRAN是一个7巨大的进步。”或者,正像现在微软的软件研究领军人物吉姆·格8雷说的那样:“一切都从FORTRAN开始。”6.“程序语言,过去、现在和未来”,《IEEE展望未来》,学生通讯,1996年秋。7.2000年9月22日,访谈。8.2000年9月11日,写给作者的邮件。

约翰·巴克斯走上计算机科学之路实属偶然。他出生在美国特拉华州的威尔明顿市。他的父亲塞西尔·巴克斯白手起家,本来要成为一名药剂师,后来却转行当了股票经纪人。作为一家经纪公司的合伙人,塞西尔·巴克斯的事业逐渐做大,家境也开始富裕,并颇具社会声望。孩提时候的巴克斯喜欢用自己钟爱的化学仪器做实验。在他差不多12岁的时候,另一个小孩不小心把摩托车开到了海里,因为没法再骑便把它扔了,但巴克斯却让这台摩托车起死回生。他回忆起这段往事时还颇为得意,说:“我一直喜欢鼓捣机械类的东西。”此时的他已经一头灰白的短发,略显消瘦,脸上总是一副谦逊的表情。

在76岁高龄时,巴克斯还欣然称自己为“小发明爱好者”。他坦承自己痴迷于掌上控制器,开玩笑说“离了它就没法儿活”。他给大门和车库门加装了自制的远程自动遥控装置。此外,他还自己摸索着做了一个电视机顶盒,仅用一个大容量的计算机磁盘,加上巧妙的编程,就能让看电视的人跳过广告节目,在看现场直播时可以暂停,而且基于数据库搜索还可以记录下电视节目。“这是个很棒的发明,”巴克斯高兴地说道,“它将改变电视行业!”

巴克斯不是个听话的学生,与家人的关系也复杂而紧张。父母把他送到封闭的私立高中,即宾夕法尼亚州波茨敦市的希尔学校。他的学习成绩很糟,因此每个暑假家人都要把他送进学习营,让他预习接下来的秋季课程。“考试不及格就意味着我可以不回家了,这才是我8喜欢的。”巴克斯说道。对他来说,在希尔学校待着就是要解决各种问题的挑战,“在那里的乐趣就是打破一切规则”。上了大学,他对待正规教育的态度依然没有任何改变。因此,在弗吉尼亚大学只呆了两个学期,他就因成绩不好退学了。

他在学习上的平庸表现,并非因为智力低下,随后的军旅生涯很快就证明了这一点。1943年,从弗吉尼亚大学退学后不久,巴克斯就应征入伍了。由于在军队的能力测试中表现出色,巴克斯首先被选送到匹兹堡大学学习工程课程,后来又到哈弗福德学院(Haverford College)学习医学预科的课程。虽然觉得学习医学很枯燥,但是他之后还是参与了纽约医学院在曼哈顿的一个由政府资助的项目。“学医好像就是死记硬背操作步骤和身体部位。”他回忆道。

随后,在决定何去何从的一段时间内,巴克斯,这位古典音乐发烧友,觉得他在曼哈顿的小公寓需要一套好的音响系统。他开始构建自己的高保真音响设备,并且很快参加了学校里一个为无线电技师开办的课程。为了做出扩音器,巴克斯必须计算出声波曲线上的点。他发现解决数学问题虽然艰难却引人入胜。他说:“做这样的计算叫人发怵,但不知为什么也多少引起了我对数学的兴趣。”于是他申请了哥伦比亚大学。鉴于他复杂的学习经历,校方同意他成为试读生。结果,他在哥伦比亚表现优异,不仅完成了学士学位的课程,还在1950年获得了数学硕士学位。就在从哥伦比亚大学毕业前的一个春日,巴克斯参观了位于第57大街和麦迪逊大道交汇处的IBM总部。之前他听说那台巨大的科学计算机器就陈列在那儿,出于对机械装置的痴迷,他想去看一看。IBM把这台计算机安放在一楼,以方便那些好奇的游客从大街上就可以看到它。数千只闪光的灯管,噼啪作响的开关,打孔的卡片发出哗哗的声音,纸带呼呼地转动……这台奇妙的电子装置让无数路人为之震撼,装置虽复杂但设计很精巧。过往的行人可能并不清楚这台计算机是由什么做成的,却难以抑制心中的冲动,纷纷要给它取个名字,年复一年,从未停止。最终他们称之为“Poppa”。巴克斯很想近距离观察,便鼓起勇气走到里面,一位女士带他简单地参观了一下,并向他介绍了这台名为SSEC(Selective Sequence Electronic Calculator,选择性顺序电子计算器)的装置的各个零部件。他向这位女士提起他是哥伦比亚大学的数学专业研究生,现在正在找工作。于是,她说可以带他直接上去见SSEC的联合发明人罗伯特·雷克斯·席伯。巴克斯记得他当即表示反对,说:“我没打领带,外衣袖子上还有个洞,而且我对计算机一窍不通。”那位女士却坚持说这不是问题,于是带他上楼去见席伯。简短的寒暄之后,席伯问了一连串的问题,巴克斯把这些问题形容为“脑筋急转弯”,诸如怎样用10位的计算器进行20位数字的排列和加法运算。巴克斯回忆说,这就像一次不计成绩的非正式口头测验。席伯当场决定录用他。做什么工作呢?“程序员,”他耸耸肩,回忆说,“在当时这可是不错的出路。”巴克斯加入IBM时,公司、行业以及计算机技术都处于快速转型的时期。数十年间,诸如IBM、雷明顿·兰德公司、宝来公司以及NCR等厂商凭借生产商用计算器发展壮大起来。大批量生产、现代铁路和汽车运输的兴起,以及全国电话网络系统的发展带动了规模经济的发展。企业的发展也必须顺应这一趋势,在公司大规模增长时期,计算器有助于管理人员对员工工资、库存和销售等进行跟踪。但是,在第二次世界大战的推动下,技术和计算器生产商超越了商用的电动机器,快速转向了适用于航空和国防市场的电子工程。SSEC被IBM称为超级计算器,它反映了上述趋势。但这台独一无二的机器,实质上只是IBM的一个科研项目,仅设计制造了一台,旨在帮助IBM的研究人员突破电子计算器的极限并获取经验。SSEC并不是存储程序计算机,但在1948年,它刚刚制造完成时,却是最先进的,也是当时计算能力最强的机器。然而,老托马斯·沃森十分在意“computer”这个词,因为它常用来指从事计算工作的人员(即计算员),沃森担心使用它将会引起公众的恐慌,害怕这种新技术会导致他们失业。由此看来,老沃森不愿意使用“计算机”(computer)这个词是可以理解的。公众的这种担忧一直持续了多年。1957年,由斯宾塞·屈塞和凯瑟琳·赫本主演的《电脑风云》是一部深受观众喜爱的电影,用浪漫喜剧的手法展现了计算机在一家大公司里引起的不安。伯尼·沃森(赫本饰演)坚持认为,一台名叫EMERAC的计算机会取代她部门的员工,而理查德·萨姆纳(屈塞饰演)不仅负责看管这台机器,还负责削减人员。可想而知,结局是伯尼的担心毫无依据,20世纪50年代的电影常以这种方式收场。巴克斯是从SSEC开始编程的。他编写的程序主要用于大规模科学计算,例如计算出数年间任意时刻月亮及其附近行星位置的程序,这需要无休止地处理系数。巴克斯回忆道:“这是纯粹的科学。”研究可能是崇高的,但编程却像一场阵地战。就像战时的ENIAC一样,SSEC每接受一个任务,都必须重新配置。当研究人员用数学方法解决难题以后,还必须将其输入到这台机器中。这就需要设计复杂的流程图,使计算能够以通用的形式输入机器。接下来还要在预先打印的纸张上逐条按照指令拟定好计算的步骤,这是一项艰难而又烦琐的工作。然后,手动设置每个批次的计算,比如哪些开关要关闭、哪些电线要接入哪些电路,才能使这台超级计算器重新开始工作。设计SSEC上的大型程序可能需要几个月的时间,随后又要在机器上运行6个月。平均每3分钟它就可能会停止运行,需要编程人员做进一步的处理。巴克斯说:“作为程序员,你一刻也不能离开。”如果出现问题,可能要断开机器上数以千计的灯管,而且还要查阅二进制编码的数字才能找出解决问题的线索。调试机器还要借助听力。回路的断开和闭合靠的是继电器,它是装在弹簧上的金属棒,在电磁推力的作用下才能弹起。数千个继电器以不同的排列顺序安装在回路中,时常发出震耳欲聋的声响,但并不是不规则的工业噪声。从机器的某个角落发出的重复节奏,在训练有素的程序员听来像听破录音带一样别扭,这就意味着程序在某个计算环节卡壳了。后来,当新一代701国防计算器问世时,无声的电子开关代替了机械继电器,巴克斯回忆说有一种惶恐不安的感觉:“我想知道,怎样才能为这个安静的大怪物排查错误。”说起自己和这台超级计算器较量的那些日子,巴克斯充满了对旧时光的怀念之情。“噢,这机器太复杂了,真的,而且那时还没有教科书。这些约束真是挑战……我们有太多的机会来展现自己的创造才能了,几乎每时每刻都在创新。”

在1953年写给老板的信中,巴克斯提出了编程项目的建议,并着重强调了其在经济方面的重要作用。首先,当时每台装置通常配有30个编程人员,这些编程人员的薪酬成本和计算机本身的成本相差9无几(701国防计算机每月的租金为1.5万美元,相当于现在的10万美元)。其次,对于编程人员来说,1/4到1/2的计算时间都花在了排查错误上。因此,实际上,编程和检错占了整体成本的3/4。随着硬件的快速更新和价格的下降,编程成本所占的比例似乎还会更高。这是个大问题,并且会越来越突出。卡思伯特·赫德看过这封信后,立即批准了巴克斯的请求,马上启动编程研究项目。巴克斯回忆道:10“他明白这个项目的重要性。”

9.2000年8月7日,访谈。

10.IBM's Early Computers,第162页。

1954年1月,巴克斯迎来了首位新人,欧文·齐勒。欧文·齐勒是布鲁克林大学的研究生,1952年加入了IBM,从事电子计算器“插线板”的编程工作。当时的计算器由一系列的插线板组成,插线板大约长28厘米、宽21厘米,上面布满了小孔,可以手动把电线连接到这些小孔上。这又是一种硬件编程。完成之后的插线板看起来就像是板子上长出了密密麻麻的线缆丛一样。齐勒很快就显示出自己在编程插线板方面的聪明才智和非凡才能。他在纽约里弗代尔区的公寓里,详细生动地讲述了从事插线板编程的那段岁月:“可以想见,这是相当11枯燥的工作,那些从事插线板工作的人都能意识到,简化编程是一种迫切需要。”因此,当征求他的意见时,他当即同意加入巴克斯的项目团队。

11.2000年8月7日,访谈。

不久,第三位成员哈兰·赫里克加入了这个团队。他是爱荷华州立大学数学专业的毕业生,还是一位出色的象棋手,曾经赢得过美国中西部地区的锦标赛。他还获得了耶鲁大学研究生课程的奖学金,但是他在那里并不开心。当看到一篇有关IBM SSEC的文章后,他便申请了编程的工作,并被录用。加入FORTRAN团队时,他已经拥有5年为IBM SSEC和701机器进行编程的经验,这段经历使他成为了一个毫无激情的编程老手。在IBM内部,赫里克被称为天才程序员,对于FORTRAN取得的成功,他功不可没。然而,刚开始的时候,他却最持怀疑态度,因为他已经完全沉浸在当时的人工编程实践之中。当巴克斯告诉他这个项目时,赫里克有点不屑一顾。“我说:‘约翰,我们不可能让一种语言像真正的程序员那样生成机器代码并达到像我这12样的程序员的效率。’”赫里克在1982年这样回忆道,“我可是个很棒的程序员,你不知道吗?”

12.若无其他注释,则全部引自欧文·齐勒的三次访谈:2000年9月12日,11月2日和2001年4月27日。

由于编程工作对智力有很高的要求,当时的程序员根本不相信,甚至还有些鄙视用编程语言代替他们工作的想法。程序员必须精通二进制的机器语言。试一试最简单的数字转换,二进制的机器语言01代表1,10代表2,11代表3。而100表示4,因为4是2的平方,需要在第三列加一位。这些列向左移一位,代表2的乘方或倍数。8是2的三次方,因此,1000代表8(2×2×2)。同样,100000000代表256,即2的八次方。起初,人们觉得1和0的二进制体系过于难懂,有些“不自然”。不过,部分原因也在于我们已经完全习惯了基于10的数字体系,即每个数位都是10的乘方。基于10的体系被称为十进制,之所以令人感觉舒服,是因为它与人类天然的计数工具是一致的——10根手指就是我们的数字。

程序员开始使用二进制的早期简化工具是八进制。八进制是基于8的数字体系,包含8个数字(0、1、2、3、4、5、6、7),其数位左移表示8的乘方。采用八进制是因为对人来说它相对容易读数,与二进制相比也更容易,而且还能转换成机器的二进制。原因在于,再次强调一下,8是2的倍数。对于早期的程序员来说,八进制是第二自13然的方式。“我们曾开玩笑说要用八进制开支票。”FORTRAN团队的成员洛伊丝·海波特说道。甚至还有关于八进制的段子:“为什么程序员分不清圣诞节(12月25日)和万圣节(10月31日)?因为十进制14的25等于八进制的31。”这个笑话的奥秘在于,如果写出来的话,15就变成了Dec(imal)25=Oct(al)31。(八进制的31,也就是3×8加上1,等于十进制的25。)20世纪60年代以来,由于计算机和软件越来越大、越来越复杂,当程序员确实需要从机器的层面理解问题时,他们普遍采用基于16的计数系统,即以十六进制作为二进制的速写法。十六进制使用的符号是0~9和A~F。13.1982年IBM文件记录。14.Decimal意为十进制,而十二月是December,均简写为Dec;Octal意为八进制,而十月是October,均简写为Oct。——译者注15.2000年9月18日,访谈。

减少编程难度的进一步措施是开发“汇编”程序。这样程序员可以用助忆缩写的方式来书写指令,例如可以用LD表示load,或MPY表示multiply,后面再加一个数字指代计算机内存中的某个位置。然后,用小的汇编程序翻译这些象征性的符号指令,或者说“汇编”成二进制,这样机器就可以执行这些指令。这些速记符号、缩写和数字的混合语,称为汇编语言。当时每种计算机都有自己的汇编语言,而每台机器的环境就像中世纪的封地一样,有其独特的方言。尽管如此,在通向FORTRAN及其编译器这样的高级语言的道路上,汇编语言以及汇编程序仍是至关重要的步骤。

汇编语言最早出现在英国,剑桥大学的EDSAC是第一台运行的存储程序计算机。剑桥大学的编程创新也是出于同样的考虑:鼓舞FORTRAN团队以及后来的软件开发人员。“最初的目的是让人无需经16过专门的培训就能轻松地使用。”戴维·维勒回忆道。他在1948年秋加入剑桥项目组时还只是个21岁的研究员。维勒负责为EDSAC编写汇编程序,他称之为“原始命令”,即30行巧妙而又简洁的指令。原始命令被翻译成了用简单的汇编语言写成的二进制指令。例如,告诉计算机“把存储器位置123中的数字加上F”的单行指令,写出来就是如下的样子:

16.2001年3月13日,访谈,丹·麦克拉肯讲述。A 123 F

在1951年出版的第一本编程教科书《数字电子计算机的编程准备》中,剑桥项目组讲述了他们的工作。该书的作者莫里斯·威尔克斯、戴维·维勒和斯坦利·吉尔决定首先在美国出版该书,因为美国拥有更多的编程人员,所以他们的工作成果可以产生最大的影响力。此外,该书还描述了“子程序”的用途,即程序中经常用到的部分,它们可以被保存在“库”里,供很多应用软件在需要的时候重复使用。剑桥项目组提出的代码复用概念,直到今天仍然是减少软件bug及提高程序员工作效率的主要方法之一。

在巴克斯的坚持下,FORTRAN团队设定的目标远远超出了汇编语言。每一行汇编语言代码会转换成一条二进制机器代码的指令,对于20世纪50年代的汇编语言程序员来说,编程是每次一行的工作。巴克斯希望打破这种一对一的编程模式,实现一行程序代码能够转换成很多条机器指令。他的计划如果成功,将不仅带来计算机技术上的进步,而且还会促进文化的转变。归根结底,他的目标是使汇编语言程序员的高超手工技能实现自动化。

其他人也在为同样的目标而努力,希望减少计算对于编程祭司的依赖。也许最坦率的变革拥护者要属葛丽丝·霍普。20世纪50年代她在雷明顿·兰德公司的UNIVAC项目组工作。她对“编程问题”的看法

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载