今天,当我们回顾编程语言的发展史,三位欧洲计算机科学家的名字是无法绕过的丰碑:尼克劳斯·沃斯、迪杰斯特拉与托尼·霍尔。就在2026年3月5日,随着托尼·霍尔以92岁高龄离世,这三位欧洲编程语言的先驱和挚友,最终都已告别我们。

他们都身披图灵奖的荣光,其贡献深植于计算机科学的根基之中。从左至右,分别是:
尼克劳斯·沃斯 (Niklaus Wirth)
瑞士人,一生发明了8种编程语言,其中最著名的是Pascal。他提出了著名的“程序=数据结构+算法”公式,并于1984年因开发一系列创新的计算机语言而获得图灵奖。
迪杰斯特拉(Edsger Dijkstra)
荷兰人,以其“最短路径算法”和“信号量”闻名,并旗帜鲜明地提出“Goto是有害的”。1972年,他因对结构化编程的贡献获得图灵奖。
霍尔(Tony Hoare)
英国人,发明了高效的“快速排序算法”,创立了霍尔逻辑以验证程序正确性,提出了CSP理论来解决并发过程的交互问题。他也因发明了那个被其自嘲为引发“数十亿美元损失”的null引用而广为人知。1980年,他因对编程语言定义和设计的基础性贡献获得图灵奖。
这三位巨匠都来自欧洲,都从工程学转向计算机领域。他们年龄相仿(沃斯和霍尔同岁,比迪杰斯特拉小4岁),共同的学术追求与志趣使他们走到一起。不仅在暑期活动、学术会议上频繁交流合作,私下里也建立了深厚的友谊,常常互相拜访。
计算机科学成为一门学科
上世纪六七十年代,是编程语言发展的黄金时代。首个高级编程语言Fortran已经出现,但其主要应用于工程界,与硬件紧密捆绑。
1960年1月,包括Fortran之父约翰·巴克斯、Lisp之父约翰·麦卡锡在内的顶尖科学家在巴黎聚会,经过激烈讨论,推出了ALGOL 60。这是一种与计算机硬件无关、专为描述算法而设计的语言。递归、局部变量、begin...end代码块等概念都是由它率先引入的。现代大多数编程语言的语法,都可追溯至ALGOL。
从下图中,可以清晰地看到ALGOL在编程语言谱系中的鼻祖地位。

迪杰斯特拉对ALGOL-60极为推崇,他认为这是计算机科学成为一个独立学科的重要时刻。仅仅7个月后,迪杰斯特拉就在荷兰实现了第一个ALGOL 60编译器,比同行早了一年多。为了实现ALGOL 60中的递归特性,他首次引入了栈(Stack)这一核心概念。
迪杰斯特拉等人还举办了ALGOL 60培训班,学员中就包括刚发表了快速排序算法的托尼·霍尔。霍尔学成后,也在自己的公司成功实现了ALGOL 60。他的实现以其高效和可靠赢得了国际学术界的关注,并因此受邀进入IFIP工作组,参与维护和发展ALGOL语言标准。
快速排序算法
1959年,年轻的托尼·霍尔在Elliott Brothers公司工作。他被派往苏联的莫斯科国立大学,参与一个机器翻译项目。
一个具体问题摆在了面前:他需要先将俄语句子中的单词排序,然后在按字母顺序排列的俄英词典磁带上进行查找。当时的冒泡排序或插入排序算法,面对海量词条时效率低下,速度太慢。
霍尔决心寻找更快的解决方案。一次思考中,“分而治之”的思想跃入脑海。
我们可以用一个简单的例子来理解这个思想:假设你要将一群学生按身高从低到高排队,但不想逐个比较,那么可以这样做:
第一步:选一个人当“参照”
随机挑选一名学生,例如小明,让他站出来。然后向全班宣布:
比小明矮的,站左边。
比小明高的,站右边。
很快,全班就被分成了三部分:
左边(比小明矮的), 小明, 右边(比小明高的)。
此时,小明已经站在了最终排序队列中正确的位置上。接下来,只需要对左边和右边两组递归地重复上述过程即可。
这种算法就是大名鼎鼎的快速排序,其平均时间复杂度仅为O(n log n)。

(上图中,红色标记即为每次分组所用的“参照”)
回到英国后,老板要求他编写Shell排序算法的代码。霍尔却说:“别用Shell排序了,我知道一个更快的算法。”老板不信,与他打了六便士的赌。结果,老板自然是输了。
PASCAL的诞生
1966年,霍尔和沃斯共同提交了一份改进ALGOL的提案。但ALGOL工作组认为他们的提案过于保守,改动太小,予以拒绝。
于是,沃斯和霍尔退出了ALGOL小组,自行实现了提案中的想法,创建了编程语言ALGOL W。正是在ALGOL W中,霍尔引入了那个后来被“无数人诟病”的空引用null。
在2009年的一次软件会议上,霍尔曾半开玩笑地为发明null而道歉:“我当时正在设计ALGOL W的类型系统,我忍不住想把null放进去,因为它很容易实现……没想到它导致了无数的错误、系统崩溃……在过去的40年,引发了数十亿美元的损失。”
1970年,沃斯在ALGOL W的基础上进一步改进,创造了闻名遐迩的Pascal语言。为了便于在各种计算机上实现Pascal,他设计了一种新型的编译器,它不直接生成机器码,而是生成一种中间代码,在虚拟机上运行,这极大地提升了可移植性。
1976年,沃斯撰写了一本介绍基础数据结构与算法的书,同时也介绍了Pascal语法。这本书的书名广为人知——《算法 + 数据结构 = 程序》,自此,这个公式传遍了世界。

PASCAL的流行
Pascal很快在学术界获得认可,但要成为主流,还需要商业化的推力。这得益于菲利普·卡恩(Philippe Kahn),他是沃斯在瑞士苏黎世联邦理工学院任教时的学生。

卡恩看到了沃斯教授在Pascal上的开创性工作,于1982年创立了Borland公司。1983年,Borland推出了革命性的集成开发环境——Turbo Pascal,售价仅为49.95美元。

Turbo Pascal除了价格亲民,另一个杀手锏是编译速度极快。其编译器的核心开发者是丹麦人安德斯·海尔斯伯格(Anders Hejlsberg),他的工作很大程度上受到了沃斯书中“Tiny Pascal”编译器的启发。
Goto是有害的
1968年,迪杰斯特拉向ACM提交了一篇论文,尖锐地批判了编程中滥用Goto语句的现象,并大力倡导结构化编程。他甚至提议在高级语言中废除Goto语句!
论文原标题颇为平淡:“A Case Against the Goto Statement”。时任编辑的沃斯看到了这篇论文,顺手将标题改成了极具冲击力的 《Goto语句是有害的》(Goto Statement Considered Harmful)。
若放在今天,沃斯无疑是一位深谙流量之道的“标题大师”。
这个标题像一枚重磅炸弹,引发了计算机科学界的广泛论战,许多大牛纷纷下场,或支持或反对。
高德纳撰写了《使用Goto语句进行结构化编程》一文,分析指出在某些特定场景下,Goto是最合适的语言结构。K&R在《C语言编程》中也认为,Goto可用于函数错误处理和多层循环中断。
即便在多年以后,Linux之父林纳斯·托瓦兹和《代码大全》作者史蒂夫·麦克康奈尔仍对迪杰斯特拉的观点持保留意见,他们认为合理使用Goto可以提高程序性能和代码清晰度。据统计,2013年的Linux内核代码中仍有约10万个goto语句。
“XXX是有害的”从此成为计算机科学领域的一种经典修辞格式,在随后几十年里被频繁套用:
- “全局变量是有害的”
- “MD5被认为是有害的”
- “Java的新特性是有害的”
- “‘被认为有害’的文章是有害的”
尾声
沃斯、迪杰斯特拉和霍尔,这三位扎根欧洲、因编程语言贡献而获图灵奖的先驱,堪称欧洲编程语言的三巨头。他们都是结构化编程的奠基人,其工作深刻地塑造了现代编程的范式。
2002年8月6日,迪杰斯特拉在与癌症抗争多年后离世,享年72岁。
2024年1月1日,沃斯去世,享年89岁。
2026年3月5日,霍尔去世,享年92岁。

事实上,除了这三位,欧洲还有一对编程语言双子星——挪威的奥利-约翰·达尔和克丽斯汀·奈加特,他们发明了面向对象语言Simula,两人也于2002年去世。
如今我们所使用的编程语言核心概念与特性,大多在上世纪六七十年代就已发明。那一代开拓者们正逐渐老去、离去。这或许标志着那个充满原始创新激情的编程语言黄金时代,已然渐行渐远。但他们的思想遗产,仍在每一行结构清晰的代码中闪耀。如果你想深入了解这些计算机科学的基石,欢迎到云栈社区与更多开发者一起探讨交流。