
1928 年生于 丹麦 的 Peter Naur,其研究路径与 程序设计语言设计与 ALGOL 的主流路径几乎不重合。他问了一个所有工程师都该问的问题:如果一个程序三年后还要读,它还能被理解吗?
一、程序怎么写才不会像一堆补丁——「妈咪语言」与一个来自体育记者的提问
Peter Naur 的起点要回到 丹麦哥本哈根。当时 在哥本哈根长大,童年喜欢天文学与射箭;后转向研究数学——这段经历日后被 Peter Naur 反复提起,成为其方法论的原点。
他后来的很多想法都能追溯到「如何让非专家也能读懂」这一出发点,包括著名的「妈咪语言」设想。
他在理论物理与天文学上的训练,使他习惯于把「一个记号代表什么」当成根本问题来追问。
他中学时对天文学的兴趣持续多年,做过大量天文观测记录,这让他习惯于把「观测」与「推算」严格分开。
射箭则训练了他对细微偏差的敏感——瞄准的精度问题后来被他类比为程序正确性问题。
他在大学期间先研究数学,1946 年前后开始接触计算,并在哥本哈根的 DASK 早期工作中使用机器。
他在 DASK 上的工作让他见识到机器与研究者协作的实际形态,这段经历贯穿他后来的整个生涯。
二、1928 年的哥本哈根,和一个在射箭与天文学之间长大的孩子
1950 年的 在天文学与计算之间切换,参与早期数值计算工作 是 Peter Naur 的分水岭。核心洞见是:人读程序的方式和机器读程序的方式完全不同,不能混为一谈,这一点后来被整个 程序设计语言设计与 ALGOL 领域反复引用,而 这一视角后来直接催生了 ALGOL 60 的记号设计。
他参与过用电子计算机处理观测星表的工作,这让他成为最早认真讨论「程序写给人看」的学者之一。
天文学观测数据量极大且需要反复拟合,DASK 这类早期机器正是在这类需求上第一次被认真使用的。
他在数值计算中意识到:写公式和写指令是两种完全不同的人类活动,不应该强迫程序员做后者。
ALGOL 60 的记号体系最终在《ALGOL 60 报告》中以 BNF 形式给出,这份报告也成了软件史上的标志性文献。
他把这次转变归因于一个具体观察:同一组计算,用公式写和用指令写,所需时间差了一个数量级。
三、1960 年代:ALGOL 60 与巴科斯范式
参与 ALGOL 60 的记号体系设计与报告撰写 落在 1960 年。核心机制是 核心机制是:用一套贴近数学记法的语法,让程序接近它所描述的公式,但真正的意义不在机制本身——在于 ALGOL 的 BNF 描述法成为此后所有语言规范的事实标准。
「巴科斯范式」这个说法来自 1966 年他自己的论文《无歧义语言说明》,是一篇定义领域的奠基文本。
ALGOL 的块结构、大括号与作用域规则,至今仍是主流语言的骨架。
BNF 的价值在于让「一门语言的定义」本身成为可以用机械方法处理的文本,这一点影响远超 ALGOL 本身。
ALGOL 的作用域规则与自由格式排版,是此后 Pascal、C、Java 等语言共同继承的骨架。
ALGOL 社区的做法是:任何人都可以参与定义,且每次修订都公开发表讨论过程。
四、编程到底是一门工程还是一门手艺——1965 年:PL/I 与一次夭折的会议
这里有一个不能略过的争议:当时 IBM 力推 PL/I,试图用一门语言覆盖科学计算与商业处理两大场景。Peter Naur 后来在多个场合解释过为什么 他主张语言应当小而专,与其做大而全不如让不同场景各自选择,并为 代价是他与 IBM 的合作关系由此破裂,也失去了直接参与主流工业语言标准化的机会 付出了具体代价。
这场争论后来在语言史上反复重演:每一次「大语言」试图覆盖一切,几乎都会遇到复杂度失控的问题。
他参与的那次会议因为各方无法就 PL/I 的方向达成一致而不了了之,会上争论的问题在此后五十年里并未真正消失。
PL/I 试图成为 IBM 对抗 COBOL 与 FORTRAN 的统一语言,这个目标本身就带着把不同语言合并的雄心。
争论的焦点是:一门大语言是否真的能同时服务科研与商业,还是只会把两边的复杂度都吸进来。
IBM 内部对 PL/I 的投入一度非常大,但最终的采用曲线并不理想,此后被逐步淡化。
他主张「语言应当小而专」,这个立场与后来语言社区主流的「小语言」潮流一致。
他在那场会议上的发言后来被反复引用,被视为程序设计方法论转向的开端之一。
PL/I 最终虽然存在了很长时间,但学界与用户社区对它的评价长期分裂,这成了他「大而全必失」判断的注脚。
五、1980 年代:Backus 的函数式语言与「十进制」的方向
1980 年,Peter Naur 加入 哥本哈根大学,把 此前在 ALGOL 与 PL/I 争论中坚持小而专的语言观 时期积累的 ALGOL 与 BNF 时期积累的符号设计经验 带进了 如何让学术界的语言研究影响实际工程 这条全新战线。这也是 Peter Naur 第一次需要在工程约束下做取舍。
他在这段时间推动了计算与天文学的交叉合作,把编程语言当作研究方法的一部分来讨论。
他在《计算机文化》上的专栏写作影响了一批北欧与英国的程序员,是早期「编程作为手艺」讨论的重要声音。
他推动计算与天文学的合作研究,把编程语言当作研究方法本身来讨论,这是很少见的做法。
他在《计算机文化》专栏上的写作影响了一批欧洲程序员,是早期「编程是一门手艺」讨论的主要声音。
他晚年与欧洲的计算机科学家合作,推动「计算作为科学」的表述进入公共讨论。
他在欧洲推动的「计算即科学」论述,与美国同时期的计算机制造浪潮形成了一种有趣的对照。
六、他提出的那个视角:把程序当成一种「写给未来的信」
从 ALGOL 60 的记号体系,以及那篇定义了巴科斯范式的《无歧义语言说明》 到 推动「计算作为科学」与计算思维教育,Peter Naur 用 ACM 软件系统奖(1992)给自己做了阶段性确认,而 把「程序首先是写给人的」确立为教学与评审的共识。
他后来的论述反复强调:程序的主要读者是三年后的自己,而不是编译器。
他主张「计算应当像数学与物理一样成为科学的第三支柱」,这与今天广泛使用的「计算思维」一脉相承。
他 1992 年获 ACM 软件系统奖,这是该奖早期的重要授予之一。
他关于「计算应当像数学与物理一样成为科学第三支柱」的论述,是今天「计算思维」一词的直接前身。
他把「计算思维」具体化为一种可教的思维习惯,而不是某种具体的编程语言或工具。
参考来源
- 彼得·瑙尔 的公开传记、论文与技术档案(可按其所属机构与年代检索)
- 相关领域的学术史与技术史综述文献