我在大學的時候並不知道《電腦程式設計藝術》(簡稱TAOCP)有多牛,他的作者有多牛,人家計劃寫七卷,寫了三卷以後,圖靈獎的評委們就「迫不及待」地把圖靈獎版給他了。
我只是看到了比爾蓋茨的一句話:
「如果你完完整整讀完了《電腦程式設計藝術》,請立刻給我發一份簡歷。」
我立刻就跑到圖書館去,翻出了那本泛黃的,破舊的《電腦程式設計藝術》,準備看完後給蓋茨發簡歷。
這本書一開始就是數學準備,講歸納法,冪,對數,排序和階乘,幾乎全是數學公式,我一看到數學就頭大,特別是覺得這些東西高中應該掌握了,於是果斷跳過。
然後的章節就把我鎮住了,這是什麼算法書啊!一開頭居然自定義一個了虛擬的計算機,附帶了一套自定義的彙編語言,然後書中的算法都用自己的彙編語言來寫, 截個圖大家感受下:
用彙編寫算法,這不是自虐嗎? 為啥不用C語言? C語言也很貼近硬體啊!
哦,這本書出版的時候(1968年)C語言還沒誕生(1972年)呢!
Kunth 老爺子選擇自創彙編,除了迫不得已,還有可能是語言會隨著時代潮起潮落衰落,而彙編將會永恆。
我釋然了,放棄了, 決定不再給比爾蓋茨發信了。
我很清楚自己有幾斤幾兩,這本充滿著數學和彙編的書並不是為我等凡夫俗子縮寫,我還是老老實實地去看我的數據結構和算法的教科書把。
Knuth說過: 「要是看不懂 TAOCP,就別當程式設計師。」
顯然Knuth是錯的, 我還是成了一個程式設計師。
工作以後,我還買了一本,放到書架上來裝點門面,顯得自己非常高深的樣子。
有一次被同學看到了,調侃似地問我:「你真的把這本書看完了? 給比爾蓋茨發簡歷沒有?」
我無言以對,默默地把它從書架上抽出來,放到了箱子的最底部,然後換上了一本《算法導論》 。
後來這個「可惡」的同學又來了,驚訝問我:「你把《算法導論》看完了? 厲害啊!」
於是我默默地把《算法導論》 也抽了出來,換上了一本《算法》。沒錯,這就是我一直推薦的一本算法書,適合我等凡夫俗子閱讀。
如果你不是做算法分析的,我不建議你去碰《電腦程式設計藝術》這個聖經了。有啃這本書的時間,我覺得還不如自己去折騰個作業系統出來,要有意思得多。