《碼農羣英傳》連載(一) —— 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 的官方主頁是 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 射線底片放到了我的博客上和粉絲們一塊兒仔細研究觀賞。

圖片

感興趣的同窗能夠點擊「閱讀原文」欣賞原汁原味的 Rob Pike 我的簡歷頁,地址是 herpolhode.com/rob/。我不是很能理解 Rob Pike 爲何將上面的蟲子做爲我的主頁的頭像。

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

相關文章
相關標籤/搜索