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

老錢發表於2018-11-05

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

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

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

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

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

圖片

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

《碼農群英傳》連載(一) —— Go 語言之父 Rob Pike
他是一個全能型程式設計師,從作業系統寫到編譯器,又從文字編輯器寫到了 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 射線底片放到了個人部落格上和粉絲們一起仔細研究觀賞。

圖片

感興趣的同學可以點選「閱讀原文」欣賞原汁原味的 Rob Pike 個人簡歷頁,地址是 herpolhode.com/rob/。我不是很能理解 Rob Pike 為什麼將上面的蟲子作為個人主頁的頭像。

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

關注公眾號「碼洞」,催更《碼農群英傳》

相關文章