計算機領域大人物:計算機算法的鼻祖 – 高德納

技術文章

我們昨天介紹了牛人馮.諾依曼。如果你要問在馮.諾依曼之後計算機科學領域的第一人是誰,我覺得是提出算法理論的高德納 ( Donald Knuth )。這也是圖靈獎獲得者阿蘭.凱 ( Alan Kay ) 等人的共同看法。大家這麼看的原因很簡單,因為從影響力的長度、寬度和深度看,高德納都不遜於任何計算機科學家。

 

和很多理工科天才一樣,高德納過去是音樂天才,並且一度從事音樂創作,此外他後來還用信息論分析音樂的複雜度。和他有類似經歷的還有這樣一些人:

 

  1. 圖靈獎獲得者明斯基,他是 MIT 的計算機教授,1956 年提出人工智能概念的 10 個科學家之一。據 MlT 的人講,在他生前,鋼琴比他彈得好的人,全世界不超過十個。明斯基還寫了本書,介紹科學和藝術的關係。

 

  1. 著名語音識別公司 Nuance 的共同創始人邁克爾.科恩,也是我在Google的同事,是Google 語音識別的第一任負責人,後來又從 Google 離職全職搞音樂去了。

 

  1. 解決了圖論的中國郵遞員問題,並提出高德曼定理的高德曼 ( Alan Goldman ),他是美國科學院院士,我的論文委員會的主席。高德曼年輕時被看成是鋼琴天才,後來一次車禍讓他無法再彈好鋼琴,只得關注數學了。

 

講回到我們今天的主角高德納,他在大學時是校籃球隊隊員,於是他就寫了個程序,分析大學籃球聯賽中球員在每場比賽中得分、助攻、抄截、籃板球、火鍋等數據,該校教練據此挑選球員,使他所在的大學 ー 凱斯理工學院贏得了當時的全美大學生籃球聯賽冠軍。這可能是最早的大數據在體育上的成功應用。這件事情引來了當時的 CBS 電視台前來報導,而高德納所在球隊和他所用的計算機 一 IBM650 的合影被 IBM 印到了產品宣傳冊上。

 

和很多全才科學家一樣,高德納一生有很多貢獻,以至於有人懷疑是同名同姓的人所做的。簡單地講,高德納以五件事聞名於世。

 

  1. 首先,他是計算機算法的鼻祖,提出了衡量計算機算法的標準,就是我們在前幾夭講到的量級的概念。

 

  1. 第二,他編寫了計算機科學領域的聖經《計算機程序設計藝術》一書。當時出版社是在他獲得博士學位前一年向他約稿的,四年後他還沒有交稿。出版社著急了,就去催稿,他說才寫完 3,000 頁,正題還沒有談完。後來出版社不得不分卷發行。其中第一卷是《基本算法》,後來比爾.蓋茨花了很大精力認真學習了這一卷,並一輩子推薦這套書。蓋茨講,如果你想成為一個優秀的程序員,那就去讀這個《基本算法》吧。高德納本人的說法更狠,要是這一卷都看不懂,就別當程序員了。

 

  1. 第三,他是迄今為止最年輕的圖靈獎獲得者。高德納 36 歲那一年 ( 1973年 ),完成了《計算機程序設計藝術》的第三卷,圖靈獎委員會根據他在算法上的貢獻直接給了他圖靈獎。最後這套書出了四卷 ( 原本打算寫七卷 ),每卷都是600、700頁的大開本。全套書共幾百美元,居然在出版後的幾年裡賣掉了上百萬套。

 

  1. 第四,高德納為了寫書,苦於沒有好的編輯排版軟件,干脆就自己寫了一個排版軟件, 這就是著名的 Tex ( 後來被人做成了更方便使用的LaTex )。Tex是一場出版界的革命,直到現在仍是全球學術排版的不二規範。Tex被 稱為是全世界 bug 最少的軟件。高德納出資懸賞找到 bug 的人,懸賞金額呈指數增加 ( 第一個找到 bug 的人 2.56 美元、然後是 5.12、 10.24、 20.48、 40.96 … )。他寫到第三張支票後,再也沒有人找到錯誤了。你可以想像, 如果這個軟件錯誤有十幾個,高德納就要破產。因此,他是一個集優秀計算機科學家和軟件工程師於一體的人。

 

  1. 第五,高德納是矽谷地區眾多圖靈獎獲得者中名氣最大,最會編程的人。矽谷地區聚集了很多圖靈獎獲得者,他們有一段時間每年要進行編程比賽。參加比賽的除了高德納,還有視窗真正的發明人凱 ( 喬布斯是受到他的啟發,發明蘋果的視窗操作系統的 )、和明斯基一同提出人工智能理論的紐維爾等人,高德納總是用一台最慢的計算機獲得第一名。

    為什麼會是這樣一個結果呢?高德納講, 在他學習編程時,因為計算機太慢,內存太小,來回來去編譯,修改錯誤太花時間,因此他總是力爭一次全對,沒有錯誤,而且讓算法在設計時就達到最佳。這讓我想起很多優秀的攝影師,拿著一個老式的徠卡旁軸相機,依然能拍出最棒的照片,而很多拿著最新單反相機的人,只能簡單記錄影像。

 

 

相比高德納,今天所有所謂的計算機大咖只能算小學生,這也讓我們相信是有天才存在的。

 

高德納成功的原因和過程可以概括為這樣四點:

 

  1. 利用了藝術和科學的相通性。事實上很多黑客級的計算機專家都是藝術天才。今天很多學習計算機的人,以及學習其它工程專業的人心太急,目光太短淺,只盯著那點小小的技能,豈不知缺乏靈性連個好工匠都當不了。我有一次在一所頂級的理工科大學做講座,在場 300 多學生,只有一個人讀過雪萊最著名的詩。在另一所著名的理工科學校,學生們在聽講座時居然在做高等數學的作業。這樣培養出來的人將來做產品也好,做研究也好,沒有一點靈性。很多人一直追問我如何突破天花板, 其實一個人如果從大學開始的時候格局就很低,一輩子就只能低水平地重複工作。

 

  1. 不過高德納的本科並非畢業於名校, 因此起跑線一說不必太在意。但是,他每做一件事,就想方設法地做到最好。他在小時候,有一家棒棒糖公司為了推銷棒棒糖,搞了一個拼字比賽,大獎是一台電視機,在那個年代獎勵一台電視機和現在獎勵一輛車差不多。高德納為了得第一名,一個人憋在家裡幹了一周,拼出 4, 500 個符合條件的單詞,而當時競賽的組織方掌握的答案中只有 2,500 個單詞, 於是高德納遙遙領先地得了第一名,如願以償地得到了那台電視機。之後他無論做什麼事, 很少是第二名。

 

  1. 既要能頭頂青天,也要能腳踏實地。高德納作為計算機科學家,他的抽象思維能力是一般人不可比擬的。但是,他自己能動手寫程序,而且寫得非常好,這讓他每當腦子裡有些智慧的火花時,就能動手實現。MlT的校訓是〝腦與手〞,就是要培養高德納這樣的人。在Google Research ( 有人把它翻譯成谷歌研究院 ),要求裡面所有的科學家都能自己寫程序。相反,在微軟研究院,裡面的研究員都給配上了程序員。按照《紐約時報》的說法,這是微軟競爭不過GoogIe 的重要原因。

 

  1. 遇到問題解決問題的積極態度。很多人遇到問題會處於等待狀態,或者抱怨條件不成熟,就放棄了。高德納面對問題永遠採用積極的態度。他在寫書時遇到沒有排版軟件的問題,他就自己發明一個。在編輯軟體中,經常會用到字符串查找算法,過去的查找算法的複雜度使效率不是很高,高德納就為此發明了 KMP 算法 ( KMP是三個人名字的首字母, Knuth, Morris, Pratt,後面兩個是他的學生),這個算法也成為了今天經典的算法。

 

如果我們回想一下馮.諾依曼發明計算機系統結構的過程,似乎是偶然為之的結果。高德納發明KMP算法也是如此。

 

為什麼這些大師們偶然為之的工作比二流人才窮其一生的發現還有影響力呢?因為除了能力的差異外,他們還有著遇到問題解決問題的積極態度。任何人在前進的過程中都會遇到問題,但是對待問題的態度決定了命運。

 

最後說一句,高德納三個字是他正式的中文名字,和他的英文名字讀音差別很大,很多科技翻譯簡單地對他的名字進行音譯是不對的。1977年,高德納作為最早受到中國邀請講學的專家來中國訪問,臨行前他想起一個中文名字,圖靈獎獲得者姚期智的夫人便給他起了這個名字。另外,他的夫人也順帶起了一個中國名字,叫高精蘭 ( Jill )。

 

希望高德納做事的方法對你有所啟發。

 

最後,能否就頭頂青天、腳踏實地談談你的體會?

 

 

來源:《吳軍-計算機領域大人物:計算機算法的鼻祖 – 高德納》

Gimmy
作者: Gimmy
積極的人在每一次憂患中都看到一個機會 而消極的人則在每個機會都看到某種憂患

發表迴響