编程考古:艾兹赫尔·W·戴克斯特拉(Edsger W. Dijkstra):才华横溢、个性鲜明且坚持主见

戴克斯特拉被认为是数学和计算机科学领域最具影响力的科学家之一。他在现今名为CWI的Mathematisch Centrum完成了大部分开创性的工作。为了纪念戴克斯特拉的工作和付出,CWI于2019年设立了Dijkstra Fellowships。

Edsger W. Dijkstra (1930-2002)

1930 年出生于荷兰鹿特丹 ,是荷兰计算机科学家 、 程序员 、 软件工程师 、 数学家和科学散文家 。

他曾经说过:" 一张图片可能胜过千言万语 ,一个公式胜过一千张图片。"

在他的一生中,以无人能及的方式塑造了计算机科学这一领域。他的突破性贡献涵盖了从工程到理论计算机科学的各个领域,包括编译器构造、操作系统、分布式系统、顺序与并发编程、软件工程以及图算法等。戴克斯特拉的许多论文,虽然通常只有几页长,却成为了新研究领域的起源。实际上,现在计算机科学中的几个标准概念都是由戴克斯特拉首次提出,并且这些概念的名字也是由他创造的。

在一次与Adriaan van Wijngaarden(当时Mathematisch Centrum计算部门的主管)的讨论后,戴克斯特拉放弃了成为理论物理学家的梦想。在该中心作为程序员工作三年后,他带着对如何同时兼顾莱顿大学的理论物理学学习和程序员角色的困惑敲响了van Wijngaarden的门。据戴克斯特拉在他的1972年ACM图灵讲座中回忆,"当我数小时后离开他的办公室时,我变成了另一个人。"尽管当时编程尚未成为一个确立的学科,但Van Wijngaarden成功说服了戴克斯特拉,使他认为"它将长久存在",并且他可以在为这个学科铺路的过程中扮演重要角色。而他也确实做到了这一点。

成名的基石:戴克斯特拉算法

从1952年至1962年,戴克斯特拉在Mathematisch Centrum工作,在此期间他发明了后来被称为"成就我名声的基石"之一------寻找最短路径的算法,即戴克斯特拉算法。据他说,这是一个仅用二十分钟就想出的创意,当时他正与未婚妻Ria在一个咖啡馆的露台上喝咖啡。最初,他在1956年使用该算法展示了一台名为ARMAC的新计算机的潜力。然而,他清楚地知道,对于非专业人士而言,演示需要一个他们能够理解的问题和答案。

阿姆斯特丹Mathematisch中心的Edsger Dijkstra(左)、Bram Loopstra和Ria Debets(1954)。

他的解决方案是设计一种算法,利用简化地图找到荷兰两个城市之间的最短路线。"鹿特丹到格罗宁根之间最短的路线是什么?"戴克斯特拉曾在接受《Communications of the ACM》采访时反问道,"这就是最短路径算法。"尽管他于1956年在ARMAC的正式发布会上使用了该算法,但它直到1959年才在他的三页文章《关于图中的两个问题的注记》中发表。其影响最好由丹麦计算机科学家米凯尔·托鲁普在1999年的总结来概括:"自1959年以来,所有针对一般有向和无向图的单源最短路径(SSSP)的理论发展都基于戴克斯特拉算法。"

ALGOL 60编程

戴克斯特拉在Mathematisch Centrum工作期间另一项关键成就在于他对编程语言ALGOL 60的发展和普及所做的贡献。1958至1959年间,戴克斯特拉参与了一系列会议,最终促成了ALGOL 60语言定义报告的发布。讽刺的是,这份由13人合著的最终报告中并没有列出戴克斯特拉的名字:似乎是因为他无法同意多数人的观点而提前离开了委员会。但在他担任Mathematisch Centrum程序员期间,他和他的同事Jaap Zonneveld编写了第一个ALGOL 60编译器,其中应用了一种实现递归的新方法。他那本初版于1962年的简短书籍《ALGOL 60编程入门》,多年来一直是该编程语言的标准参考。

星期二下午俱乐部

1962年,戴克斯特拉开始在埃因霍温理工大学的数学系担任教授。两年后,他和他的妻子Ria搬进了一栋位于埃因霍温郊区小村庄Nuenen的新建房屋。1973年,当戴克斯特拉开始以"Burroughs Research Fellow"的身份,使用家庭住址分发他的报告时,Nuenen成为了计算机科学世界地图的一部分。实际上,戴克斯特拉是Burroughs公司的唯一研究员,并在家工作,偶尔前往美国的分公司。因此,他将大学的工作时间减少到每周一天。这一天,星期二,很快便因为著名的"星期二下午俱乐部"而闻名遐迩------这是一个研讨会,他和同事们会在此讨论科学文章,仔细审查各个方面------包括符号、组织、展示、语言和内容。1984年,当他搬到德克萨斯大学奥斯汀分校时,新的"星期二下午俱乐部"分会不久也成立了。

1978年,Edsger Dijkstra在阿姆斯特丹的荷兰Wiskundig大会上发表演讲。

并发编程的诞生

1968年,戴克斯特拉发表了著名论文《协作顺序进程》,为所有后续操作系统的设计奠定了基础,同时也催生了并发编程领域。这些想法中许多已经酝酿已久,《协作顺序进程》于1965年完成手稿,编号EWD 123。戴克斯特拉手写大部分文稿,这些文稿在计算机科学界被称为EWD(他名字的首字母缩写)。该论文提出了第一个用于并发进程同步机制------信号量及其两个操作,通常称为P和V。

死锁问题与证明

在1971年的论文中,戴克斯特拉通过所谓的"哲学家就餐问题"说明了死锁问题:五位哲学家围着一张桌子坐下来吃意大利面,只分享五把叉子。问题是每人需要两把叉子才能进食。这个例子成为解释新同步原语的经典基准。该论文还引发了对高级同步机制的密集探索,最终导致了Per Brinch Hansen和Tony Hoare所开创的监视器概念的发展。

迁往奥斯汀

1984年,戴克斯特拉接受了德克萨斯大学奥斯汀分校的一个职位。奥斯汀对他来说就像是第二个家,他和妻子开着他们昵称为"巡游机"的大众巴士一起度过了假期,探索美国的国家公园。他在奥斯汀教授的课程实际上与计算机科学关系不大,而是涉及他对数学证明呈现的兴趣。他会要求学生写出课堂上讨论的基础数学问题的证明,并用犀利但幽默的评论返回给学生,比如"许多遗漏的罪过"。

他的讲座因其尖锐的评论、引人入胜的表达方式以及他在开始讲课前习惯性地写在黑板上的有趣引用而极具娱乐性。他从不要求学生安静下来,而是自己降低声音直到几乎听不见。这一技巧异常有效。

个性鲜明且坚持主见的人

Dijkstra 以其机智、口才、粗鲁、突兀和经常对专业人士同行的残忍而闻名,例如在他的评论中,"机器是否可以思考的问题 (......与潜艇是否会游泳的问题一样重要。他对一位有前途的研究人员的建议是:"只做只有你能做的事"。

戴克斯特拉是一位个性鲜明------有时难以相处且有主见------并且受人尊敬的人。许多研究人员被他强烈的个性、独特的工作习惯、直率的诚实以及对研究方法的明确观点所吸引。戴克斯特拉似乎认为每个人都应该像他那样思考甚至行事,这使他成为一个自然的先知,并解释了他的许多怪癖。

戴克斯特拉吸引了相对较少但稳定的追随者群体,其中包括博士生和知名的计算机科学家。他们采用了他的写作风格和符号、礼仪、使用钢笔的习惯,甚至偶尔模仿他的凉鞋类型。

Dijkstra的手稿显示了一种优雅而独特的笔迹,许多同行和崇拜者都复制了这种笔迹。

简洁明了的文字

在他的著作《 编程的学科》(A Discipline of Programming,1976)的序言中,他指出:"由于没有参考书目,我既不提供解释,也不表示歉意。事实上,他的大部分文章和书籍根本没有参考文献。Dijkstra 选择这种工作方式是为了保持他的自我主见。

他的写作优雅无双。他能够以散文形式书写关于正式议题的文章,几乎不包含任何公式。他的论文《协作顺序进程》或许是最佳例证。同样,他能够以看似随意的方式讨论分布式计算中的复杂算法,仅用简单的几行公式,却以清晰的语言表述。他撰写的文章风格独特,以简洁、精炼的论证和清晰的阐述著称。每个句子都经过精心雕琢,每段文字都令人印象深刻。这种优雅不仅体现在他的写作中,也反映在他的书法上,以至于20世纪80年代末,加州DEC系统研究中心的Luca Cardelli设计了一个名为"Dijkstra"的桌面电脑字体。不久之后,戴克斯特拉收到了一封用这种字体排版的信件,起初以为是手写的,直到得知此字体的存在。

光明在黑暗中

戴克斯特拉的关键成就在他职业生涯早期就得到了认可。1972年,他荣获了计算机科学领域的最高荣誉------ACM图灵奖。他是美国艺术与科学院外籍荣誉会员,荷兰皇家艺术与科学院(KNAW)成员,并拥有北爱尔兰贝尔法斯特女王大学和希腊雅典经济与商业大学的名誉博士学位。此外,在30年间,他还获得了无数其他奖项和荣誉,其中一些是在2002年8月6日去世前不久获得的。毫不意外的是,他的讣告出现在多家报纸上,包括《纽约时报》、《华盛顿邮报》和《卫报》。正如奥斯汀计算科学系主任J Strother Moore在戴克斯特拉的葬礼上所说:"他就像一个在黑暗中有光的人。他几乎照亮了每一个讨论的问题。"