前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图灵奖12 —— 约翰·巴克斯,Fortran和BNF的发明人,却有着不幸的童年

图灵奖12 —— 约翰·巴克斯,Fortran和BNF的发明人,却有着不幸的童年

作者头像
ACM算法日常
发布2022-07-26 18:49:55
1.3K0
发布2022-07-26 18:49:55
举报
文章被收录于专栏:ACM算法日常ACM算法日常

1 介绍

该文档是约翰·巴克斯的一个简单的传记,约翰·巴克斯是20世纪有影响力的计算机科学家。他参与研发了FORTRAN, ALGOL等语言,以及帮助创建了BNF范式,用于程序设计语言的语法。由于FORTRAN和BNF的贡献,他于1977年获得ACM图灵奖。

2 早年活动(1924 - 1950)

约翰·华纳·巴克斯于1924年12月3日出生在美国宾夕法尼亚州的费城。他的父亲是一名富有的股票经纪人,约翰·巴克斯就读于宾夕法尼亚州波茨敦的一所著名高中。但他一点也不喜欢上学,用他自己的话说:

我每年都不及格。我从来没有学过。我讨厌学习。我只是随便玩玩。这带来了一个令人愉快的结果,我每年都去新罕布什尔州的暑期学校,在那里我度过了一个又一个愉快的夏天。

尽管如此,经过一段时间的拖延,他还是顺利毕业了。高中毕业后,他进入弗吉尼亚大学学习化学,这是他的父亲,一个自学成才的化学家希望他做的。然而,他一点也不喜欢。他对理论感兴趣,但不喜欢实验室工作。他没有上大部分的课,因此被迫在一年内退学,之后他于1943年参军。

起初,他接受的是成为一名士兵的训练,但能力测试显示,他有潜力成为一名工程师和医生。这使他首先参观了匹兹堡大学的工程预科项目,然后在哈弗福德学院学习医学,并在大西洋城医院工作。在那里,他被诊断出头部有肿瘤。肿瘤被成功切除,但必须在他的头部植入一块金属板。这个板子不适合他,后来他自己设计了一个改进的板子。之后,他在另一所医学院学习了一段时间,但并不喜欢那里。用他自己的话说:

我讨厌它。他们不喜欢在医学院思考。他们要你背所有知识,这就是他们要你做的。你很难思考。

他决定完全退出医学领域,搬到纽约,但不知道他的生活该怎么办。因为他喜欢音乐,他想要一个好的高保真音响,但是他找不到,所以他决定自己做一个。由于不知道该怎么做,他去了一所无线电技师学校。在那里,他为一位老师做了一些计算,并喜欢其中的数学原理。这促使他在哥伦比亚大学(Columbia University)学习了一些数学课程。

3 为IBM SSEC编程 (1950 - 1952)

1949年,当他即将完成学士课程,但仍然不知道下一步要做什么时,他参观了位于纽约麦迪逊大道的IBM计算机中心。向导向他展示了第一台电子计算机------选择性序列电子计算器(Selective Sequence electronic Calculator,简称SSEC),他坚持认为他应该和主任谈谈找工作的事。他照做了,并被录用了。他从1950年9月开始在IBM工作。

巴克斯得到的第一份工作是为IBM选择性序列电子计算器(SSEC)编程。这是IBM在1946年到1948年间设计和制造的用于科学计算的计算机之一。该设计部分是机电设计(包含21400个继电器),部分是电子设计(包含12500个真空管),并放置在60米长的沿墙呈u形的机柜中(见图1)。

图1:IBM SSEC,这是一种科学计算机。

SSEC的运算单元可以在67毫秒内完成14x14位的乘法运算,33毫秒内的除法运算,以及0.3毫秒内的加减运算。它的存储器由真空管(快速)和继电器(缓慢)组成。可使用穿孔卡和纸带进行输入和输出。此外,它还包含一台打印机和一个控制终端。

编程是通过创建穿孔卡或穿孔带来完成的,这些穿孔卡或穿孔带保存着计算机能够理解的程序的二进制表示。因为SSEC不是存储程序计算机,程序可以直接从磁带或卡片上运行。巴克斯解释说,为了在穿孔纸带上一遍又一遍地重复一个程序,必须把纸带粘成一个环。曾经,一个程序的行为很奇怪:它会在正确的行为和不正确的行为之间交替。原来带子是粘在M¨obius条上的。

这台机器被用来进行科学计算。例如,它被用于核物理,包括计算美国第一颗氢弹。巴克斯在这台机器上做的一个主要项目是计算月球轨道表。这些表格后来被用于阿波罗计划。

4 Speedcoding (1952 - 1953)

IBM SSEC的继承者是IBM 701,代号为"防御计算器"。这是IBM设计制造的第一台大型商用电子计算机。当时它被设想为帮助美国在朝鲜的战争努力,因此它的名字是"国防计算器"。最终制造出了19台IBM 701机器,它们被运往大学、研究实验室和大公司。

这台机器是IBM第一台完全电子化的存储程序计算机。它包含一个CPU,可以在456微秒内执行36x36位的定点乘法或除法,并在60微秒内执行加法或减法。存储器由72根威廉姆斯管组成,每根管的总容量为2048个单词,每根36位。对于长期存储和I/O,它有一个磁鼓,磁带读取器和录音机,卡片读取器和打孔器,以及一个打印机(见图2)。

图2:IBM 701,第一台大型商用计算机

巴克斯为之编程的SSEC被第一代IBM 701所取代,后者要小得多,功能也更强大。然而,作为SSEC, 701只支持整数运算,而巴克斯面临的大多数问题是科学计算,需要额外的"比例因子"(由数学家约翰·冯·诺伊曼发明)。这个数字和它的比例因子现在被称为浮点数。

为了使编写科学计算程序更快、更少出错,从而降低成本,巴克斯发明了快速编码系统。本系统实现了一个简单的浮点数字系统解释器,供程序使用。"使用"意味着把包含系统的牌组放在包含程序本身的牌组前面,程序本身由可以被解释器解释的指令组成。奇怪的是,该系统还包含错误检查机制,这是必要的,因为与今天的标准相比,SSEC的机器非常不可靠。

5 FORTRAN (1953 - 1958)

5.1 1953 年的状况

1953年,人们普遍知道如何制造我们今天所知道的计算机(即冯·诺伊曼架构)。系统包含一个CPU、一个包含数据和程序的内存,以及用于长期存储和与环境通信的各种I/O设备。这些设备的编程是通过将机器代码从一些长期存储介质(如穿孔卡或磁带)加载到主存储器中来完成的。

大多数机器代码是手工编写的,或者是在原始汇编程序的帮助下编写的。尽管存在一些"自动编程"系统,但它们通常会试图通过为具有所需特性的虚拟机提供解释器来解决机器的限制。巴克斯自己的Speedcoding就是这样的一个系统。格蕾丝·默里·霍珀(Grace Murray Hopper)的A-2系统与此类似,只是程序被编译成机器码,而不是被解释。这两种方法都很慢,因为大部分时间花在了模拟浮点运算上。

在理论方面,有一些很有希望的结果。一些研究人员描述了我们现在所说的高级编程语言。有些甚至附有该语言的编译器的描述,但它们都缺乏用于真正计算机的可工作的编译器。Knuth和Trabb Pardo在他们的调查中提到了以下属于这一类的语言:Plankalku¨l(由Zuse)、Flow Diagrams(由Goldstine和von Neumann)、Composition(由Curry)、 Intermediate PL(由Burks)、Klammerausdru¨cke(由Rutishauser)和Formules(由B¨ohm)。

还存在一些实验性的"高级"编程语言,它们确实有一个可用的编译器。这些语言通常表达能力不强,并且依赖于机器。此外,编译器不能产生非常高效的机器代码。Knuth和Trabb Pardo在他们的调查中提到了以下属于这一类的系统:Short Code(由Mauchly), A-2(由Hopper)和Algebraic Interpreter(由Laning和Zierler)。因为这些系统通常会产生低效的机器代码,程序员对它们非常怀疑。程序员的经验强化了这种信念,他们认为手工为机器编写程序本身就足够困难。

5.2 电脑 IBM 704

IBM 701的继承者是IBM 704(参见图3)。IBM内部的人员被要求提出对IBM 701进行改进的想法。尽管大多数设计人员关心的是连接更多的鼓存储器,但Backus推动包含硬件浮点和索引支持,因为Speedcoding对于IBM 701来说是相当成功的。最初,704的主要设计师Gene Amdahl并不相信,所以巴克斯决定自己设计浮点硬件。他向704的设计师们展示了他的设计,虽然他的设计非常笨拙,但他说服了硬件设计师,硬件浮点应该是704的一部分。

除了支持浮点和索引的CPU,该系统还包含一个磁性核心内存,而不是较慢的威廉姆斯管。CPU的速度大约是前一代的两倍,尽管浮点运算比定点运算慢。其他组件与IBM 701类似:用于长期存储的磁鼓、磁带和卡片;输出的打印机和控制机器的操作终端。

5.3 一个更有效的编程系统的例子

由于IBM 704直接在硬件中实现自动编程系统的主要特性,因此不再需要这些特性。这也使得程序的效率变得更加重要,因为浮点解释器不再是瓶颈。这让巴克斯相信,一个新的自动编程系统只有在能够生成几乎和手写程序一样高效时才会被接受。

对巴克斯来说,经济实惠是设计一个更强大的"自动编程"系统的主要动机:他意识到设计软件的成本已经比购买硬件的成本高了,而且随着计算机变得更快更便宜,而程序变得更大,这种差异只会增加。1953年12月,他向IBM经理库斯伯特·赫德提出,要为即将推出的IBM 704计算机设计这样一个系统。这项计划获得了批准,IBM公司在接下来的几年里将会支持巴克斯和他的团队,没有提出任何问题,尽管当时IBM的顾问约翰·冯·诺伊曼反对这项计划。

5.6 FORTRAN I

这个编译器翻译的语言在实现过程中发生了变化,并最终被写进了程序员的参考手册《FORTRAN自动编码》。IBM 704 的系统,以及后来IBM 704数据处理系统的FORTRAN自动编码系统的程序员入门,现在被称为FORTRAN I。

重新贴标签的声明被完全放弃了,因为它太难实现了。关联恒常句也被去掉了。DO语句被简化,只重复后面的语句,因为前面定义的更通用的DO很难指定和实现。IF语句中的比较被删除了,因为在击键上缺少">"符号。相反,它根据符号(可以是负的、0的或正的)将控制转移到指定的语句。同时涉及浮点值和整数值的表达式被进一步约束,以防止隐式类型转换。最后,添加了一些结构:函数定义、格式化I/O语句、计算GO TO语句、CONTINUE状态和最多6个字符的变量。

FORTRAN I具备了现代命令式编程语言的大部分基本要素。它有变量、表达式、赋值、用于操作整数和浮点数(数组)的控制结构,以及用户定义的函数。它缺少的是块结构:所有变量都是全局的,没有动态存储(比如堆栈),所以递归是不可能的。巴克斯后来谈到了语言设计过程:

在我们对语言设计问题的无知中------当然,我们对许多后来被认为很重要的问题一无所知,例如块结构、条件表达式、类型声明------在我们看来,一旦我们掌握了赋值语句、下标变量和DO语句的概念(这些都是我们最早的想法),那么语言设计剩下的问题就变得微不足道了:他们的解决方案要么是由于需要提供一些机器设施,比如读取输入,要么是由于一些现有结构无法完成的编程任务(例如,跳过DO循环的末尾而不跳过那里的索引指令:这就产生了CONTINUE语句)。

5.8 FORTRAN II 以及更多

在FORTRAN被广泛部署后,许多疏忽被发现,这些疏忽最终在FORTRAN II中得到了实现。最大的改进是增加了一个子程序机制,这是英国的莫里斯·威尔克斯发明的。在实现方面,编译器做了更好的错误报告,并支持子例程的单独编译。该系统于1958年春天发布。

FORTRAN III是在FORTRAN II的一年内开发出来的,它增加了布尔表达式和字符串数据类型。它还使普通的FORTRAN语句与象征性的IBM 704指令混合成为可能,在这些指令中,操作数被FORTRAN变量替换。该系统于1958-1959年冬发布。

在开发FORTRAN II和FORTRAN III的过程中,FORTRAN项目被转移到IBM内部的另一个部门。这意味着巴克斯和他的团队对这个项目的影响逐渐减弱,他们可以专注于其他话题,这些话题将在下一节中讨论。

很难确定巴克斯在FORTRAN项目中扮演了什么角色,因为他几乎从不认为自己参与了该语言或编译器设计的任何部分(除了他在编译表达式和拆分编译器第2部分的想法)。后来他谈到了他参与FORTRAN项目:

这对我来说太不公平了,因为这些人(罗伯特·纳尔逊、哈兰·赫里克、洛伊斯·海伯特、罗伊·纳特、欧文·齐勒、谢尔顿·贝斯特、大卫·塞尔、理查德·戈德堡、彼得·谢里丹)发明了大量的东西,而我却得到了这么多的功劳。管理团队并不需要花费太多精力。每个人都玩得很开心,我的主要职责就是打断从午餐开始一直持续到下午2点的国际象棋比赛。

图5显示了1982年在休斯顿举行的全国计算机会议上的先锋日宴会上的大多数FORTRAN开发人员。

图5:1982年6月9日,在德克萨斯州休斯顿举行的全国计算机会议的先锋日宴会上,前编程研究小组。从左至右:理查德·戈德堡、罗伯特·纳尔逊、露易丝·海伯特、罗伊·纳特、欧文·齐勒、谢尔顿·贝斯特、哈兰·赫里克、约翰·巴克斯、彼得·谢里丹。

FORTRAN本身也得到了进一步的开发,包括IBM和其他公司。这促使ANSI的前身努力将该语言标准化,其第一个标准于1966年发布,被称为FORTRAN 66。截至撰写本文时,最新的标准是ISO标准Fortran 2003,一个新的标准正在制定中,并将于2008年发布。多年来,FORTRAN合并了许多其他语言的特性,比如递归和面向对象编程支持。今天,该语言主要用于超级计算应用程序。

后来,随着越来越多的编程语言的出现,人们对继续使用FORTRAN编写程序提出了很多批评,甚至巴克斯本人也提出了批评:

Dijkstra:"FORTRAN------"婴儿期的疾病"------已经有将近20年的历史了,对于你今天想要的任何计算机应用来说,它都是无可救药的不充分的:现在使用它太笨拙、太冒险、太昂贵了。"

Perlis:"42。你可以通过观察一个程序员对FORTRAN持续生命力的态度来衡量他的观点。"

巴克斯:"我们不知道自己想要什么,也不知道如何去做。它就这么增长了。第一个问题是语言应该是什么样的。然后如何解析表达式------这是一个大问题,我们所做的现在看起来非常笨拙。"

6 ALGOL (1957 - 1963)

在FORTRAN作为第一批高级编程语言之一被引入之后,越来越多的组织开始制作他们自己的编程语言,通常针对特定的机器。这些语言彼此之间差别不大。正因为如此,大多数人认为开发一种独立于机器的高级编程语言是可能的。

6.1 国际代数语言(IAL)

在欧洲,GAMM (Gesellschaft fu¨r angewandte Mathematik und Mechanik)小组自1955年以来一直致力于定义一种编程语言,该语言主要用于数值分析。1957年5月10日,美国向ACM递交了一份请愿书,该请愿书建议任命一个委员会来研究并建议创建一种单一(全国性)的程序设计语言。任命的委员会由来自计算机行业、大学、用户和政府的人士组成。巴克斯作为IBM的代表加入了这个委员会,因为他在创建高级编程语言FORTRAN方面有丰富的经验。

1957年10月,GAMM给ACM写了一封信,信中指出,通过合作,两个小组可以相互受益,更好地为计算机界服务。1958年5月27日至6月1日在祖¨rich举行了一次会议。这次会议以每一组独立拟订的两项提案为基础。会议决定:

新语言应该尽可能接近标准的数学表示法,并且不需要进一步的解释就可以读懂。

•应该可以在出版物中使用它来描述计算过程。

•新语言应该可以机械地翻译成机器程序。

此外,与当时的许多其他语言相比,IAL变得独立于机器。在做出这些决定之后,关于作为一种描述计算机算法的语言和描述印刷程序的语言,仍有一些悬而未决的问题。其中一个问题是用来表示小数点的符号。美国人想用句号,而欧洲人想用逗号。最后,我们决定将该语言分为三个不同的级别:参考、硬件和发布。在这些问题解决之后,会议以《初步报告:国际代数语言》的发表而结束。

6.2 提出了语言

拟议的语言包括三个不同的层次。参考语言是委员会定义的工作语言。其他两个级别(硬件级别和发布级别)可以使用不同的符号集,但如果不清楚,就需要说明如何在不同级别之间进行音译。例如,该符号可能不存在于目标计算机的硬件级语言中。只要明确说明用什么符号代替,所生成的程序就是正确的IAL程序。

当时与现有语言最大的区别之一是引入了新的块结构。使用这种块结构,可以将语句分组在一起,从而可以定义新的过程。此外,还可以使用递归。区块的形式是:Σ1;. . . ;Σn end,其中Σi是语句。

FORTRAN在赋值和比较中都使用了符号=,而IAL则使用了两个不同的符号来避免混淆。它使用:=符号来赋值和

=符号用于比较。

另外,新的是类型声明,而不是FORTRAN中隐式声明变量类型的变量命名方案。标识符可以是任意长的,包含大写或小写字母和数字的任意组合,唯一的限制是第一个符号必须是字母。默认情况下,所有变量的类型都是实的,如果需要另一种类型,则需要声明它。报告提到了整型和布尔型作为其他类型的示例。类型声明的形式为(I1, I2,...), In),其中type是类型的名称,Ij是要声明该特定类型的标识符。例子:

integer (i, j) ; array real

这声明了变量i和j的类型为整型。

switch语句也是新的东西。它基本上是一个由标签组成的数组。然后可以在go to语句中使用这个数组。switch语句的形式是switch I

:= (D1, D2, . . . , Dn), 其中I是标识符,Di是标签。例子:

switch labels := (L1, L2) ; go to labels[1] 这段代码将跳转到标签L1。

if either语句是一种干净地编写带有多个条件的if语句的方法。这个表述的形式是B1;Σ1;或者如果B2;Σ2;. . . 或者,如果汉堡;Σk;其中Σi是除if、for或或if语句外的任何语句,Bi是任何布尔表达式。例子:

if either (a > 0); a := a − y; or if (a < 0); a := a + y; or if (a = 0); x := 1 end

6.3 需要BNF

描述IAL语法的方法在之后的两年中没有改变。例如,在旧文档中,数字的语法被描述为:

定点常量

一般形式:任意数的十进制数字,小数点在开头、结尾或两位数之间。前面的+或-号是可选的。后面可以跟着前面有一个E的十进制指数。

在更新的文件中:

(正)数字N

形式:N G. g10g,其中每个G都是一个正整数。g是传统形式的十进制数。标量因子10g是由G给出的10的幂。在任何情况下,数字的下列组成部分都可以省略:小数部分。整数十进制数的0;比例因子前的整数1;比例因子中的+号;比例因子10±0。

如上所述,对这些语言结构的描述并不总是完全清晰的,有时甚至是模棱两可的。巴克斯不满意这种描述IAL语法的方式:

他们只会用英语描述事物。这是一个陈述,这是一个例子。您在这些ALGOL委员会中受到了烦扰(关于术语的低效辩论),足以意识到需要做些什么。你需要学习如何精确。

巴克斯开始研究一种新的形式来描述编程语言的语法。受逻辑学家埃米尔·波斯特(Emil Post)的启发,巴克斯写下了后来被称为BNF(巴克斯诺尔形式)的IAL的全部语法。这种形式主义使用形状元语言变量的规则来描述语言

:模式。一种由元语言变量和被描述语言符号组成的模式。元语言变量可以用不同的模式来描述,这些模式之间的选择可以用"或"符号来表示。

在1967年的一篇文章中,巴克斯对BNF的需要和起源作了如下陈述:

在参与了FORTRAN和IAL两种语言设计工作之后,很明显,当我在1959年试图描述IAL时,由于缺乏精确的语言定义而出现了困难。在马丁·戴维斯(Martin Davis)最近开设的一门关于可计算性的课程中,我接触到了逻辑学家埃米尔·波斯特(Emil Post)的工作和他的"生产"概念。当人们注意到需要精确描述时,Post的作品显然非常适合这个目的。我匆忙地修改了它们,以便用于描述IAL的语法。

近20年后,他不再那么确定自己的想法是否真的来自马丁·戴维斯(Martin Davis)关于埃米尔·波斯特(Emil Post)著作的一门课程。戴维斯说他直到很久以后才开始教这门课:

这里有一个奇怪的困惑。我发誓,学习语法的想法来自埃米尔·波斯特,因为我曾在兰姆庄园(位于哈德逊河畔的IBM智库)上过马丁·戴维斯的课。所以我想如果你想描述某件事,就像Post那样做。马丁·戴维斯告诉我,他直到很久以后才开始教这门课(根据戴维斯的记录,是1960-61年)。所以我不知道怎么解释。我对乔姆斯基一无所知。我是一个非常无知的人。

无论如何,巴克斯于1959年6月15日至20日在巴黎举行的联合国教科文组织信息处理国际会议上,在苏黎世ACM-GAMM会议上展示了他的研究成果《国际代数语言的语法和语义》。以下摘录是对IAL中数字语法的正式描述。与FORTRAN手册和以前关于IAL的报告中的两个示例相比,此描述是清晰而精确的(尽管dn规则是错误的):

⟨digit⟩ :≡ 0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9

⟨integer⟩ :≡ ⟨digit⟩ or ⟨integer⟩ ⟨digit⟩

⟨dn⟩ :≡ ⟨integer⟩ or ⟨integer⟩ or ⟨integer⟩ or ⟨dn⟩ or ⟨integer⟩ [sic]

⟨si⟩ :≡ +⟨integer⟩ or -⟨integer⟩ or ⟨integer⟩

⟨en⟩ :≡ ⟨dn⟩10⟨si⟩ or 10⟨si⟩

⟨number⟩ :≡ ⟨integer⟩ or ⟨dn⟩ or ⟨en⟩

虽然这种描述语法的方法在当时是真正革命性的,但在科学界并没有得到太多的关注。巴克斯自己说,为什么他认为BNF最初没有取得巨大的成功:

当然,我做得太晚了,没能被列入诉讼程序。所以我就把这堆东西拿去开会了。所以分布不是很好。但彼得·诺尔读了这本书,这让一切都变得不同了。

Peter Naur作为欧洲代表团的一员也参与了ALGOL的工作,后来IAL被重新命名为ALGOL。他确实读了巴克斯的报告,并对形式主义做了一些改进。值得注意的是:被::=和或被替换为。此外,元语言变量的一些缩写名称,如前面示例中的"dn"、"si"和"en",被赋予了更有意义的名称。这个改进版的BNF随后被用于最终的ALGOL 60报告。图6显示了1960年会议上的一些ALGOL委员会成员。这份报告发表后,BNF变得更加广为人知。由于他在普及BNF方面的努力,首字母缩略词最初被认为是指巴克斯范式,现在被称为巴克斯诺尔形式。

图6:1974年ACM编程语言历史的图片,显示了一些ALGOL委员会成员。第一排:约翰·麦卡锡,弗里茨·鲍尔,乔·韦格斯坦。最后一排:约翰·巴克斯,彼得·诺尔,艾伦·佩利斯。

6.4 影响

巴克斯在ALGOL 60年后继续在ALGOL委员会工作。他被认为是1963年修订的ALGOL报告的作者之一。除了BNF,巴克斯在ALGOL开发过程中所做的贡献还不清楚。BNF仍然是ALGOL对计算机科学最重要的贡献之一。如今几乎所有编程语言的语法都是用这种形式描述的。

9 图灵奖的讲座 (1977-1978)

通过他在FORTRAN、ALGOL以及较小程度上的Speedcoding方面的工作,Backus对我们现在所称的命令式编程语言做出了重要贡献。但是,当他在1977年获得美国计算机学会的图灵奖时,他在题为《高级编程的障碍:变量、控制语句和冯·诺伊曼瓶颈》的颁奖演讲中,强烈反对这种"冯·诺伊曼语言"。巴克斯后来改进了他的演讲,并在1978年发表了《编程能从冯·诺伊曼风格中解放出来吗?》。

11 晚年 (1991 - 2007)

1991年,巴克斯达到了IBM官方规定的65岁退休年龄,他觉得是时候往前走了。他不仅从IBM退休了,而且完全退出了科学领域。在1995年莎莎的一次采访中,巴克斯说他练习冥想,阅读克里希那穆提和伊娃·皮拉克斯的自省著作。引用书中的一段话:

大多数科学家之所以是科学家,是因为他们害怕生命。在科学领域有创造力是最美妙的,因为你可以做到这一点,而不需要与人发生冲突,不需要承受人际关系的痛苦,也不需要以自己的方式进入这个世界。这是一个美妙的世界,就像一个无菌的世界,你可以使用你非常激动人心的能力,而不会遇到任何痛苦。与生活中的痛苦相比,解决问题的痛苦是微不足道的。

自省不是一项科学活动:它是不可重复的,没有关于如何做的好理论,你期望发现什么。奇怪的是,通过审视自己,你真的能欣赏到宇宙的奥秘。你不需要试图找到物理定律。

在2006年接受Booch采访时,他表示自己仍然非常喜欢音乐,但也喜欢阅读历史和传记书籍。关于传记,Booch问他希望在自己的传记中看到什么,巴克斯回答说:

我帮了忙。我对计算机的发展做出了贡献。我大体上是非暴力的。

巴克斯退休后写的唯一一篇文章是他和妻子在1994年合著的,题为《你的记忆不是错误的,对错误记忆综合症基金会的回复》(dansen小编注:原文慎读,文章地址 http://www.astraeasweb.net/politics/notfalse.html)。它对"错误记忆综合症基金会"提出了反对意见,认为儿童受虐的记忆在大多数情况下是真实的,而不是由精神科医生强加的。这篇文章于1996年发表在在线非科学的"心灵网杂志"上,该杂志专门发表关于精神控制的文章。在Grady Booch的采访中,巴克斯写这篇文章的原因就变得很清楚了:

我母亲在我八岁半的时候去世了。当然,直到80年代末,90年代初,我都不记得关于她的任何事情,直到我吃了一些迷幻药才想起了很多我很快就会忘记的事情------她是在哪里性虐待我的。(小编叹,悲惨的童年?)

2004年,他的妻子芭芭拉·斯坦纳德去世,之后约翰搬到了俄勒冈州的阿什兰,住在他的一个女儿附近。三年后,2007年3月17日,他在阿什兰的家中去世,享年82岁。他的女儿卡伦和宝拉·巴克斯以及他的兄弟塞西尔·巴克斯都在世。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ACM算法日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 介绍
  • 2 早年活动(1924 - 1950)
  • 3 为IBM SSEC编程 (1950 - 1952)
  • 4 Speedcoding (1952 - 1953)
  • 5 FORTRAN (1953 - 1958)
    • 5.1 1953 年的状况
      • 5.2 电脑 IBM 704
        • 5.3 一个更有效的编程系统的例子
          • 5.6 FORTRAN I
            • 5.8 FORTRAN II 以及更多
            • 6 ALGOL (1957 - 1963)
              • 6.1 国际代数语言(IAL)
                • 6.2 提出了语言
                  • 6.3 需要BNF
                  • 9 图灵奖的讲座 (1977-1978)
                  • 11 晚年 (1991 - 2007)
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档