约翰·巴科斯 不断进取的发明家 我们不知道自己想要什么,也不知道该怎样去做。一切都是顺其自然 地发生。我们面临的第一个挑战就是不知道这种语言看上去应该是什么样 子。然后就是怎样解析表达式一这是个大问题,而且在今天来看,我们 当时的做法非常笨拙. 一约翰·巴科斯谈及Fortrant的发明过程 常言道,需要乃发明之母。不过对有些人来说,发明的动力并非来自需要, 而纯粹只是因为受不了事物的混乱和低效。约翰·巴科斯就是这样一位发明家。 他开启了三个伟大的发明:第一门高级编程语言Fortran、为高级语言描述语法 规则的巴科斯诺尔范式,以及函数式编程语言P。他的这三大贡献至今仍推动 着世界上的科研和商务的发展。然而对巴科斯自己来说,这些发明之所以诞生。 只是由于他对当时的概念工具感到不耐烦。【。 对效率低下的厌恶似乎来自于家庭的遗传。第一次世界大战前,巴科斯的父 亲从阿特拉斯火药公司的一个小职员被提拔为首席化验师,这家公司主要生产用 于炸药的硝化甘油。他的晋升有着充足的理由。 他们的工厂产量很低,而且经常会发生爆炸事故,却一直无法找出原 因。产品的生产对作业温度极其敏感。我的父亲发现他们的高价德国温度 计不准确。于是他前往德国,学习了温度计的制作技术,并且生产出了一 批高质量的温度计。之后,工厂的爆炸事故明显少多了。 第一次世界大战期间,老巴科斯应征入伍成为一名军需官。战后他并未得到 政府允诺的杜邦公司的职位,于是转行做了一名证券经纪人。到1924年约翰巴 :杜邦公司(DuP0m)是世界排名第二大的美国化工公司,创办于18O2年,早期以制造火药而出名
科斯在费城出生时,他的父亲已经在一战后的经济繁荣中略有发迹。巴科斯在特 拉华州威明顿市度过了他的童年时光,之后在宾夕法尼亚州波茨敦市就读于著名 的希尔中学。 我每年的考试都不及格,从来就没认真过。我讨厌学习,成天游手好 闲。为此我不得不每年都参加新罕布什尔州的暑期补习班。我其实很高兴, 因为在那里我可以驾驶帆船,玩得非常痛快。 1942年巴科斯好不容易从希尔中学毕业,依照父亲的意愿进入弗吉尼亚大学 主修化学。他对理论知识还比较感兴趣,但痛恨实验室。大部分时间,巴科斯都 忙于参加各种派对,坐等年龄一到就去服兵役。到第二学期结束为止,他每周定 期参加的课程只有一门不计学分的音乐鉴赏。最后他终于引起了校方的注意,弗 吉尼亚大学的生涯也随之结束。随后他于1943年入伍。 巴科斯成为了一名下士,在佐治亚州的斯图尔特堡带领一队防空兵。不久他 在一次能力测试中表现优异,于是被指派前往匹兹堡大学攻读工程学预科。而之 后的一次医学能力测试可以说是救了他的命。 战友们被装船参加阿登战役”,而我则跑到哈弗福特学院念医学预科。 作为医学院预科的一部分,巴科斯在亚特兰大一家医院的神经外科病房实习 治疗头部创伤。一次意外的巧合,巴科斯被诊断出患有骨肿瘤,在颅内安装了一 块金属板。不久之后,他就读于花与第五大道医院的医学专科学校(现在的纽约 医学院),但只坚持了九个月。 我受够了。医学专科学校的人不喜欢思考。他们只会死记硬背,而且 也要求你这样做。在那里根本不允许你思考。 在此期间,巴科斯感觉颅内的那块金属板不太合适,于是到附近专门研制金 属板的斯塔顿岛医院,希望能更换一个。由于对医院提出的设计方案不满意,他 掌握了相关技术后自己设计了一款。在此之后,巴科斯退出了医学领域,在纽约 找了一间小公寓住下来,每个月租金18美元. ”希尔中学(TeSc0d)是一所类国的大学预科学校。1851年建立,十校联里成员。著名校友还包括关国前 国务期贝古
当时我真的不知道这辈子到底想要干些什么。因为我喜欢音乐,所以 想要搞一套高保真音响,但在当时并没有这种设备,于是我上了一所无线 电技术学校。在那里我遇到了一位非常好的老师,也是我遇到的第一位好 老师,他要我与他合作,帮某个杂志做些电路特性的计算工作。 我记得做了一些相对简单的运算,得出了放大器电路曲线上的几个关键 点。工作非常艰苦、乏味,但是它引发了我对数学的兴趣。它能付诸真正的 应用,正是这一点吸引了我。 巴科斯进入了哥伦比亚大学的基础教育学院,开始读一些数学课程。他不喜 欢微积分,但对代数很感兴趣。到了1949年春,25岁的巴科斯还有几个月就将 拿到数学学士学位,但仍然对自己的前途一无所知。 就在这个春天的一天,巴科斯参观了位于麦迪逊大街的IBN计算机中心。当 时他参观了可选循序电子计算器(Selective Sequence Electronic Calculator, SSEC),这是一台IBN早期基于电子真空管制造的机器。 S$EC体积非常庞大,占据了很大一个房间,其上密布者仪表和线路。在参观 中,巴科斯向带他参观的人提出自己想找一份工作,而她让他去找主管谈。 我说算了,我没法去。当时我看上去很邋過,头发也很乱。但是她坚 持让我试试,所以我还是去了。他们让我参加一个测验,我做得还可以。 V巴科斯受聘在5SEC上工作,这台机器实际上并不是现代意义上的计算机。它 没有储存软件的存储器,因此程序每次都得靠穿孔纸带“喂”进去。S$EC有着成 千上万个电子机械部件,运行并不是很可靠。 在那台机器上工作很有乐趣。你可以独自使用整个机器。你必须时刻 就位,因为那玩意儿每三分钟就会出错,然后停止运行。你必须想办法让 它重新启动。 编程的情况也很原始。 一份操作说明和一份指令清单,这就是你能做的编程。要想完成 件事情,每个人都得自己想办法。而完成事情的方法有无数种,所以人 们自然会用各种各样的方式来编程
巴科斯在SSEC上工作了三年。他的首个大项目是月球历表的计算,即计算在 任一给定时刻月球的位置。在当时,I驯有能力供养一个纯科学部门,他们曾与 哥伦比亚大学合作一个项目,想办法将穿孔卡和纸带机用于科学研究。公司的收 入来源主要是为企业和政府生产纸带机,夺人眼球的庞然大物SSC只是为这种技 术起到些宣传作用,而技术本身最终还是被IM淘汰了。不管公司当初是出于什 么动机,巴科斯毕竟从SSC的工作中学到了很多东西。同时他也为科学计算作出 了自己的第一次贡献:在小型机上做多位数运算的痛苦,迫使他开发了 Speedcoding程序。 Speedcoding:用小字长表示大数值 在计算机领域,作为整体进行四则运算的一串数码单位称为“字”(word) 这些字的长度都是固定的,根据硬件不同,通常能包含8到32位数字。由于这种 长度的限制,必须采用特别的手段才能表现出以埃(千万分之一毫米)或者光年 为单位的数值。一 著名数学家约翰·冯·诺依曼是科学计算领域的先驱之一。早在句牙利的童 年时期, 冯·诺依曼就被视为数学天才,高中尚未毕业就发表了自己的首篇数学论文。他 的记忆功也同八 样惊人,曾一句不漏地复述出整部《剑桥世界古代史》.而这只是为了取乐。他 生的科研成就包括古典数学和量子力学方面的基础理论,以及提出了博弈论。1933 年冯·诺依曼 移居美国,进入了普林斯顿大学高等研究院,并且在第二次世界大战期间的曼哈 顿计划中承担了领导作用。 冯·诺依曼意识到,在原子弹的设计过程中需要涉及非常大和非常小的数字 的运算,而宾夕法尼亚大学莫尔电机工程学院(Moore School)的一个电子计算 约的,冯,诺依曼 机之父.他在计算机科学、经济学、量子力学及几子所有数学额域都作出过重大贡献。1931年以不到30岁的 营西大的身。193年转入该高等研究瓷,与爱所迎等人一起为最初的六位。19 #曼哈顺计划(Manhatan Pre时et)是美国陆军部白1942年起开始实施的核武器研究计划。该T程集中了当时西方
器项目引起了他的兴趣。1944年他加入了这个项目,最初作为观察员,之后便开 始亲身参与,并且大力提倡在计算机中既存储指令又存储数据的方法。这种方法 在今天早已应用于所有的计算设备“。 第二次世界大战结束后,冯·诺依曼研制了自己的计算机(名为“约翰尼克”), 并且设计了一批早期程序,用于解答核物理中一些无法通过手工解决的问题。出 于对科学计算的浓厚兴趣,他建议在计算机中使用一种“换算因子”(scaling factor)来存储和操作那些非常大或者非常小的数字。 原理其实很简单。假设一个计算机字只能存储3位数字,那么要想表示数字 517,就需要向计算机字中写入517,并且指定其换算因子为0。要想表示51.7, 则同样写入517,然后指定换算因子为-1。表示5170则指定换算因子为1,表示 5170000则指定换算因子为4,依次类推。正值的换算因子等于跟在数字后面的 0的个数,而负值的换算因子则等于小数点后的数字个数。 在进行运算时,编程人员也许并不知道每次计算的精确结果,但他们应该能 知道它的换算因子是多少一至少冯·诺依曼认为是这样。没错,原理确实很简 单,但前提是你碰巧还是一个优秀的数学家。巴科斯从程序员的角度出发,对此 提出了自己的看法。 这样的结果是,你必须对问题了如指掌,知道其中各种换算因子,否则 数字就会溢出,或者因为取整时误差太大而出现错误。在这样一种计算机条 件下,编程工作变得非常复杂。 与IBW的同事哈伦·海尔里克(Harlan Herrick)一起,巴科斯开发了一款 名为Speedcoding的程序,利用浮点数来支持运算。浮点数自身带有换算因子, 从而为编程人员卸下了重担。巴科斯在Speedcoding积累的经验为他日后迎接更 大的挑战奠定了基础。 当时每个人都知道编程的费用是多么昂贵。租赁机器需要数百万美 元,而编程的成本与之相比只多不少。编程费用居高不下是因为你必须雇 佣很多人力用“汇编”或者第二代语言写程序,这些语言与满是0和1 数%,从而首开先河。原书注