不會演算法的音樂家,不是一個好程式設計師

Editor發表於2018-12-27

《黑客與畫家》一書中,讓我們看到那些卓越的黑客都有像藝術家一樣的思維方式和行為習慣。最好的程式設計師不是機械式的程式碼搬運工,而是有靈感的有匠心的藝術家。


而在計算機領域,高德納(Donald Ervin Knuth)就是這樣一位堪稱藝術家的人物。


不會演算法的音樂家,不是一個好程式設計師


和很多理工科天才一樣,高德納過去是音樂天才,並且一度從事音樂創作,他後來還用資訊理論分析音樂的複雜度。大學時為校籃球隊打球時,他還寫了個程式,分析大學籃球聯賽中球員在每場比賽中得分、助攻、搶斷、籃板球、蓋帽等資料,該校教練據此挑選球員,使他所在的大學——凱斯理工學院贏得了當時的全美大學生籃球聯賽冠軍。


這位音樂天才在他36歲的時候因為《計算機程式設計藝術》一書獲得了有“計算機界諾貝爾獎”之稱的圖靈獎。也成為了圖靈獎史上最年輕的獲得者。


圖靈獎是美國計算機協會於1966年設立的,又叫"A.M.圖靈獎",專門獎勵那些對計算機事業作出重要貢獻的個人。圖靈獎對獲獎者的要求極高,評獎程式極嚴,一般每年只獎勵一名電腦科學家,只有極少數年度有兩名在同一方向上做出貢獻的科學家同時獲獎。因此,儘管“圖靈”的獎金數額不算高,但它卻是計算機界最負盛名的獎項,有“計算機界諾貝爾獎”之稱。


為什麼高德納會獲得如此榮譽呢?


這得益於他一生的追求極致。


不會演算法的音樂家,不是一個好程式設計師



追求極致的高德納


1938年高德納出生於美國密爾沃基。他的超凡智力在8歲時就顯示出來了。


一家糖果商為了推銷棒棒糖舉辦了一個拼字活動,要求用“Ziegler’sGiant Bar”裡面的字母,寫出儘可能多的單詞。比賽的第一名將獲得一臺電視機。為了得到第一名,8歲的高德納在家裡憋著拼了一個星期的單詞。最終,小高德納獲得了電視機,因為他拼出了超過4500個單詞,而當時裁判手上的單詞列表不過才2500個。他的賽後感言是,我還能寫出更多。之後他無論做什麼事,很少是第二名。


不會演算法的音樂家,不是一個好程式設計師


矽谷地區聚集了很多圖靈獎獲得者,他們有一段時間每年要進行程式設計比賽。參加比賽的除了高德納,還有視窗真正的發明人凱(賈伯斯是受到他的啟發,發明蘋果的視窗作業系統)、和明斯基一同提出人工智慧理論的紐維爾等人,高德納總是用一臺最慢的計算機獲得第一名。


從他發明的Tex編輯排版軟體也可以看出他身體裡追求極致的基因。


Tex是出版界的革命,直到今天都是全球學術排版規範的不二之選。而Tex誕生就來自於高德納。


高德納寫書的時候發現沒有好的編輯排版軟體,於是就決定自己寫一個,為了保證Tex的準確性,高德納主動懸賞找到bug的人,並且懸賞金額相當誘人,2.56、5.12、10.24、20.48、40.96……數額呈指數增加。


然而,這些呈指數增加變化的數字在10.24的時候就終止了,Tex中被人找到的Bug只有三處。


不會演算法的音樂家,不是一個好程式設計師


高德納費時10年專研排版美學打造TEX系統,原因其實很簡單:數理圖文排版以前一直使用金屬活字,70年代以降始有鐳射照排,然而當時的計算機雖能替代人工排出普通的報紙雜誌,但對處理複雜的數理公式卻力不從心。


高德納試圖為計算機寫一個小玩藝兒解決上述問題,Tex的前半部分由此產生。編寫過程中,他想參考J·伯克霍夫的Aesthetic Measures(《美學標準》)一書,在哈佛的圖書館幾經查閱也未能如願,之後好不容易在麻省理工學院找到。參考的結果是在Tex里加入一個變數badness,用以衡量一行文字的美感,變數越小文字就越美。


高德納創造的Tex被稱為是全世界bug最少的軟體。


不會演算法的音樂家,不是一個好程式設計師


除此之外,前面提到的他的著作《計算機程式設計藝術》是他一生追求極致的最好體現。


《計算機程式設計藝術》與愛因斯坦的《相對論》、狄拉克的《量子力學》、費曼的《量子電動力學》等並列,被《科學美國人》雜誌評選為20世紀最重要的12本物理學著作之一。


高德納念博士期間就開始了《計算機程式設計的藝術》的系列寫作,計劃出七卷。第一卷《基本演算法》於1968年出版,比爾·蓋茨就曾花了很大精力認真學習了這一卷,並一輩子推薦這套書。蓋茨講,如果你想成為一個優秀的程式設計師,那就去讀這個《基本演算法》吧。高德納本人的說法更狠,要是這一卷都看不懂,就別當程式設計師了。


不會演算法的音樂家,不是一個好程式設計師


第二卷《半數字化演算法》於1969念出版,第三卷《排序與搜尋》與1973念出版,第四卷A《組合演算法》於2011年出版。高德納暫停了寫作的原因是計算機排版軟體效果太差,破壞了這套書的美。於是就有了前面提到了編輯排版軟體TEX。


有人說,高德納寫完三卷就去研究TEX,其實是害怕寫第四卷。然而高德納卻對此不以為意,他說:“一個人要把事情做的完美,只有跟上帝的意圖保持和諧,現在上帝要我去寫第四捲了。”


當高德納完成第四卷的時候已經是73歲的老人了,而第一版出版之時他還正當壯年(30歲),高德納為這部作品《計算機程式設計的藝術》耗費了畢生心血。


不會演算法的音樂家,不是一個好程式設計師


電腦科學家吳軍把工程師分為了五個等級:


1.第五級是一個合格的工程師。你做到一些對於工程師最基本的要求的時候,你就合格了,也就是達到第五級了,如果連第五級都做不到,那就是不入流的工程師。


2.第四級是你可以帶領幾個徒弟共同完成一件事。這已經是一個“網路”的行為了,就需要有一點領導力了。


3.第三級,如果是在谷歌裡面,就相當於能負責一個產品線,比如說你負責地圖,地圖裡面有一些跟地面資料和衛星的圖象能夠重合,衛星的產品是你負責的,或者說導航是你負責的。


4.第二級,你能夠做出世界上其他人做不出來的東西。


5.第一級很少見,我們就不說了。


第一級工程師是什麼樣的?吳軍沒有給出具體的描述。


如果一定要加一個描述,大概可以是——“像高德納那樣的。”



參考資料:

  • 維基百科
  • 《谷歌方法論》
  • sciencenet



更多資訊:


相關文章