
導讀:他是世界上最傑出的程式設計師,UNIX、Go語言發明人。
作者:Mr.K,整理:Emma
來源:技術領導力(ID:jishulingdaoli)
1983 年,美國計算機協會將圖靈獎授予肯·湯普森和與丹尼斯·裡奇。
獲獎理由是:
For their development of generic operating systems theory and specifically for the implementation of the UNIX operating system.
翻譯過來就是:
授予肯·湯普森和與丹尼斯·裡奇圖靈獎,以表彰其在通用作業系統理論領域的貢獻,特別是UNIX作業系統的開發與實現。
本文要介紹的主人公,就是肯·湯普森。
在許多讀者都還沒出生的年代,他就已經取得了計算機界的最高榮譽——圖靈獎。

01 計算機天才養成記
肯·湯普森出生於1943年。在他小學的時候,有一堂課講到了二進位制,喜歡邏輯的他立刻被吸引住了,在興趣的驅使下,他做了很多相關的二進位制計算,並藉助一臺十進位制計算器將其擴充套件到各種進位制。
其實,筆者小時候也有類似的經歷,我上初中的時候對物理非常著迷,很早就開始研究,牛頓的頭髮是在哪燙的?我想,我對物理老師,就是從那個時候開始有心理陰影的。
肯·湯普森,從小就是妥妥的學霸一枚,邊玩邊學,輕鬆考上了加州大學伯克利分校,攻讀電子工程學士學位。
雖然,國外的大學不像國內這麼輕鬆,隨便放飛自我。但是,對於肯·湯普森這樣的大神來說,課程so easy,哪裡不會點哪裡。
於是他迷上了一個新玩意:計算機。
每天晚上,趁著沒人的時候,他就偷偷溜進機房,自學了程式設計,編寫遊戲、玩遊戲,嗨到不行。
大四那年,大神心裡還是有點B Tree的,因為覺得自己不務正業,都在玩遊戲和程式設計,電子工程沒怎麼好好學,所以沒有申請讀研究生。
正當他準備捲鋪蓋畢業的時候。一位教過他的老師Berlekamp教授替他申請了研究生,並且通過了,多好的教授啊!
回想起筆者大學時候的教授,我的論文改了八回,答辯兩次才勉強畢業。同樣都是教授,怎麼差別就這麼大呢?當然了,同樣是學生,差別就是這麼大。
在研究生階段,肯·湯普森只用了一年就畢業了,你沒看錯,他只用了一年就拿到了電子工程和計算機科學的碩士學位。
02 加入貝爾實驗室
研究生畢業後,肯·湯普森的才華驚動了當時大名鼎鼎的貝爾實驗室,並且向他伸出來橄欖枝。但是,肯·湯普森卻看不上,他心想我這麼年輕,有才華,又有頭髮,應該有機會改變世界的。
但是,在貝爾實驗室的再三邀請之下,他還是勉強答應去參觀一下。
這一參觀不要緊啊,他發現漢明碼發明人、資訊理論發明人、電晶體發明人……這些牛X閃閃的人物,都出自貝爾實驗室。
肯·湯普森心想,像我這樣的天才不就應該來這裡嗎?於是他接受了貝爾實驗室的Offer。

▲貝爾實驗室
03 搞砸 “Multics作業系統”專案
1966 年,肯·湯普森加入貝爾實驗室,與丹尼斯·裡奇(就是文章開頭,一同獲得圖靈獎的另一位大神)一起參與名為 “Multics作業系統”的專案開發。
那個時代的計算機系統還處在批處理的階段,只能在既慢又笨重的大型機器上工作,要先將程式卡片裝入裝置,然後等1個小時後才能取運算的結果。不僅慢,還很廢紙。
因此,貝爾實驗室聯合麻省理工學院,以及通用電氣公司,想建立一套可以多人使用、多工、多層次的 Multics 作業系統。
但是,由於大家太過追求完美,導致開發週期過長,成本高,短期內看不到產出。論敏捷交付的思想的重要性啊,可惜那個年代大家並不那麼想。
1969 年的時候,貝爾實驗室忍無可忍,決定退出這個專案。

對於程式設計師來說,搞砸一個專案是很稀鬆平常的事情,就像筆者這10幾年的職場生涯搞垮過的專案,都可以寫出“搞垮系列”了。
但是讓肯·湯普森失望的是,再也不能玩自己寫的名為“star travel”的遊戲了,因為這個遊戲完全是基於 Multics 的。你看看大神,玩遊戲才是主業,上班只是兼職而已。

04 為了玩遊戲,開發了UNIX
既然這樣,那就自己開發個作業系統吧,這樣就可以繼續玩遊戲了。
有技術就是任性啊,一言不合就開發個作業系統。
所以千萬不要把程式設計師逼急了,他們連作業系統都能做,還有什麼事情做不出來?
肯·湯普森找到了一臺廢棄已久的老式 PDP-7小型機,雖然稱為小型機,那時候也有一個房間那麼大!在這臺機器上他首先重寫了遊戲,遊戲有了後,肯·湯普森還想著要開發一個全新的作業系統。
正好這個時候,他的老婆帶著孩子回孃家住3個禮拜,也就是說他有完整的3個禮拜沒有人打擾的時間。
於是他決定利用這段時間開發作業系統,基於之前搞砸“Multics系統”的經驗,他很快完成了核心系統、檔案系統、編輯器、編譯系統,一個月時間竟然編寫完了作業系統的核心。
這個故事告訴我們,一個男人想要搞大事,老婆不在家是多麼的重要!筆者這把年紀一事無成,是有原因的。一天查崗八回,就算你是王者,也榮耀不起來啊?
話說這個系統做完後,肯·湯普森將其命名為 UNiplexed Information and Computing System,縮寫為 UNICS 。但是怎麼念都拗口,後來改名為UNIX,陸續做了一些改動後,第一版UNIX作業系統誕生了。

那一年,肯·湯普森年僅26歲。
05 UNIX 跟C語言更配
1973 年的 10 月,在 IBM 舉辦的作業系統原理專題研討會上 ,UNIX首次向世界問好,當肯·湯普森和與丹尼斯·裡奇向人們宣讀論文並展示了UNIX後,整個會場轟動了,人們驚呼:我嘞個去,還能這麼玩!
後來隨著UNIX的使用者越來越多,肯·湯普森和與丹尼斯·裡奇決定將UNIX進一步改寫,以便可以移植到各種不同的硬體系統。
由於UNIX的原始碼中不少是用匯編完成,不具備良好的移植性,正好丹尼斯·裡奇在 1973 年在 B 語言的基礎上開發出了 C 語言。C 語言靈活,也更高效,與硬體無關,並且不失其簡潔性,正是UNIX移植所需要的法寶。
於是舊版的UNIX與 C 語言完美結合在一起,產生了新的可移植的UNIX系統。隨著UNIX的廣泛使用,C 語言也成為了當時最受歡迎的程式語言,一直延續至今。

UNIX經典的設計哲學KISS,就是在那個時候被提出來的——Keep It Simple, Stupid。
06 駭客與“後門”
肯·湯普森還有一個備受爭議的行為,就是在UNIX裡留後門。是的,這哥們竟然在程式碼裡下毒。
最開始的時候,UNIX系統在貝爾實驗室是供大家免費使用的。有人發現,肯·湯普森總能進入每個人的賬戶,於是一位同事就分析UNIX程式碼,重新編譯了系統。
令人意想不到的是,肯·湯普森還是能進入他們的賬戶,貝爾實驗室的科學家們卻對此束手無策。
直到1983年,肯·湯普森在他的圖靈獎獲獎感言裡揭示了這一秘密,原來,讓他輕鬆“侵入”各位同事賬戶的秘訣不在UNIX程式碼,而在編譯UNIX程式碼的C編譯器裡,而肯·湯普森正是編譯器的開發者。這個操作666,你以為看透了大神,可你就是玩不過他。
那位頭髮比他多,鬍子跟他一樣長的自由軟體之父、著名駭客——理查德·斯托爾曼,曾這樣定義過駭客,一名駭客必須包含三個特點:好玩、高智商、探索精神,而且三項必須同時滿足。
駭客追求的不是實用性技術或金錢。筆者作為一名技術從業者,經過多年的努力,我已經滿足了駭客精神的其中一點:好玩。當然了,主要是被別人玩。

▲自由軟體之父理查德·斯托爾曼
或許從這個角度,更能理解肯·湯普森的行為,他並非違背了道德準則,對他來說這個事就是一逗樂。不難發現,駭客的價值觀跟德雲社還挺配的。
07 加盟Google,參與Golang語言開發
2000年,57歲的肯·湯普森在貝爾實驗室退休。是的,這哥們的整個職場生涯都是在貝爾實驗室度過的,期間有幾年去了大學教UNIX系統課程。
然而,退休後這位老爺子也閒不住。
2006 年,肯·湯普森加入了 Google 公司。看看吧,誰說程式設計師做到35歲以後就找不到工作?關鍵還是技術過硬,別做了10幾年技術還是寫CRUD。玩技術的要麼越鑽越底層,要麼就高屋建瓴搞架構,千萬別原地踏步。
加入谷歌後,肯·湯普森又搞了一件大事。
他跟其它優秀的科學家一起開發了Go語言,也就是Golang。主要開發者有:肯·湯普森(Ken Thompson)、羅布·派克(Rob Pike)和羅伯特·格里澤默(Robert Griesemer)。另外兩位也是大神,有機會再仔細寫寫。
Go語言不用多介紹了,有人形容Go語言:Go = C + Python,說明Go語言既有C靜態語言程式的執行速度,又能達到Python動態語言的快速開發。
國內不少科技公司都是Go的擁護者。比如七牛雲的CEO許式偉,就是國內較早一批Go的使用者,他還出版了《Go語言程式設計》一書。
08 寫最騷的程式碼,開最酷的飛機
肯·湯普森並沒有像許多技術大神那樣,走上技術創業的道路,成就更大的商業夢想。
他在貝爾實驗室、谷歌,一直從事自己熱愛的開發工作。
除了寫程式之外,肯·湯普森是一位狂熱的飛行愛好者,並且還獲得了飛行執照。
閒暇之餘,他會跟同事們一起自駕,來一場說走就走的飛行。你不用羨慕大神的生活,其實你也可以擁有,但首先你得有架飛機。
沒有飛機也不用沮喪,說不定哪天,你用滴滴打飛機,就能叫到他。

你以為大神光是開私人飛機就完事了?肯·湯普森就算是愛好也要玩到極致。
1992年他特意到莫斯科,玩了一把米格29戰鬥機。不想開戰鬥機的飛行員不是好騎手。有錢、有閒、有膽,就這麼任性,你有辦法嗎?

09 結語
肯·湯普森,對計算機軟體業的發展,貢獻是巨大的。不僅是UNIX系統發明人,在他的職業生涯裡還開發了B程式語言(C語言的前身),UTF-8編碼,ed文字編輯器,以及參與開發了Go程式語言。
除了獲得圖靈獎之外,他還先後獲得了多項至高榮譽:
-
1994年,他獲得了IEEE(電氣和電子工程師協會)計算機學會先鋒獎。 -
1998年,被授予美國國家科技獎章。 -
1997年,入選計算機歷史博物館名人錄。 -
……
最後,以作家羅蘭的一句名言與你共勉:
成功的意義應該是發揮了自己的所長,盡了自己的努力之後,所感到的一種無愧於心的收穫之樂,而不是為了虛榮心或金錢。
參考:
《UNIX傳奇:歷史與回憶》, (美)布萊恩·W.克尼漢, 譯者:韓磊
《網際網路發展簡史:Ken Thompson世界上最傑出的程式設計師》,陳童的部落格
《老婆離家三週,我寫了一個作業系統!》,碼農翻身,劉欣
作者簡介:Mr.K,知名電商公司技術老K級人物。文出過暢銷書,武做過CTO,若非生活所迫,誰願一身才華。

延伸閱讀👇

延伸閱讀《C程式設計語言典藏版套裝》
(套裝共2冊 講義+習題解答)