2020圖靈獎頒給編程的回憶–Jeff Dean的編譯啟蒙書
沸騰了!影響了數代人的“龍書”著作者,榮獲圖靈獎!剛剛,ACM授予“龍書”的兩位作者——哥倫比亞大學教授阿爾佛雷德·艾侯(Alfred Aho)和斯坦福大學教授杰弗裡·戴維·烏爾曼(Jeffrey David Ullman)。表彰他們在編程語言實現方面基礎算法和理論方面的成就,此外,兩位教授還將自己的研究成果編成教材,影響、教育了幾代計算機科學家和程序員。
文/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獲獎,你感動嗎?