最偉大的程式設計師高德納:談電腦程式設計藝術

2021-01-13 遇見數學

作者:Justin Richards , 譯者:Elliot,何逸勤轉自圖靈教育, 已獲授權. [遇見數學] 特此感謝!

最偉大的電腦程式員之一

高德納(又譯唐納德克努斯)生於1938 年,是著名的計算機科學家,也是現代算法的先驅之一。在計算機科學及數學領域發表了多部具廣泛影響的論文和著作。1974年圖靈獎得主。他的系列巨著《電腦程式設計藝術》在計算機科學界享譽多年。多年前,高德納對現有的數學文本處理工具感到不滿,於是創建了自己的工具 TeX 和 Metafont。如今,這兩個工具成為廣泛應用的免費軟體。

高德納(D. E. Knuth)教授是備受尊崇的系列巨著《電腦程式設計藝術》(The Art of Computer Programming)和數十篇受到高度讚譽的計算機科學論文的作者。2011年6月,結束了在英國的書籍研討和系列演講的高德納教授,跟BCS編輯Justin Richards暢談了自己的人生和工作。

您最廣為人知的成就應該是《電腦程式設計藝術》系列著作了。1999年,這個系列被美國科學家(American Scientist)期刊評選為20世紀最重要的12部理學專著之一。這個系列最初是如何創作出來的?您是如何看待美國科學家期刊的這一評價呢?

這系列書籍大約從1960年代開始創作。那時候,因為沒有合適的資源,所以大家都在重新發明一些已有的東西。我一直都很喜歡寫作,在學校參與報紙和雜誌的工作,認為自己是一個作家。我意識到,需要有人記錄下所有已經發表而我們正在遺忘的優秀思想。

這又要回溯到最初的年代,當時真正研究計算技術的人很可能還不到一千個。我沒有把這看作將要影響世界的事情,但仍然覺得這些很酷的資料是值得認真整理的。

那時候,我就考慮還有什麼人合適寫作這樣的書籍。我能想到的每個人,他們都很可能只會關注自己所研究的那個領域。在我所知道的人當中,只有我自己是沒有發明創造過什麼東西的,因此我設想自己能夠以中立的立場來擔任他們的代言人。坦白說,那就是初始動機,我認為存在那樣的需求。

我寫作這樣的書,還有一個很自然的理由。那就是,我要嘗試將很多人的不同想法結合起來。我會看到,A君以某種方式來分析他的方法A,而B君會以另一種方式來分析與之競爭的方法B。因此,我就要用B君的方式來分析方法A,用A君的方式來分析方法B。

因此,我最終就是以單純分析以上內容的形式來創作書的雛形。很快,我認識到,有些被我捆綁使用的科學方法,在我所受的教育中其實是不允許同時出現的。然而,一次又一次地,我真的看到只有這樣的思維方式才可以正確地闡述問題。

長話短說,很快我也有了自己的不同意見,並且開始發現新東西,這樣就難以繼續中立地寫作了。不過,我仍然嘗試在最大限度內以公允、合理的態度去總結每個人的有價值思想。

至於這本書入選世紀最佳書籍,我還覺得不太好意思。他們把我推到愛因斯坦和費曼的偉大隊列中,而我實際上並不屬於那樣的級別。這可能僅僅是因為他們必須從計算機科學領域選出一個人,而我又沒有太多的競爭者罷了。雖然我也覺得自己在研究領域的努力工作是值得提及的,但這樣把我挑選出來代表計算機科學,總有點關公戰秦瓊的意味了。

是什麼促使您投身計算機科學這個領域的呢?

我天生就是一個計算機科學家——我的頭腦裡有一種組織東西的思維方式,註定讓我成為一個好的程序設計員。我覺得任何人都可以學習使用計算機,但是五十個人裡面大概只有一個人會成為像我這樣的極客。這意味著我們這些人將在這個領域中的不斷創新,並與計算機產生共鳴。我們的思維方式會幫助我們更容易地學習如何製造機器。

您為什麼會認為計算機科學是如此重要呢?

計算機科學之所以重要,是因為它改變了溝通的方式。它還影響了金融業,這是我不太情願提及的。可惜的是,世人是以我和我的同行們對華爾街產生的影響來衡量我們的工作的。在這個意義上,我是很嫉妒天文學家的,因為世人認為天文學家由自己的興趣去研究天文學是值得尊重的。其實,我研究計算機科學也是同樣出於興趣啊。

我對IT這個說法並沒有太大的共鳴,真正打動我的是科學。對我而言,IT是不錯的東西,但並非我所擅長的領域。我的太太就能比我更快地掌握某個圖標的含義、找到要點擊什麼地方。但要讓機器完成複雜、細緻的工作,在科學上是有許多難題需要攻克的。我曾經覺得很多問題是無法找到答案的,但事實上我們已經一步步地知道要如何解決它們。對我來說,即便沒有任何金錢上的回報,我也會做這些工作。

所以說您對此充滿激情嗎?

那是,就像每天早上醒來我都會想著今天要好好寫個程序。

您是受到繆斯女神的眷顧了吧?

是啊,有些日子她給予我的靈感要比平常的多。甚至有某個階段,我幾乎認為有個繆斯女神一直在給我口授內容呢。

在您看來,您在計算機科學領域最大的成就是什麼?

我想我的第一個成果是研究編譯器的理論。我曾經研究過代數語言的理論,而在我寫這本書(第10章)的時候,我正試圖描述人們在這個領域的種種發現和成果,然後我突然意識到,可以有一種方法把這些發現和成果都關聯起來。由於這個發現過於新奇,我不知道該怎樣在書裡面闡釋它,於是就把它發表成一篇學術論文。後來,其他的人讀懂了我的意思並開始應用,最終讓這個發現成為了今天所有代數編譯器的分析原理。

不過我覺得我最大的成就是發明了比較算法優劣的數學方法。為了了解一個程序到底好不好,我創造了一種量化的比較方法,例如你可以說一個程序優於另外一個程序2.3倍。這個數學方法叫做算法分析,是我最引以為豪的學術成就,也是成功應用計算機的關鍵。

當我發明這套數學方法的時候,我跟我的出版商說,不如把這本書改名作「算法分析」吧。但是他們說不行,這樣的話這書就永遠賣不出去了!但實際上那就是此書的核心內容,它除了綜合總結計算機學者發明的算法,還幫助我們從量化的角度去評價每個算法的優劣。

在您的網站上有關於「你為何不用Email」的回覆。「對於那些生活在事務的頂端的人們而言,Email是個美妙的東西。但那不是給我用的,我的角色是在事件的底層。」您是否可以再解釋一下自己對Email的立場,以及「在事件的底層」的含義?

某些人是不能整天聒噪不休的,他們要考慮的事情,需要長時間的專注、對材料進行組織並營造堅實的基礎,而不是僅僅對前沿問題的驚鴻一瞥。將某些內容以精確的形式表達出來,是需要很長時間的。要正確地做好事情,我就必須專注地耗費大量的時間。當我被大家當作權威的時候,世上數不清的人們要來問這問那。因此,用了15年Email之後,我覺得真的足夠了。

之前的一位圖靈演講者Grady Booch非常主張編程的簡潔性,而您在贏取西班牙「知識邊界獎」的導言中也有相同的論調。您可否解釋一下您為何希望程序保持簡單、緊湊、易懂?

我想我們要先溫習愛因斯坦的名言「要讓它儘可能的簡潔,而又不至於過分簡潔」。事實上並非樣樣事情都存在捷徑,都是簡單易懂的。然而我發現,如果我們有再三思考的機會,幾乎沒有一件事情是不能被簡化的。正因為如此,人們時不時會說:「好吧,基於我們現有的知識,讓我們把舊的東西推到重來吧!」

幾年前在斯坦福有一個名為「清白歷史」的項目,口號是「讓我們找個更好的方法來實現網際網路」。當東西被不斷添加進來並且累積一段時間後,你就會發現已經存在太多的垃圾,而這些垃圾現在看來沒有任何理由存在了。

那就像人的闌尾,也許曾經某個時候它是有存在的意義的,但是現在已經不再需要了。我覺得這個項目有潛力,儘管實現的可能性微乎其微,因為整個世界已經離不開現存的網際網路了。要一個人跳出來說「讓我們重新設計整個網際網路,從把程序導入計算機開始」,那是非常困難的。這有點像當時Linux的出現,其目的就是嘗試去簡化作業系統。

您跟Grady Booch還擁有另外一個共同點,就是你們都講過你們可以欣賞到代碼和編程中所體現的美,您這樣講的真正含義什麼呢?

我是從幾層不同的含義來看待「藝術」這個詞的。通常,藝術意味著人類創造的某種東西,並非自然的。還有一層含義,那就是賦予美學價值的精緻藝術品。

很多情況下,所謂美感不過是「情人眼裡出西施」。但是,人們會因某個事物本身的優雅和諧調而去創造它,那與評論和欣賞其他人的作品是類似的,我們會覺得自己感受到美。當這個作品達到某種標準的時候,我們會因之而滿足。

對於所謂的「某種標準」,可能Grady跟我的意見是不一樣的,那就如沒有任何兩個人能對哪種音樂是最好的問題達成完全一致的意見。但是,音樂家無疑是清楚自己喜歡和不喜歡什麼音樂的,也很清楚自己什麼時候創造出好音樂。這就很類似我看待程序的方式了。

我想最終都是個人喜好的問題?

的確如此。沒有一個算法你會在輸入以後問自己:這到底夠不夠漂亮呢?儘管的確有人嘗試去這樣做——美國最偉大的數學家之一George [David] Birkhoff曾經在三十年代寫過一本書,名為《美的衡量》。這本書充斥了形形色色的數學公式,還有一頁滿滿的印著各式各樣的希臘骨灰甕,並在每一個旁邊都給了一個美的評分。

他還給很多不同的設計系統評分。其中比較有趣的是,在他的一百強名單裡面,排行第二還是第三的是萬十字章——他本身是同情納粹的。我想這個圖標的旋轉方向要是反過來,對印度教來說可能有更大的宗教意義。我不認為可以衡量這些東西的美醜,但是他的確這樣做了,而且也有其他人作了同樣的嘗試。

那麼說,還沒有人編出能評判程序的美醜程度的程序囉?

實際上還沒有。有些軟體工程師因評測的需要而嘗試做這樣的事情,我也不是很清楚。大家都知道,像你這樣的記者或作家都有很多題材,你們需要量化數字來充實文字內容。例如,有人在開羅的衝突中喪生,你們就需要弄清楚是300人還是315人,這是新聞報導的必備部分。量化資料可以提升質量。我也在嘗試尋找數位化的方法。不過,實際上軟體工程師試圖衡量的是某個程式設計師的優秀程度。其實他們去問老闆就行了!

我覺得數字的使用是讓人們在心裏面能做個比較,例如20個人在這個事件中喪生,50個人在另外一個事件中喪生,那麼人們通過對比就會覺得後面這個事件更為嚴重。

但這很可能其實是在用蘋果和橙子比較。因為一旦涉及到數字,人們就可能篡改某些數據來扭曲事實。你也可以想像教育學生,總想著學生怎麼樣才能通過考試,然後你就可能會編寫一本關於應試的書,而不是一本關於學習科學的書。

這樣一來一切都是為了在學科考試中獲取高分。然而問題是這些數字評分並不是總能很好的反映事物的本質。當你把一些事情量化了,假如你想的話你總是可以找到作弊的方法,因而也最終忘記了學習的初衷。

您曾經說過,您的工作從根本上是「關於如何辨別能夠(在計算機科學領域)產生持續影響而非很快改變的東西」。這裡的具體含義是什麼呢?

我每天大約都會收到一份期刊,沒有ITNOW啦(笑),但會有The Computer Journal。我的郵筒每周大約收到8份這樣的期刊,那裡面就是數量龐大的資料,其中就有些好內容。那麼,我怎樣決定哪些要寫進去《電腦程式設計藝術》的呢?

我會盡力避開那些很快就會過時的內容,專注在將會有大範圍應用的內容上。我要找出那些不是很難上手、能夠成為多數人的常用工具的那些實際內容。什麼是下一代的每個程式設計師都需要牢記的?我不會假裝自己在每一件事情上都是正確的,但會努力辨別出那些能夠吸引我的注意力的、令人無法忽視的、我們的下一代必須記住的知識。

那麼我想您的作品中所選用的材料都是構建計算機科學的基石,而不是那些具時效性的枝節?

不錯,但也有一些枝節的東西是可以在兩三個段落中描述清楚並且容易理解的。那些需要花十頁紙來才說得清的問題是很難被我選入書裡的。我更傾向於選取那些通常只需要三頁就可以闡釋清楚、本質上有很高的實用性、並能很好地和書裡面的其他內容熔煉在一起的算法。

就以我們從小學習的加法為例,假如你認真去想一想,你就會發現其應用之廣泛是如此的不可思議。我們會在各種各樣的場合中使用加法,而且日復一日從不間斷。然而我們掌握的是加法的本質概念。我的書裡面有許許多多類似的小概念,而對於這種我所需要的題材,我相信還有很多有待人們去研究發現。

即使是加法和算術,現在還有所謂的「無進位加法」或者叫「尼姆數加法」——那是大概一百年前在英國被發明的。一開始那只是計算機所擅長的一個遊戲,而且它能和普通的加法結合使用;後來我們發現這種加法其實非常實用,因此我的新書中會解釋為什麼我們也許應該讓小孩子們從五年級就開始學習它。當然這並不是說我們真正需要學習的都已經在幼兒園就學會了。事實遠非如此簡單,學習需要經過漫長的累積,才能像滴水穿石那樣,在某天達到飛躍。

1999年,MIT邀請您就「信仰與科學的關係」這一普遍性主題做了六場公開演講。十多年過去了,您對科學與精神性的關係的看法是否有什麼改變呢?

我很高興看到人們認為生命中存在某些超出人類理解能力的東西。做那些演講的時候,我只是從壁櫥中跳出來說:「計算機科學很美妙,但那不是一切。請不要期待我能夠真正回答你的疑問。我要解釋的是:我為什麼會覺得仍舊存在神秘的事物是件好事。」

伴隨著科學上不斷推進的成就而來的是一種傾向,我們傾向認為自己可以認知所有的事物。然而,我感覺到,當我們愈加深入地思考,就越會認為自己不過剛剛開始。我們正以令人難以置信的速度在改變著許多事物,但我仍認為未來100年還將有更多需要探索的東西。

因此,人類還有很大的學習空間,而我們所已經學到的浩瀚知識,仍值得我們自豪。

收到MIT的邀請時,我想:如果我的一生中是需要至少一次機會去深究這個問題的,那恰恰就是此時此地了。我不會假裝成這方面的專家,僅僅是覺得大家並沒有真正花時間去思考這個問題。能在這麼多人身上產生反響,我深感慶幸。

那個系列講座有很好的上座率嗎?

的確很好,幾乎連站的位置都沒有了!而且那還是一個相當大的講堂。那個系列一共是六個講座,第一個之後就放在了Dr. Dobbs的遠程網絡上面發布,而在接下來的五六年間被下載的次數也是令人吃驚之多。

所以說這個系列講座必定是滿足了某種需求。我其實並沒有提供答案,而只是提出了一些問題。我認為那些都是我們生活中不可或缺的部分,為何不在公眾場合中共同探討呢?事實上我為前來參與的人數感到相當驚喜。

幾年前我在Google給了一個關於相同主題的演講,那是又一次座無虛席。而那次演講更接近於我在圖靈系列講座中的「提問-回答」。與其什麼都事先規劃好,我更喜歡這種即席回應人們提問的形式。

我正想請教您怎樣應對類似的挑戰呢。對很多人來說,不知道自己即將需要回答哪些問題,是非常可怕的……

哈哈,沒那麼艱巨啊。即便我說錯了什麼,那也沒啥大不了。壓力也不是那麼大啦,尤其是要跟首相回答記者問題相比較的話。我覺得歐巴馬總統會覺得這種事情有壓力,但小布希總統大概不會這樣想。

我想小布希也會有他所擅長的……

我想大概是吧,不過我真不願意捲入政治討論,我還沒有研究出一套關於政治的算法呢!

1975年,您出版過一本《婚姻的穩定性》(Marriages Stables)的手冊,那是對算法分析的入門介紹?

那只是個小噱頭,但那本書其實又是我在蒙特婁做的一系列六個演講的內容。那系列演講的主題就不是「信仰和科學」了,而是集中在算法分析。我是以「穩定的婚姻」這一數學問題來展開討論的。這個問題也可以看作男孩和女孩之間的遊戲:他們各自去展現本身的狀態,每個男孩都會對女孩做排名,反之亦然。我們會問自己:「我們要怎樣運用一系列準則來將他們配對,使他們之間的關係是有穩定性的?」當有些人更多地欣賞對方而非自己的現有配偶時,關係就是不穩定的。我們總能找到方法以穩定的方式來配對這些男孩和女孩。

我們可以從數學上證明這是可行的。不過,這樣的方法不止一種,因此我就可以引入算法分析來解釋為什麼某個方法比其他的更好。回到前面的觀點,我最希望聽眾記住的是如何去領會這些算法的工作方式。因此,通過具體數學解決問題的方法,我們可以解決類似男孩女孩配對這樣的趣味性問題。

如此說來,這個類比是幫助人們在腦海裡對您的理論形象化?

是的。因此我可以得出一個普通的男孩將要進行一定次數的求愛,而不需要多久我們就能統計出每個結果的概率。你可以通過設計許多問題來讓女孩們或男孩們得到最好的選擇。在試圖解決這個問題的過程中我們就能體會數學的各種美好。

我在那裡通過六個講座來討論了這樣一個問題,並與聽眾們進行了互動。儘管我當時使用的是英語而且我不通法語,但他們仍決定把整個講座都翻譯成法語,並最終以法語出版了那次講座的書。而這本書二十年之後才又以英語再版。因而我也有了用我並不懂的語言出書的經歷了。

看來您確實很喜歡挑戰,六場演講的系列講座,一次還不過癮,非要兩次……

那是啊,每20年,我都會面臨一次這樣的挑戰!那種感覺跟在家裡埋頭創作《電腦程式設計藝術》是很不一樣的。我一直為這系列書籍搜集資料,已經幾乎有50年啦。

今年您被邀請來做圖靈系列講座,請問對此您有什麼特別感想嗎?

我現在正在人生的一個轉折點,慶祝我的兩個經時數年的大項目進入收尾階段。因此也是給這個系列講座的最佳時間。事實上兩年前我就曾經告訴他們,從那時算起兩年之後會是一個合適的時間——到那時候我會放鬆下來,然後重新調整一下去迎接新的挑戰。

我完成了我引以為豪的《電腦程式設計藝術》卷4A的寫作,並在不到兩周前剛剛收到第一本樣書。此外我也完成了我累積的論文專著的第八卷。我把多年來我所寫的所有的學術論文都出版成書。例如有一卷是關於印刷術的,因為我曾經研究過能使書籍變得更美觀的軟體。有一卷則收集了我所有關於算法分析的論文。還有一卷收集的是我針對非專業計算機讀者寫的較為通俗的論文。

最後這第八卷是關於趣味遊戲的,我把它們當作甜品一樣留到最後。因為這些論文純粹是因為我喜歡而寫的,寫作過程也是最快樂的。我就是非常熱愛這本關於趣味遊戲的書,雖然我也不是很確定原因是什麼。

我在同一天完成了這本書和《電腦程式設計藝術》卷4A的寫作,並把它們分別寄給了各自的出版商。而也在同一個星期內收到了這兩本書的樣書,這確實讓我心花怒放。我非常慶幸在完成它們的過程中我沒有生病,也沒有發生世界大戰。我也很高興它們終於圓滿完成了,我再也不用為它們操心了。

我們BCS一直致力於提高IT行業的專業性。請問您在這方面的意見,是IT行業僅僅需要自我監管,還是需要進一步的引導呢?

我是編寫程序的人,並沒有合適的資格來評論這一點。英國的同業協會和共濟會有著悠久的傳統,在我所知道的範圍內,它們能將行業引導到優良的質量標準。不過,對某些行業而言,它們做得有點過度了。行會的人能夠判定成員是否值得僱用、是否能提供有價值的服務,這不太好。實際上,當今的通信手段已經大幅改善,很難再用所謂的「浮報僱傭」的做法來掩蓋不夠好的做法。

您覺得IT行業是否背負了充斥著極客和書呆子的壞名聲?

這還真是挺有趣的,因為其實有個英國作家曾經有一個大致名為「每周極客」的博客,而我還因為曾被他評上一次而感到光榮。我想不起那個作家的名字了,這件事大概是發生在兩年前的。現在還有人談論「極客風格」——極客這個詞變得更為普羅大眾所接受,人們也不再羞於承認自己是個極客了。書呆子就有點不同。

我的感覺是現在人們會自詡為極客,大家也理解這個名稱在當今時代已經有著不同的內涵,這跟幾年前相比肯定是不同的。

即使是文字工作者,有時候也很難解釋為什麼有些詞語會受到追捧,而有些則會日漸被遺棄,但很明顯極客這個名稱正處在它的上升期。我也不一定是正確的,但是在我那本關於趣味遊戲的書裡面有一章名為「極客藝術品」,我覺得這個題目很恰當,因為它所涵蓋的恰恰就是那些我希望在自己家裡收藏的藝術品。

對您而言,在過去的五六年間,計算機科學的競技場中哪些是最重要的成就呢?

我認為那是千千萬萬的人們可以協同工作這一事實。如果在每年年底要問哪一項才是當年最大突破的成果,那可能真的想不到什麼。不過,五年之後,整個領域卻已天翻地覆。究其原因,正在於每一個分支都在不斷進步。

偶爾,會出現一些其後被視作重大進步的成果,例如Web的誕生,但它們實際發生的時候,卻是沒有人能準確認識到其重要性的。這種情況跟中國當年建造長城很類似,每個工匠都去添磚加瓦,多如恆河沙數的人們最終成就了這一非凡的團隊作品。大家都在自我挑戰並相互學習,這是我理解的所謂成就。

您覺得計算機科學在現在或者不久的將來將面對的最大的問題或是挑戰會是什麼呢?

最大的挑戰就是面對將來那麼多有待攻克的未知,我們每天晚上如何安枕!作為一個美國人我非常崇拜(也有些許嫉妒)我所了解到的(我的孫子在這裡出生)英國的醫療保障系統。但是我覺得仍有許多可以地方可以通過計算機的協助來改善,例如更好地保存醫療檔案,更好地描述和視像化綜合的症狀,更好地組合運用統計和視像化的方法,等等,這些都會大大的幫助醫生們迅速而清晰地理解情況。

更不用說計算機能幫助生物學家設計更好的藥物。你所見到的每一個可以改善的地方都需要一個好的程式設計師的協助。我們從來都不會缺乏挑戰性的問題,而且未來也不見得會。

我在前面說過大概50個人裡面會有一個像我這樣的極客,但是我擔心在未來的數年極客會越發的供不應求。我也可能是錯的——也可能下一代會有十分之一的極客,但是我對此表示懷疑。為了讓計算機去完成那些任務,我們非常需要這些身負奇才的人來設計和運行程序。

您覺得,人工智慧上的那個老掉牙的說法是否能最終解決?

我認為我們距離這一怪圈還不是很近,但人類和機器最終仍會一起面臨這個問題。

必須指出,我的同事、史丹福大學校長John Hennessy曾經說過,五年之內將出現計算機的大崩潰,就像金融海嘯那樣。原因是人們已經變得如此依賴計算機,簡直是沒有它們就活不了了。人類鐵定有一天會忘記了如何做事,而原因正是對機器的過度依賴。我們不記得沒有這些機器的時候是怎樣做事的,這將導致大崩潰。

您曾經說過「今天所有關於計算機的一切都讓我驚喜,沒有一樣東西我是能在三十年前就預測到的」。如果你是一個科幻小說作者,你會對未來五十年做怎麼樣的預測呢?

我真高興你找到了我說的那句話。無論如何,事實就是如此!

悲觀地看,我覺得我們無法解決能源困境,除非有一天出現了能很好處理廢材的增殖反應堆。在十九世紀英國有人提出過一個Jevons悖論。我想他的名字應該是Stanley Jevons。

有人發現了如何讓鐵路系統省十倍的煤,結果是鐵路系統因此消耗了一百倍更多的煤。原因是這個改進讓更多的人使用鐵路來運輸貨物。換句話說當你提高了某樣事物的效率,必然導致它吸引來更多的用戶。

你不會說我們需要X那麼多石油來完成我們要做的事情,因為事實上我們如果有更多的石油我們就會去做更多的事情。事實上就是我們的胃口是永遠無法滿足的。因此我覺得我們的能源困境也會持續下去。

樂觀的情形就是因此每個人都將愛上了算法分析和設計美妙的程序——那不就是一個很好的將來嗎?!

《美國科學家》(American Scientist)雜誌曾將《電腦程式設計藝術》與愛因斯坦的《相對論》、狄拉克的《量子力學》等書並列為20世紀最重要的12本科學類專著。

比爾·蓋茨曾經花幾個月研讀《電腦程式設計藝術》,並這樣對廣大程式設計師說:如果你自以為是一個很好的程式設計師,請去讀讀高德納的《電腦程式設計藝術》吧……要是你真把它讀下來了,就毫無疑問可以給我遞簡歷了。

高德納作品中文版

作者:高德納 譯著者:李伯民 範明 蔣愛軍出版社:人民郵電出版社出版年:2015年12月《卷1:基本算法(第3版)》講解基本算法,其中包含了其他各卷都需用到的基本內容。本卷從基本概念開始,然後講述信息結構,並輔以大量的習題及答案。

作者:高德納 譯著者:巫斌 範明出版社:人民郵電出版社出版年:2016年7月《卷2:半數值算法(第3版)》全面講解了半數值算法,分「隨機數」和「算術」兩章。書中總結了主要算法範例及這些算法的基本理論,廣泛剖析了電腦程式設計與數值分析間的相互聯繫。

作者:高德納 譯著者:賈洪峰出版社:人民郵電出版社出版年:2017年3月《卷3:排序與查找(第2版)》擴展了卷1中信息結構的內容,主要講排序和查找。書中對排序和查找算法進行了詳細的介紹並對各種算法的效率做了大量的分析。

相關焦點

  • 最偉大的程式設計師高德納: 談電腦程式設計藝術
    高德納(D. E. Knuth)教授是備受尊崇的系列巨著《電腦程式設計藝術》(The Art of Computer Programming)和數十篇受到高度讚譽的計算機科學論文的作者。2011年6月,結束了在英國的書籍研討和系列演講的高德納教授,跟BCS編輯Justin Richards暢談了自己的人生和工作。
  • ...80 歲算法大師高德納要在 105 歲完結《電腦程式設計藝術》
    【CSDN 編者按】號稱計算機領域經典必讀的著作你都讀過哪些,例如《電腦程式設計藝術》系列?近日,這套書的作者高德納(Donald Knuth)在接受紐約時報採訪時,談到了自己對於這部已投入五十載心血作品的反思。
  • 1月10日:1938年圖靈獎最年輕獲得者高德納出生
    高德納最為人知的事跡是,他是《電腦程式設計藝術》(The Art of Computer Programming)的作者。此書是計算機科學界最受高度敬重的參考書籍之一。他創造了算法分析的領域,在數個理論計算機科學的分支做出初步貢獻,此外還是排版軟體TEX和字體設計系統Metafont的發明人。
  • 歷史上最偉大的 12 位程式設計師 - OSCHINA - 中文開源技術交流社區
    所謂程式設計師,是指那些能夠創造、編寫電腦程式的人。不論一個人是什麼樣的程式設計師,或多或少,他都在為我們這個社會貢獻著什麼東西。然而,有些程式設計師的貢獻卻超過了一個普通人一輩子能奉獻的力量。
  • 你這輩子可能都不需要看《電腦程式設計藝術》了!
    我在大學的時候並不知道《電腦程式設計藝術》(簡稱TAOCP)有多牛,他的作者有多牛,人家計劃寫七卷,寫了三卷以後,圖靈獎的評委們就「迫不及待」地把圖靈獎版給他了。 我只是看到了比爾蓋茨的一句話:「如果你完完整整讀完了《電腦程式設計藝術》,請立刻給我發一份簡歷。」
  • 國外程式設計師推薦:每個程式設計師都應讀的書
    然而《電腦程式的構造和解釋》與這些不同。 這是一本會啟發你的書,它會燃起你編寫出色程序的熱情; 它還將教會你認識並欣賞美; 它會讓你有種敬畏,讓你難以抑制地渴望學習更多的東西。其他書或許會讓你成為一位更出色的程式設計師,但此書將一定會讓你成為一名程式設計師。同時,你將會學到其他東西,函數式編程(第三章)、惰性計算、元編程、虛擬機、解釋器和編譯器。
  • 那些計算機界的偉大女性
    事實上,最早的程式設計師以及管理員反而是以女性為主的。今天是全世界女性同胞的節日,讓我們來一起敬仰一下那些計算機界偉大而美麗的女性吧。1842年至1843年間,她花了9個月翻譯義大利數學家Federico Luigi為查爾斯巴貝奇設計的機械式計算機所寫的程序設計書。在譯文裡,她附加了許多註記,詳細說明用計算機進行伯努利數的運算方式,而被認為是世界上第一個電腦程式。她預言道:這個機器未來可以用來排版、編曲或是各種更複雜的用途。1852年,Ada因治療子宮頸癌失血過多而去世,時年36歲。
  • 影響計算機算法世界的十位大師 - OSCHINA - 中文開源技術交流社區
    1、偉大的智者——Don E.Knuth,中文名:高德納(1938-)算法和程序設計技術的先驅者。Oh,God!一些國外網站這樣評價他。一般說來,不知道此人的程式設計師是不可原諒的。其經典著作《電腦程式設計藝術》更是被譽為算法中「真正」的聖經,像KMP和LR(K)這樣令人不可思議的算法,在此書比比皆是。難怪連 Bill Gates都說:「如果能做對書裡所有的習題,就直接來微軟上班吧!」
  • 據說不知道這些大神的程式設計師不是真正的程式設計師
    克努特)   他最為人知的工作就是經典巨著《電腦程式設計的藝術》, 這本書第一卷《基本算法》 於1968年推出,可真正能讀完並且真正讀懂的人並不多,比爾.蓋茨在1995年接受一次採訪時說,「如果你認為你是一名真正優秀的程式設計師,就去讀第一卷,...... 如果你能讀懂整套書的話,請給我發一份你的簡歷。」
  • 計算機發展史AND電腦程式運行機制
    1.計算機的分類根據用途,計算機主要分為三種類型:個人計算機,也稱為 PC,這是人們最熟知的一種計算機,價格低廉,性價比高,個人計算機強調的是用戶體驗,雖然出現時間很短,但是卻大大推動了計算機歷史的進程。
  • 改變程序設計、圖靈獎得主、美國第一位計算機科學女博士,程序媛進擊史
    圖靈獎得主,她一生致力於程序設計的研究,研究成果給計算機編程領域帶來了巨大的變革,極大地推動了計算機行業的發展。但是goto語句沒有邏輯章法,難以閱讀,程序錯誤的話可能會有嚴重的後果。曾經有一臺被程序控制的放射治療機,因為使用了過時的程序設計方法,導致6名患者受到了嚴重超劑量的輻射而不幸身亡。在這種困境下,計算機行業亟需一個更加規範的程序設計基本架構。
  • 最受歡迎的25本計算機編程書籍
    電腦程式的構造和解釋《電腦程式的構造和解釋(原書第2版)》1984年出版,成型於美國麻省理工學院(MIT)多年使用的一本教材,1996年修訂為第2版。在過去的二十多年裡,《電腦程式的構造和解釋(原書第2版)》對於計算機科學的教育計劃產生了深刻的影響。第2版中大部分重要程序設計系統都重新修改並做過測試,包括各種解釋器和編譯器。
  • 寧波電腦程式設計備考:PASCAL中所有單元常用過程及函數列表
    Pascal是一種計算機通用的高級程序設計語言。Pascal語言語法嚴謹,層次分明,程序易寫,具有很強的可讀性,是第一個結構化的程式語言。下面是寧波奧數網小編整理的Pascal常用過程和函數列表,希望這些資料對大家有所幫助。
  • 程式設計師是做什麼的?未來計算機變得智能,就不需要程式設計師了嗎?
    但是,程式設計師沒法選擇與更理性的物種工作,他們不得不與人類共事並且把人類的想法翻譯成計算機語言。 (不過,我有點關心如果這成為現實後,計算機還需要人類程式設計師嗎?) 現代計算機具有完全邏輯性、直接性和順從性。如果你知道它應該做什麼並且知道如何命令它,那麼和計算機一起工作是快樂的。唯一的問題是,計算機只會做你告訴它去做的。因此,你應該有清晰的思路並且在見你的上司或客戶時保證計算機不出岔子。
  • 程序猿必看:程序設計語言發展史
    今天,我們就來談一談程序設計語言的發展史。,勿需經過翻譯,每一操作碼在計算機內部都有相應的電路來完成它,或指不經翻譯即可為機器直接理解和接受的程序語言或指令代碼。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
  • 第一位程式設計師是一位女性,給差分機著書,寫出了第一個電腦程式
    此時的巴貝奇位居劍橋大學的盧卡斯數學席位(Lucasian Chair of Mathematics),這個榮譽席位向來都是給予當世最負盛名的數理學者,例如牛頓和霍金也都曾擔任盧卡斯教授。因此這個於巴貝奇家中定期舉辦的沙龍,總是聚集許多名流、學者,或有才藝演出,或有新奇事物與發明的展示;巴貝奇也大方展出因經費中止而暫停開發的差分機。
  • 為什麼會有這麼多種程序設計語言?
    可是看看如今的程序設計語言的數量,你會懷疑人類是否又在造「通天塔」了?真的有這麼多語言的必要嗎?我到底要學習多少種程序設計語言才夠用呢?為了解釋「為什麼會有這麼多種程序設計語言」這個問題,想讓我們來看一份較新的最流行程式語言流行榜:排行榜上排名前十的依次是:C、Java、Object-C、C++、C#、PHP、Python、JavaScript、Perl和VB。下面我會根據這份排行榜來回答我們的問題。
  • 程式設計師猜不到,計算機剛出現的時候,是用女人頭做計算能力單位的
    但是,埃尼阿克這個計算機有個小問題:埃尼阿克的創造者(因為懶)沒有寫任何操作手冊,所以具體操作全要這些女程式設計師自己搞定。但是在通用計算機剛剛出現的時代,誰也沒經歷過這種事兒,所以誰也不知道,誰也不敢問。要是在現在,你把計算機的電路板給程式設計師看,啥操作說明也沒有,然後讓他們根據電路板編程,他們肯定想打人。