狄克斯特拉是世界上第一批程序员之一,但其贡献涉及算法编译器、操作系统等各方面,堪称计算机界的大师。
“1952年的头一个春天的清晨,在经历了很长时间的巧合后,我正式地进入程序设计这个专业。”这是1972年图灵奖获得者埃德斯加·狄克斯特拉(Edsgar Wybe Dijkstra)在获奖时的第一句感言。在他眼中,进入程序设计这个行当完全是一个巧合。但是一旦他进入后,他就如鱼得水,成为计算机界的大师。
巧合促成的机遇
在狄克斯特拉中学毕业的时候,他希望能够学习法律,以后到联合国工作,为维护世界和平作出贡献。但是他的父亲慧眼识英,因为他的数理化成绩都很好,所以劝说他学习与数学相关的专业。于是,遵从父亲的建议,1948年他进入了莱顿大学学习理论物理。
在学习过程中,他发现这个领域中的许多问题都需要进行大量复杂的计算,于是决定学习计算机编程。当时电脑才刚出现不久,程序设计就更是一个新出现的事物了。
1951年,他自费到英国参加了剑桥大学举办的一个程序设计培训班,学习在EDSAC(世界上第一台存储式电子计算机)上的编程方法。这次培训是世界上第一次编程培训,因此他成为了世界上第一批程序员之一,并成为荷兰的第一个程序员。
1955年,在他从事程序设计大约3年后,与阿姆斯特丹数学中心计算部主任范·温加尔登(Van Wijingaarden)的一次面谈改变了他未来的发展方向。谈话的要点是让狄克斯特拉在阿姆斯特丹数学中心担任兼职程序员同时在莱顿大学学习理论物理。
但是狄克斯特拉发现他越来越难以将两者结合起来了。他必须下定决心,要么停止程序设计,努力成为一个受人尊敬的理论物理学家;要么做物理研究直到形式上完成为止,而且只需要花费极少的努力来成为一个程序员。
但是,程序员是受人尊敬的行业吗?终究什么是程序设计?支持它作为知识上可受人尊敬的领域的健全知识体在哪里?这些在当时都悬而未决。
当狄克斯特拉将这些问题抛给范·温加尔登时,他同意,直到那时为止,还没有多少程序设计学科,然后他平静地说明,自动计算机已经就在我们身边,我们还处于开始阶段,因而为什么不可以在未来岁月中使程序设计成为可尊敬的学科呢?
范·温加尔登的话打消了狄克斯特拉的顾虑,因而狄克斯特拉尽可能迅速并正式地完成了他的物理学习。范·温加尔登成为了狄克斯特拉在阿姆斯特丹数学中心的上司。
开天辟地者
正式进入程序设计专业后,狄克斯特拉有许多对程序设计有影响的贡献。他把程序设计作为一个高度智力挑战的方法;他雄辩地坚持和实际地论证,应当正确的编写程序,而不仅仅是把程序调试成正确的。
在20世纪60年代,软件曾出现过严重危机,由于软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,狄克斯特拉提出了当时程序设计中常用的GOTO语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化。一石激起千层浪,这一观点在计算机学术界激起了强烈的反响,引发了一场长达数年的广泛的论战,其直接结果是结构化程序设计方法的产生。同时诞生了基于这一设计方法的程序设计语言Pascal。
这是狄克斯特拉在程序设计领域做出的最重要、最基础的贡献。但他对计算机科学的贡献并不仅仅限于程序设计。在算法和算法理论、编译器、操作系统等方面,狄克斯特拉都有许多创造。
1956年,他初试身手,成功地设计并实现了在有障碍物的两个地点之间找出一条最短路径的高效算法,这个算法被命名为“狄克斯特拉算法”。它解决了机器人学中的一个十分关键的问题,即运动路径规划问题,至今仍被广泛应用,被认为是利用“贪心法”(greedy method)设计算法的一个成功范例。
在当时大部分人都在研究用计算机搞数值计算,而对离散算法不屑一顾,甚至连一本离散算法方面的学术期刊都没有,直到1959年狄克斯特拉才将其研究成果发表在Numerische Mathematik的创刊号上。
之后,同样在1959年,在数学中心将他们原先的ARMAC计算机进行升级的过程中,狄克斯特拉设计了一种处理程序,解决了“实时中断”问题。现在看来这不足以成为问题,但是在这之前,根本就没有实时中断的概念。两三年之后,他不仅搞出了实时中断,还围绕这个写出了自己的博士论文,并在阿姆斯特丹大学通过论文答辩而获得了博士学位。
而让狄克斯特拉扬名立万的,是他在1960年只用了8个月就设计出的最早的高级语言之一Algol 60。因为Algol 60,他发表了一篇文章:Recursive Programming。于是人们才知道,原来高级语言也可以高效地实现递归,从此以后,所有程序员都不可避免地和狄克斯特拉发明的一个概念打交道:堆栈。
1962年,狄克斯特拉离开了数学中心进入位于荷兰南部的艾恩德大学(Eindhoven Technical University)任数学教授。在那儿他开发了新的操作系统,THE Multiprogramming System(THE是艾恩德霍芬技荷兰文Technische Hoogeschool Eindhoven的词头缩写)。
在这一系统中的关于多层体系结构、顺序进程之间的斥机制等一些重要思想和概念被首次提出,并为以后的操作系统如UNIX等所采用。
狄克斯特拉1972年获得图灵奖
图灵奖介绍
图灵奖是美国计算机协会于1966年设立的,又叫“A.M.图灵奖”,专门奖励那些对计算机事业作出重要贡献的个人。其名称取自计算机科学的先驱、英国科学家艾伦·图灵,这个奖设立目的之一是纪念这位科学家。
图灵奖对获奖者的要求极高,评奖程序极严,一般每年只奖励一名计算机科学家,只有极少数年度有两名在同一方向上做出贡献的科学家同时获奖。因此,尽管“图灵”的奖金数额不算高,但它却是计算机界最负盛名的奖项,有“计算机界诺贝尔奖”之称。
获奖理由
Edsgar Wybe Dijkstra是1950年代ALGOL语言的一个主要贡献者。ALGOL高级编程语言已经成为结构清晰,数学基础严谨的一个典范。E. W. Dijkstra是现代编程语言的主要贡献者之一,为我们理解程序语言的结构,表示方法与实现做出了巨大的贡献。E. W. Dijkstra 15年的学术著作覆盖了图论的理论工作,教育手册,解释文章和编程语言领域的哲学思考。
|