访问:
“云通信上云狂欢节”爆款产品低至7.2折,短信低至0.034元/条
文/ACM 编辑:编辑部
JeffDean发推祝贺:“研究生时上编译课用了龙书,非常愉快的回忆。”
他提到的龙书就是被领域内学者奉为圭臬的《编译器设计原理》,也是艾侯和乌尔曼二人献给全世界数百万软件程序员的最佳礼物。
“龙书”CP:多次合著,启蒙一代代程序员
如果没有一种叫做编译器的重要软件开发工具,我们就会陷入机器代码喃喃自语的世界,然后才能控制计算机。
这就是为什么帮助开发编译器的两位研究人员,艾侯和乌尔曼,获得了2020年图灵奖。
为现代编程语言做这种编译的大部分技术都要归功于艾侯和乌尔曼。
故事开始于1967年,在贝尔实验室,艾侯和乌尔曼塑造了编程语言理论和实现的基础,以及算法设计和分析。
他们通过技术贡献和有影响力的教科书,对编程语言编译器做出了奠基性贡献。
二人在算法设计和分析技术方面的早期合作,也为这一时期出现的计算机科学理论核心做出了重要贡献。
艾侯和乌尔曼一起写了很多本书,比如:
The Theory of Parsing, Translation, and Compiling:1-2,1972,1973
The Design and Analysis of Computer Algorithms,1974
《编译器设计原理》(Principles of Compiler Design),1977
Data Structures and Algorithms, 1983.
《编译.原理.技术与工具》(Compilers: Principles, Techniques, and Tools) 1986.
Foundations of Computer Science, 1992.
其中,他们最广为人知的两本书:
《计算机算法的设计与分析》(1974年)The Design and Analysis of Computer Algorithms
本书被认为是该领域的经典之作,是十多年来计算机科学研究中被引用最多的书籍之一。在计算机科学还是一个新兴领域的时候,它就成为全世界算法课程的标准教材。该书还引入了随机存取机(RAM)作为利用递归关系分析计算机算法的时间和空间复杂性的基本模型。RAM模型还将不同的单个算法编成了一般的设计方法。
另外,龙书——《编译器设计原理》(1977年)Principles of Compiler Design
这本书的封面是一名骑士和一只龙,因此被人称为龙书,又因为那只龙是绿色的,所以称为“绿龙书”。
9年后的1986年,原来的两位作者加上Ravi Sethi,对此书做了一个升级,书名改为Compilers: Principles, Techniques and Tools, 封面依然沿用骑士和龙,龙变成了红色,因此被叫做“龙书二”或者是“红龙书”。
2006年年底,龙书再次升级了。作者又多了一位Monica S. Lam,名字沿用Compilers: Principles, Techniques and Tools, 封面依然保持恐龙和武士的设计,但这次的龙是紫色,因此叫做“紫龙书”。
阿尔佛雷德·艾侯
阿尔佛雷德·艾侯(Alfred Aho)(1941年)目前是哥伦比亚大学荣誉教授。1995年,艾侯加入了哥伦比亚大学计算机科学系,1995年至1997年担任该系主任,2003年春再次担任该系主任。
他目前主要研究量子计算、编程语言、编译器和算法。
艾侯教授拥有多伦多大学工程物理学学士学位和普林斯顿大学电气工程/计算机科学博士学位,他曾获得IEEE冯·诺伊曼奖,也是美国国家工程学会和美国艺术与科学学会的成员,还是加拿大皇家学会会员。
2017年,他与乌尔曼和约翰·霍普克洛夫特三人一起获得了“C&C奖”。他还是美国科学促进会、ACM、贝尔实验室和IEEE的研究员。
左二为艾侯教授,右一为乌尔曼教授
艾侯教授因其关于算法和数据结构、编程语言、编译器以及计算机科学基础的许多论文和书籍而闻名。
“编程语言AWK”中的“A”就代表艾侯教授Aho,另两个字母代表另外两名开发者:“W”是 Peter Weinberger,“K”是Brian Kernighan.
他还编写了作为 UNIX 一部分的字符串模式匹配实用程序 egrep 和 fgrep 的初始版本; fgrep 是现在被称为 Aho-Corasick 算法的第一个广泛使用的实现。
加入哥伦比亚大学之前,他是贝尔实验室计算机科学研究中心的VP。
杰弗里·乌尔曼
杰弗里·戴维·乌尔曼(Jeffrey David Ullman)(1942年生)是美国计算机科学家,也是斯坦福大学Stanford W. Ascherman工程学老教授。
他所著的关于编译器的教材《编译器设计原理》(Principles of Compiler Design),通常被称为“龙书”,计算理论的书(与他人合著)《自动机理论、语言和计算导论》(Introduction to Automata Theory, Languages, and Computation)被称为“灰姑娘书”(Cinderella book),另外还有数据结构和数据库的教材,这些书都被视为所在专业的标准。
“灰姑娘书”。本书的封面描绘了一个女孩(可能是灰姑娘)坐在一个鲁布·戈德堡装置前 手里拿着一根从里面出来的绳子。而封底,在她拉动绳子后,这个装置变得一片狼藉。
乌尔曼于1963年从哥伦比亚大学获得工程数学理学学士学位,1966年获得普林斯顿电气工程专业博士学位。
此后,他在贝尔实验室工作了好几年。1969年到1979年期间,他在普林斯顿大学任教。自1979年以来,他一直是斯坦福大学的教授,目前已经荣退。
1995年,他被选为ACM Fellow;2000年,他被授予高德纳奖。2010年,他还与John Hopcroft一起获得了IEEE冯·诺依曼奖,他们的贡献“为自动机和语言理论领域奠定了基础,并为理论计算机科学做出了许多开创性的贡献。”
乌尔曼的研究兴趣包括数据库理论、数据集成、数据挖掘和使用信息基础结构的教育。
他是数据库理论领域的创始人之一,他带的一批博士生后来都成了领先的数据库理论家。
他是谷歌联合创始人谢尔盖·布林的博士生导师,并曾在谷歌的技术顾问委员会任职。
他目前是Gradiance的首席执行官。他在斯坦福大学在线学习平台上教授有关自动机和挖掘海量数据集的课程。
2020年,乌尔曼被选为美国国家科学院院士,同时还是The Open Code基金会的顾问。
姚期智曾经在清华的一次讲座《科学家与科学之路》中曾经提到乌尔曼,说他是一个有冷幽默的人。
乌尔曼曾说:聪明人不值钱,一毛钱可以买一打,重要的是能对他人有影响(Smart people are dime a dozen,what you want is to have impact)。
乌尔曼本身也实践这个哲学,他自认有一个长处,对于新东西吸收很快,写书也很快。计算机科学日新月异,他对很多新的事情都用心学,很多领域他都会开门课,写本书。
他还有另外一句话,关于写书的哲学:如果材料好,写得差一点也不要紧(If it is worth writing,it is worth writing bad)。在一个新的领域里,第一本书会有很多人用,会影响很多人。
“编译原理”动物园
在在编译原理界,三本经典书籍无可替代。
除了龙书,还有虎书、鲸书,而这些梗都是从封面而来。
虎书(现代编译原理-C语言描述 ,Modern Compiler Implementation in C)
作者:Andrew W.Appel,with Jens Palsberg
很多国内的硕博士都说,其实虎书《现代编译原理-C语言描述》才是最合适的那个,虽然与龙书的内容类似,但虎书增加了数据流分析、循环优化等内容。而且,除了上图的C版,还有java版和ML版。
鲸书(高级编译器设计与实现 ,Advanced Compiler Design and Implementation)
作者:Steven S.Muchnick
鲸书出版时间比龙书和虎书都晚,所以作为后来居上者,它不仅囊括另两本书的内容,还涉及了许多高级的编译器设计与实现内容。可以说,鲸书更加全面,也更适合小白学习。
但是,龙书的封面有条龙,虎书的封面有头虎吗,那鲸书又如何得其名呢?
本书封面是从西北海岸民间艺术收藏中选取的,这是一张奇尔卡特毛毯的照片。中间的一块描绘了一条在水中潜游的鲸鱼。
不仅如此,在编程界,还有很多书是用动物来称呼的,例如O‘relly系列,
蝴蝶书(JavaScript: the good parts)
(树懒书)copying and pasting from stack overflow
等等……
实际上,还有很多从封面来的计算机书梗,比如 SICP 就叫 Wizard Book;另外,来自作者的,比如 CLRS、K&R、GoF……
另外,周志华老师的《机器学习》俗称‘西瓜书’,因为里面有大量用西瓜举例的内容。
还有IanGoodfellow、YoshuaBengio、AaronCourville 编著的《深度学习》,因封面是一张计算机生成的纽约中央公园而被称为‘花书’。
你是几0后编程学习者?‘龙书’CP获奖,你感动吗?
本文素材来自互联网