
这三位都是图灵奖获得者,他们的名字和发明散布在各种教科书中,从左到右,依次是:
尼克劳斯·沃斯 (Niklaus Wirth)
瑞士人,一生发明了8种编程语言,其中最著名的是Pascal。他提出了著名的“程序=数据结构+算法”这一计算机科学的核心公式。1984年,沃斯因开发了一系列创新的计算机语言而获得图灵奖。
迪杰斯特拉(Edsger Dijkstra)
荷兰人,以其命名的“最短路径算法”和“信号量”机制闻名于世。他提出了“Goto是有害的”著名论断,极大地推动了结构化编程的发展,并于1972年因此贡献获得图灵奖。
霍尔(Tony Hoare)
英国人,发明了高效的“快速排序算法”。为了验证程序正确性,他发明了霍尔逻辑;为解决并发过程交互,提出了CSP(通信顺序进程)理论。此外,他还因发明了引发诸多问题的空引用(null)而“闻名”。1980年,他因对编程语言定义和设计的基础性贡献获得图灵奖。
三人均来自欧洲,拥有工程学背景后转入计算机领域。他们年龄相仿,志趣相投,不仅在学术会议和暑期活动中频繁合作,私底下也建立了深厚的友谊。

迪杰斯特拉与ALGOL的奠基
上世纪六七十年代是编程语言发展的黄金时期。1960年,以Fortran之父约翰·巴克斯、Lisp之父约翰·麦卡锡为首的顶尖科学家们经过激烈讨论,推出了ALGOL 60。这是一种旨在描述算法、与计算机硬件无关的编程语言,它率先引入了递归、本地变量和begin…end代码块等创新概念。现代大多数编程语言的语法都可追溯至ALGOL。

迪杰斯特拉高度赞赏ALGOL 60,称其为“计算机科学成为一个学科的重要时刻”。仅七个月后,他就在荷兰成功实现了第一个ALGOL 60编译器,比其它小组早了一年多。为了支持ALGOL 60中的递归特性,迪杰斯特拉首次引入了栈(Stack) 的概念。
迪杰斯特拉等人举办的ALGOL 60培训班吸引了一位名叫霍尔的学员。霍尔当时刚发表了快速排序算法,学成后也在自己的机器上实现了ALGOL 60。他的实现以高效和可靠著称,因此受到国际学术界关注,并由此进入了IFIP工作组,参与ALGOL的维护与发展。
Pascal的诞生与“十亿美元的错误”
1966年,霍尔与沃斯共同提出了一份旨在改进ALGOL的提案,但被ALGOL小组以“过于保守”为由拒绝。于是,两位学者决定独立推进他们的构想,实现了编程语言ALGOL W。
正是在ALGOL W中,霍尔引入了那个后来被他戏称为“十亿美元错误”的空引用(null)。在2009年的一次会议上,霍尔曾幽默地“道歉”:“我忍不住想把它加入类型系统,因为它太容易实现了……没想到它导致了无数的错误、系统崩溃……在过去40年里造成了数十亿美元的损失。”
1970年,沃斯在ALGOL W的基础上进一步改进,创造了大名鼎鼎的Pascal语言。为了让Pascal易于移植到各种计算机上,他设计了一种新型编译器,它不直接生成机器码,而是生成一种中间代码在虚拟机上运行。1976年,沃斯撰写了《算法+数据结构=程序》一书,在介绍基础算法与数据结构的同时也推广了Pascal语法,使得这个著名公式广为流传。

Turbo Pascal 与普及浪潮
Pascal很快得到了学术界的认可,但其走向主流得益于沃斯的学生Philippe Kahn。1982年,Kahn创立了Borland公司。次年,Borland推出了革命性的集成开发环境Turbo Pascal,售价仅为49.95美元。
Turbo Pascal除了价格低廉,其编译速度之快是一大杀手锏。负责编译器的核心人物是安德斯·海尔斯伯格(Anders Hejlsberg),他的工作很大程度上受到了沃斯书中“Tiny Pascal”编译器的启发。
“Goto是有害的”与编程范式之争
1968年,迪杰斯特拉向ACM提交了一篇论文,尖锐批评了编程中滥用Goto语句的现象,并大力倡导结构化编程,甚至提议在高级语言中废除Goto。论文原题为《反对Goto语句的案例》。
时任编辑的沃斯巧妙地将标题改为《Goto语句被认为是有害的》(Goto Statement Considered Harmful)。这个极具话题性的标题在当时引发了巨大争论,包括高德纳在内的许多专家都参与了讨论。即便在今天,关于Goto在特定场景(如错误集中处理)下是否有用的讨论仍在继续。这一事件也让“XXX被认为是有害的”成为了技术圈内的一种经典修辞。

尾声与传承
沃斯、迪杰斯特拉和霍尔这三位欧洲的编程语言先驱,因其对结构化编程和语言设计的深远影响,堪称“欧洲编程语言三巨头”。
2002年8月6日,迪杰斯特拉因病去世,享年72岁。2024年1月1日,沃斯去世,享年89岁。如今,三巨头中仅余霍尔一人。

实际上,欧洲的编程语言先驱不止这三位。挪威的Ole-Johan Dahl和Kristen Nygaard发明了面向对象语言Simula,两人也于2002年去世。
现代编程语言的核心理念与特性,大多在上世纪六七十年代已被奠基。随着那一代先驱逐渐老去,一个激情澎湃的编程语言黄金时代,也渐渐落下了帷幕。