解讀高德納:最偉大計算機程序員是如何誕生的
計算機編程是一種藝術(shù)形式,就如同人們譜寫詩歌和音樂。 ——高德納
高德納(Donald Ervin Knuth,1938年1月10日-),出生于密爾沃基,美國著名計算機科學(xué)家,斯坦福大學(xué)計算機系榮譽退休教授。高德納教授被譽為現(xiàn)代計算機科學(xué)的鼻祖[來源請求],在計算機科學(xué)及數(shù)學(xué)領(lǐng)域發(fā)表了多部具廣泛影響的論文和著作。
高德納最為人知的事跡是,他是《計算機程序設(shè)計藝術(shù)》(The Art of Computer Programming)的作者。此書是計算機科學(xué)界最受高度敬重的參考書籍之一。他創(chuàng)造了算法分析的領(lǐng)域,在數(shù)個理論計算機科學(xué)的分支做出基石一般的貢獻,此外還是排版軟件TEX和字體設(shè)計系統(tǒng)Metafont的發(fā)明人。 高德納的英文名直譯為唐納德·歐文·克努斯(Knuth發(fā)音為/knuːθ/[1]),“高德納”這個中文名字是1977年他訪問中國之前所取的,命名者是儲楓(姚期智的夫人,計算機科學(xué)家)。 |
高德納真的只是一個人么?他一生發(fā)表了150余篇論文,提出了領(lǐng)域內(nèi)最重要的三個算法。他的經(jīng)典巨著(如今在寫第四卷)《計算機程序設(shè)計藝術(shù)》對整個行業(yè)進行了綜述,同時也提出了原創(chuàng)的研究見解。這本書的前幾卷已經(jīng)誕生了中文、日語、俄語和匈牙利語等多個版本。在三十多年的研究生涯中,他還找時間創(chuàng)造出功能強大的排版印刷軟件系統(tǒng),以便進行多樣化的寫作,主題 包括古巴比倫算法和《圣經(jīng)》詩篇,甚至還有小說。在“業(yè)余時間”里,他喜歡彈奏自已設(shè)計的管風(fēng)琴。
高德納和妻子在斯坦福大學(xué)家中,面前是他自己設(shè)計的管風(fēng)琴,1975年(斯坦福大學(xué)新聞出版服務(wù)中心提供)
在其職業(yè)生涯中,高德納受到了公眾廣泛的贊譽和褒獎,包括1974年獲得計算機科學(xué)界的***榮譽圖靈獎,1979年獲得吉米·卡特總統(tǒng)頒發(fā)的美國國家科學(xué)獎?wù)隆H欢叩录{以一種超然的態(tài)度面對這些榮譽。當(dāng)年的圖靈獎杯如今已被他當(dāng)做了盛放水果的果盤。
高德納的音樂世界及他的***篇出版物
高德納于1938年出生于密爾沃基。他的父親是克努斯家族的***位大學(xué)生,最開始是小學(xué)教師,后來在一所路德教會高中教簿記學(xué)。每周日他還在教堂彈奏管風(fēng)琴。高德納繼承了他父親對音樂和教育的理解,尤其是語言風(fēng)格。
我最感興趣的東西恰恰是老師們擅長的。我們在語句分析圖方面進行了扎實的訓(xùn)練。下課后總有一堆人湊在一起分析詩歌中的語句,其樂融融。
作為校報的編輯,高德納發(fā)明了填字游戲 。他至今仍記得當(dāng)年在詞海中尋找合適題目的樂趣。從小時候起,高德納就開始贏得榮譽。8年級時,一家糖果生產(chǎn)商贊助了一次比賽,要求選手用其品牌 “Ziegler’s Giant Bar”(齊格勒巨型棒棒糖)中的字母組成新的單詞,組成單詞數(shù)量最多者獲勝。小高德納決定嘗試一把。
我找出了大概4500個單詞,還沒有用撇號。如果用撇號我會找到更多。比賽裁判給出的“官方”單詞表上只有2500個。
他贏得了自己的***份獎勵:一臺電視機(在當(dāng)時屬于奢侈品)以及足夠整個學(xué)校享用的齊格勒棒棒糖。上高中之后,高德納又獲得了西屋科學(xué)天才獎的提名,理由是他的“普茨比度量衡體系”。高德納以他日后研究生涯中標(biāo)志性的細(xì)心和準(zhǔn)確,定義了一系列基本單位,例如長度單位普茨比 (第26期MAD雜志的厚度)、“麻煩程度”單位MAD(即48件事的麻煩程度)以及能量的基本單位whatmeworry 。1957年6月,MAD 漫畫雜志花25美金買下了這篇作品,使之成為了高德納等身著作中的***篇出版物。不過,他在高中時期最關(guān)注的既不是寫作也不是科普,而是音樂。
當(dāng)時我認(rèn)為上大學(xué)時應(yīng)該會主修音樂專業(yè)。一開始我吹薩克斯,后來樂隊的低音號手出了事故,我又開始吹低音號。我為樂隊編了一首曲子,把當(dāng)時熱門電視劇的主題曲都加了進去——《法網(wǎng)恢恢》 、胡迪•都迪秀 還有百利發(fā)乳 的廣告音樂。我那時可不懂什么版權(quán)保護法。
高德納的計算機之路
1956年,高德納有生以來***次接觸到了計算機,那是一臺IBM 650,F(xiàn)ortran之前的機器。他通宵不眠地鉆研使用手冊,并且自學(xué)了基本編程。
我們從IBM得到的手冊上面有一些編程的案例,而我發(fā)現(xiàn)自己的方法比上面介紹的好得多。所以我猜自己可能有些天賦。其實我不知道的是幾乎所有人都能對那些程序加以改進——當(dāng)時的相關(guān)書籍都很差勁。我開始學(xué)習(xí)計算機時,正是巴科斯忙于Fortran的時候。
高德納的***個程序是把數(shù)分解為素數(shù)的乘積,另一個程序則是教計算機玩井字棋 。不過這些都只是小打小鬧而已。1958年他為凱斯校籃球隊編寫了一個程序,根據(jù)命中率、搶斷、失誤等數(shù)據(jù)為每位球員評分。球隊教練非常欣賞這套程序,宣稱球隊在聯(lián)賽奪冠也有它的一份功勞。《新聞周刊》專門為該程序?qū)懥艘黄獔蟮溃琁BM也在公司宣傳冊上刊登了高德納與650機的合影。高德納被計算機的無所不能深深地吸引住了。事實證明計算機甚至也符合他對音樂的興趣。數(shù)學(xué)是一種模式的科學(xué)。音樂也是模式。計算機科學(xué)在進行抽象、建立模式等方面同樣有很多作為。我認(rèn)為,計算機科學(xué)與其他領(lǐng)域***的區(qū)別就在于它不斷的躍變 ——從微觀角度上升到宏觀視角。
有許多職業(yè)的產(chǎn)生是有明確的需要,人們要找到解決重要問題的方法,比如醫(yī)學(xué)方面的職業(yè)。而像計算機科學(xué)這樣的職業(yè)之所以存在,是我們從小形成的思維結(jié)構(gòu)所決定的。
如果你碰巧屬于某2%的人,那么你就會自然而然地被計算機吸引而產(chǎn)生共鳴。正是思維方式將我們與其他人區(qū)分開來。最終,我意識到自己是一位計算機科學(xué)家。
1960年,高德納以***異成績從凱斯理工學(xué)院畢業(yè),而且校方打破慣例,投票決定同時授予他數(shù)學(xué)碩士學(xué)位。隨后他前往加州理工學(xué)院,3年后獲得數(shù)學(xué)博士學(xué)位。他寫了一篇關(guān)于組合幾何學(xué)的論文“有限半視場及射影平面”。
1963年畢業(yè)后,高德納以數(shù)學(xué)系助理教授的身份加入了加州理工學(xué)院教研組,仍然繼續(xù)追隨著對計算機的興趣。自1960年起他就擔(dān)任了布勞斯公司的顧問。布勞斯公司(后合并為優(yōu)利系統(tǒng))是當(dāng)時計算機產(chǎn)業(yè)的領(lǐng)跑者,與艾茲赫爾•戴克斯徹等杰出人物保持著密切的聯(lián)系。
高德納在布勞斯的工作內(nèi)容包括硬件和軟件設(shè)計,尤其是對新發(fā)明的Algol 60編程語言提供支持。這份工作讓他有機會與戴克斯徹當(dāng)面認(rèn)識,分享彼此對編譯的共同愛好。戴克斯徹和J. A. 祖內(nèi)維德 在1960年8月已經(jīng)實現(xiàn)了***個Algol 60編譯器。
我們見了面,并一直保持書信來往。他***的長處在于永不妥協(xié)的審美品味,我呢,總是意志不堅,搖擺不定。如果他對我說他喜歡我做的某件事,那么他就是真的喜歡;如果他說不喜歡,那么就是真的不喜歡。所以我視他為難得的諍友。
在那個時侯,數(shù)學(xué)和計算機科學(xué)之間存在著巨大的鴻溝。在寫程序時,你必須來回調(diào)整,直到自己認(rèn)為它能順利運行。利用數(shù)學(xué)對程序進行證明——這在當(dāng)時是一個非常激進的概念,所有人都認(rèn)為不可能。戴克斯徹的確是計算機程序驗證方面最偉大的先驅(qū)之一。
巨著《計算機程序設(shè)計藝術(shù)》的誕生
1962年1月,Addison-Wesley出版社 找到當(dāng)時還是學(xué)生的高德納,邀請他為編譯器這一新生領(lǐng)域?qū)懸槐緯M晗乃麊恿诉@項計劃,到1963年秋,他開始讓自己在加州理工的學(xué)生試讀初稿,以測試效果。
到了1966年,我已經(jīng)手寫了3000頁的草稿,開始用打字機把它們打出來。我比較了手書和打印頁面的文字大小,估計這個3000頁會減少到700頁。但是出版社說我錯了,比率應(yīng)該是1比1。經(jīng)過瘋狂的會議討論,我們定下了一個計劃:出一個七卷冊的系列叢書。
在1966年,舉一人之力就可以了解整個計算機科學(xué)領(lǐng)域。但是它一直在不斷成長壯大。我已經(jīng)盡全力跟上它的步伐。而現(xiàn)在我發(fā)現(xiàn)第4卷(關(guān)于組合算法)一卷馬上就要超過2000頁——第4A、4B和4C卷,估計能在2003年完成。
一個新科博士,挑戰(zhàn)如此包羅萬象的典籍,本就是一件驚人的事,但它得到的反應(yīng)卻更加驚人:《計算機程序設(shè)計藝術(shù)》的前三卷成了20世紀(jì)70年代初教科書的***,至今仍頻頻被用于參考書。它們之所以一直受到追捧,正是因為高德納對待課題一絲不茍的態(tài)度。對提及的每一個理論,書中都會巨細(xì)無遺地討論所有細(xì)節(jié)。在解釋某個算法后,高德納還會再給出一個程序?qū)嵗?mdash;—目的是確保讀者不會產(chǎn)生誤解。書中嚴(yán)謹(jǐn)與機智并舉,而且盡力展現(xiàn)每一條理念下蘊藏的美感。正如紐約大學(xué)的編譯器設(shè)計師埃德•施恩伯格 所言:“戴克斯徹教我們分辨是非,高德納教我們分辨好壞。”
由小故事探究最偉大的計算機程序員如何誕生的
民間故事中一直把高德納視作為有史以來最偉大的計算機程序員。我們不妨參考以下艾倫•凱所講的軼事。
當(dāng)我在斯坦福大學(xué)從事AI項目時(20世紀(jì)60年代末),每個感恩節(jié)我們都會與在灣區(qū)做研究項目的人們進行一次編程競賽。獎品是一只火雞。麥卡錫為競賽出題。高德納參加的那一年,他一舉拿下了兩個獎項:程序調(diào)試所用的時間最少、算法執(zhí)行效率***。而且他用的是所有參賽者中最爛的系統(tǒng),叫做Wilbur系統(tǒng),只能遠(yuǎn)程批處理。可以說他把所有人都打得屁滾尿流。然后他們問他:“你怎么這么牛?”他回答說:“我學(xué)編程的時候,一天能摸5分鐘計算機就不錯了。想讓程序跑起來,就必須寫得沒有錯誤。所以編程就像在石頭上雕刻一樣,必須小心翼翼。我就是這樣學(xué)編程的。”
本文摘自:《奇思妙想:15位計算機天才及其重大發(fā)現(xiàn)》
原文鏈接:http://www.ituring.com.cn/article/35439
【編輯推薦】