碼農羣英傳連載(一) —— Go 語言之父 Rob Pike

近幾年來在計算機語言排行榜上成長最快的語言就是 Go 語言。它勇往直前勢如破竹,從幾年前的 50 名之外快速躍進前十的寶座,而且還在馬不停蹄向上攀登。

大家都知道 Go 語言是 Google 推出來的,它是由 Google 包養了一羣骨灰級程序員組成了一個叫着「Go Team」的精英團隊共同打造。這個隊伍裏有鼎鼎大名的 Unix 操作系統發明人 Ken Thompson,大鬍子形象的他在人羣之中擁有極高的辨識度。Ken Thompson 今年已經 75 歲了,剛參與 Go 項目時他正處於個人職業生涯的半退休狀態,頭髮幾乎全部掉光。

這個隊伍裏還有另外一個其貌不揚頭髮不多的靈魂人物,從 Go 團隊建立之初,他就一直在裏面了。這個人名氣沒有 Ken Thompson 那麼大,知道他的人並不是太多,而這個人其實才是 Go 語言「元團隊」裏最爲核心的人物 ,他就是今天要講的程序英雄 —— 加拿大人 Rob Pike。

我們現在看到的他已經是一個 60 多歲的老頭了,年紀雖然只有我們的 2 倍多一點,但是在程序界工作的經驗已經是我們大多數人的 5 ~ 6 倍。我們中國的程序員多半工作了十多年就幾乎不願再繼續寫代碼了,但是他整整寫了40多年還沒有金盆洗手。別看他現在頭髮已經掉光了,遙想當年,他的頭髮也曾茂密過,從照片中看似乎還是一個不錯的帥哥。

他來 Google 之前一直在貝爾實驗室搗鼓它的 Plan9 操作系統,雖然幾乎沒人聽說過世界上還有這麼一個操作系統,Plan9 這個項目已經活了很多年,到現在還有不少人在繼續維護,Plan9 的官方主頁是 https://9p.io/plan9/。我翻閱了官網上對 Plan9 的說明文檔,裏面有關 Plan9 的論文多達幾十篇,這些論文中 Rob Pike 的名字署滿了近一半。這足以說明 Rob Pike 不容小噓,他就是 Plan9 操作系統的靈魂人物。

他是一個全能型程序員,從操作系統寫到編譯器,又從文本編輯器寫到了 UI 界面。看到 Rob Pike 的偉大功績,我不免要開始感嘆自己的渺小,在他老人家面前我就是一個小學生 —— 都不如。

我本以爲他只是一個單純的程序員,但是查閱資料後發現,他居然還是一位業餘天文學家,發明過珈瑪射線射電望遠鏡。

更要命的是他還參加了 1980 年的奧運會射箭項目奪得了銀牌。

1990年他上了電視,參與了大衛萊特曼的電視節目《Late Night with David Letterman》。

他寫過兩本書,分別是《Unix 編程環境》和《程序編程實踐》,感興趣的同學可以買來讀一讀,字字珠璣,讀後必定受益匪淺。

他說過一句話讓我等數據結構學的很一般的後輩特別受鼓舞 —— 只要掌握了數據結構中的四大法寶,就可以包打天下,他們是:array 、linked list 、hash table、binary tree 。這四大法寶可不是各自爲戰的,靈活結合才能遊刃有餘。比如,一個用 hash table 組織的 symbol table,其中個個都是由字符型 array 構成的 linked list 組成的。

他和 Linus 大神有相似的觀點 —— 以數據爲中心。如果已經選擇了正確的數據結構並且把一切都組織得井井有條,正確的算法也就不言自明。編程的核心是數據結構,而不是算法。

如果你喜歡玩弄高級的算法和數據結構,他說過的話可能會打擊你 —— 花哨的算法比簡單算法更容易出 bug 、更難實現。儘量使用簡單的算法配合簡單的數據結構。

在他心目中,他一直以 Ken Thompson 爲自己的導師

在我加入貝爾實驗室一年多後,我開始和 Ken Thompson 一起在開發一個針對由 Gerard Holzmann 設計的很小的圖形化交換語言的即時編譯器上做結對編程。我打字比較快,所以我坐在電腦前,Ken 站在我身後看我編程。我們開發的很快,但經常會遇到問題,而且可以看出來出錯了 —— 畢竟這是一個圖形化的編程語言。當程序出錯時,我本能的一頭扎進問題,檢查報錯跟蹤信息,添加調試打印語句,啓動調試器,等等,但 Ken 只是站在那思考,完全不理會我也不查看我們寫的出問題的代碼。一段時間後我發現一個規律,Ken 經常會比我先找到問題出在什麼地方,而且會突然的喊一嗓子,“我知道什麼地方的問題了。”每次他的判斷都很準確。我認識到,Ken 已經在腦海裏構建了代碼的模型,當有問題出現時,那是他腦子裏的模型出了問題。在思考爲什麼會發生這些錯誤時,他能憑直覺找到模型中什麼地方不對或發現寫的代碼跟這個模式什麼地方有出入。

  Ken 教會了我一個極其重要的習慣:糾錯前先思考。如果你一頭扎進問題中,你可能只解決了當前出現問題的代碼,但如果你先思考這個錯誤,這個 bug 是怎麼引入的?你通常發現和糾正一個更高層次的問題,進而改進了系統設計,防止了更多 bug 的出現。

  我認識到這種編程思考模式非常的重要。有些人癡迷於一行行的、使用各種工具來調試所有的東西。但我現在相信,思考 —— 不看代碼的思考 —— 是最好的調試途徑,因爲它能讓你開發出更好的軟件。

他和 Ken Thompson 一起發明了全世界無猿不知的 UTF8 編碼格式。在前沿科技的量子計算和通訊領域也做過一些深入研究。

通過仔細翻閱他在貝爾實驗室的個人主頁,我發現 在 2003 年發起了一次嚴重車禍 —— 下坡的時候他從自行車上摔了下來!摔斷了三根肋骨、鎖骨碎裂、肩胛骨縱向分裂。辛虧當時帶了頭盔,不然有沒有今天的 Go 語言都不好說。事後他饒有興趣地將自己骨頭的 X 射線底片放到了個人博客上和粉絲們一起仔細研究觀賞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章