哭了!2020圖靈獎頒給編程的回憶——Jeff Dean 的編譯啟蒙書
沸騰了!影響了數(shù)代人的「龍書」著作者,榮獲圖靈獎!
剛剛,ACM授予「龍書」的兩位作者——哥倫比亞大學(xué)教授阿爾佛雷德·艾侯 (Alfred Aho)和斯坦福大學(xué)教授杰弗里·戴維·烏爾曼(Jeffrey David Ullman)。
表彰他們在編程語言實現(xiàn)方面基礎(chǔ)算法和理論方面的成就,此外,兩位教授還將自己的研究成果編成教材,影響、教育了幾代計算機科學(xué)家和程序員。
Jeff Dean發(fā)推祝賀:「研究生時上編譯課用了龍書,非常愉快的回憶。」
他提到的龍書就是被領(lǐng)域內(nèi)學(xué)者奉為圭臬的《編譯器設(shè)計原理》,也是艾侯和烏爾曼二人獻給全世界數(shù)百萬軟件程序員的最佳禮物。
「龍書」CP:多次合著,啟蒙一代代程序員
如果沒有一種叫做編譯器的重要軟件開發(fā)工具,我們就會陷入機器代碼喃喃自語的世界,然后才能控制計算機。
這就是為什么幫助開發(fā)編譯器的兩位研究人員,艾侯和烏爾曼,獲得了2020年圖靈獎。
為現(xiàn)代編程語言做這種編譯的大部分技術(shù)都要歸功于艾侯和烏爾曼。
故事開始于1967年,在貝爾實驗室,艾侯和烏爾曼塑造了編程語言理論和實現(xiàn)的基礎(chǔ),以及算法設(shè)計和分析。
他們通過技術(shù)貢獻和有影響力的教科書,對編程語言編譯器做出了奠基性貢獻。
二人在算法設(shè)計和分析技術(shù)方面的早期合作,也為這一時期出現(xiàn)的計算機科學(xué)理論核心做出了重要貢獻。
艾侯和烏爾曼一起寫了很多本書,比如:
The Theory of Parsing, Translation, and Compiling:1-2,1972,1973
The Design and Analysis of Computer Algorithms,1974
《編譯器設(shè)計原理》(Principles of Compiler Design),1977
Data Structures and Algorithms, 1983.
《編譯.原理.技術(shù)與工具》(Compilers: Principles, Techniques, and Tools) 1986.
Foundations of Computer Science, 1992.
其中,他們最廣為人知的兩本書:
《計算機算法的設(shè)計與分析》(1974年)The Design and Analysis of Computer Algorithms
本書被認為是該領(lǐng)域的經(jīng)典之作,是十多年來計算機科學(xué)研究中被引用最多的書籍之一。在計算機科學(xué)還是一個新興領(lǐng)域的時候,它就成為全世界算法課程的標準教材。該書還引入了隨機存取機(RAM)作為利用遞歸關(guān)系分析計算機算法的時間和空間復(fù)雜性的基本模型。RAM模型還將不同的單個算法編成了一般的設(shè)計方法。
另外,龍書——《編譯器設(shè)計原理》(1977年)Principles of Compiler Design
這本書的封面是一名騎士和一只龍,因此被人稱為龍書,又因為那只龍是綠色的,所以稱為「綠龍書」。
9年后的1986年,原來的兩位作者加上Ravi Sethi,對此書做了一個升級,書名改為Compilers: Principles, Techniques and Tools, 封面依然沿用騎士和龍,龍變成了紅色,因此被叫做「龍書二」或者是「紅龍書」。
2006年年底,龍書再次升級了。作者又多了一位Monica S. Lam,名字沿用Compilers: Principles, Techniques and Tools, 封面依然保持恐龍和武士的設(shè)計,但這次的龍是紫色,因此叫做「紫龍書」。
阿爾佛雷德·艾侯
阿爾佛雷德·艾侯(Alfred Aho)(1941年)目前是哥倫比亞大學(xué)榮譽教授。1995年,艾侯加入了哥倫比亞大學(xué)計算機科學(xué)系,1995年至1997年擔(dān)任該系主任,2003年春再次擔(dān)任該系主任。
他目前主要研究量子計算、編程語言、編譯器和算法。
艾侯教授擁有多倫多大學(xué)工程物理學(xué)學(xué)士學(xué)位和普林斯頓大學(xué)電氣工程/計算機科學(xué)博士學(xué)位,他曾獲得IEEE馮·諾伊曼獎,也是美國國家工程學(xué)會和美國藝術(shù)與科學(xué)學(xué)會的成員,還是加拿大皇家學(xué)會會員。
2017年,他與烏爾曼和約翰·霍普克洛夫特三人一起獲得了「C&C獎」。他還是美國科學(xué)促進會、ACM、貝爾實驗室和IEEE的研究員。
左二為艾侯教授,右一為烏爾曼教授
艾侯教授因其關(guān)于算法和數(shù)據(jù)結(jié)構(gòu)、編程語言、編譯器以及計算機科學(xué)基礎(chǔ)的許多論文和書籍而聞名。
「編程語言AWK」中的「A」就代表艾侯教授Aho,另兩個字母代表另外兩名開發(fā)者:「W」是 Peter Weinberger,「K」是Brian Kernighan.
他還編寫了作為 UNIX 一部分的字符串模式匹配實用程序 egrep 和 fgrep 的初始版本; fgrep 是現(xiàn)在被稱為 Aho-Corasick 算法的第一個廣泛使用的實現(xiàn)。
加入哥倫比亞大學(xué)之前,他是貝爾實驗室計算機科學(xué)研究中心的VP。
杰弗里·烏爾曼
杰弗里·戴維·烏爾曼(Jeffrey David Ullman)(1942年生)是美國計算機科學(xué)家,也是斯坦福大學(xué)Stanford W. Ascherman工程學(xué)老教授。
他所著的關(guān)于編譯器的教材《編譯器設(shè)計原理》(Principles of Compiler Design),通常被稱為「龍書」,計算理論的書(與他人合著)《自動機理論、語言和計算導(dǎo)論》(Introduction to Automata Theory, Languages, and Computation)被稱為「灰姑娘書」(Cinderella book),另外還有數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫的教材,這些書都被視為所在專業(yè)的標準。
「灰姑娘書」
本書的封面描繪了一個女孩(可能是灰姑娘)坐在一個魯布·戈德堡裝置前 手里拿著一根從里面出來的繩子。而封底,在她拉動繩子后,這個裝置變得一片狼藉。
烏爾曼于1963年從哥倫比亞大學(xué)獲得工程數(shù)學(xué)理學(xué)學(xué)士學(xué)位,1966年獲得普林斯頓電氣工程專業(yè)博士學(xué)位。
此后,他在貝爾實驗室工作了好幾年。1969年到1979年期間,他在普林斯頓大學(xué)任教。自1979年以來,他一直是斯坦福大學(xué)的教授,目前已經(jīng)榮退。
1995年,他被選為ACM Fellow;2000年,他被授予高德納獎。2010年,他還與John Hopcroft一起獲得了IEEE馮·諾依曼獎,他們的貢獻「為自動機和語言理論領(lǐng)域奠定了基礎(chǔ),并為理論計算機科學(xué)做出了許多開創(chuàng)性的貢獻?!?/p>
烏爾曼的研究興趣包括數(shù)據(jù)庫理論、數(shù)據(jù)集成、數(shù)據(jù)挖掘和使用信息基礎(chǔ)結(jié)構(gòu)的教育。
他是數(shù)據(jù)庫理論領(lǐng)域的創(chuàng)始人之一,他帶的一批博士生后來都成了領(lǐng)先的數(shù)據(jù)庫理論家。
他是谷歌聯(lián)合創(chuàng)始人謝爾蓋·布林的博士生導(dǎo)師,并曾在谷歌的技術(shù)顧問委員會任職。
他目前是Gradiance的首席執(zhí)行官。他在斯坦福大學(xué)在線學(xué)習(xí)平臺上教授有關(guān)自動機和挖掘海量數(shù)據(jù)集的課程。
2020年,烏爾曼被選為美國國家科學(xué)院院士,同時還是The Open Code基金會的顧問。
姚期智曾經(jīng)在清華的一次講座《科學(xué)家與科學(xué)之路》中曾經(jīng)提到烏爾曼,說他是一個有冷幽默的人。
烏爾曼曾說:聰明人不值錢,一毛錢可以買一打,重要的是能對他人有影響(Smart people are dime a dozen,what you want is to have impact)。
烏爾曼本身也實踐這個哲學(xué),他自認有一個長處,對于新東西吸收很快,寫書也很快。計算機科學(xué)日新月異,他對很多新的事情都用心學(xué),很多領(lǐng)域他都會開門課,寫本書。
他還有另外一句話,關(guān)于寫書的哲學(xué):如果材料好,寫得差一點也不要緊(If it is worth writing,it is worth writing bad)。在一個新的領(lǐng)域里,第一本書會有很多人用,會影響很多人。
「編譯原理」動物園
在在編譯原理界,三本經(jīng)典書籍無可替代。
除了龍書,還有虎書、鯨書,而這些梗都是從封面而來。
虎書(現(xiàn)代編譯原理-C語言描述 ,Modern Compiler Implementation in C)
作者:Andrew W.Appel,with Jens Palsberg
很多國內(nèi)的碩博士都說,其實虎書《現(xiàn)代編譯原理-C語言描述》才是最合適的那個,雖然與龍書的內(nèi)容類似,但虎書增加了數(shù)據(jù)流分析、循環(huán)優(yōu)化等內(nèi)容。而且,除了上圖的C版,還有java版和ML版。
鯨書(高級編譯器設(shè)計與實現(xiàn) ,Advanced Compiler Design and Implementation)
作者:Steven S.Muchnick
鯨書出版時間比龍書和虎書都晚,所以作為后來居上者,它不僅囊括另兩本書的內(nèi)容,還涉及了許多高級的編譯器設(shè)計與實現(xiàn)內(nèi)容??梢哉f,鯨書更加全面,也更適合小白學(xué)習(xí)。
但是,龍書的封面有條龍,虎書的封面有頭虎嗎,那鯨書又如何得其名呢?
本書封面是從西北海岸民間藝術(shù)收藏中選取的,這是一張奇爾卡特毛毯的照片。中間的一塊描繪了一條在水中潛游的鯨魚。
不僅如此,在編程界,還有很多書是用動物來稱呼的,例如O'relly系列,
蝴蝶書(JavaScript: the good parts)
(樹懶書)copying and pasting from stack overflow
等等……
實際上,還有很多從封面來的計算機書梗,比如 SICP 就叫 Wizard Book;另外,來自作者的,比如 CLRS、K&R、GoF……
另外,周志華老師的《機器學(xué)習(xí)》俗稱「西瓜書」,因為里面有大量用西瓜舉例的內(nèi)容。
還有IanGoodfellow、YoshuaBengio、AaronCourville 編著的《深度學(xué)習(xí)》,因封面是一張計算機生成的紐約中央公園而被稱為「花書」。
你是幾0后編程學(xué)習(xí)者?「龍書」CP獲獎,你感動嗎?