Unix之父肯·湯普遜誕生
在77年前的今天,1943年2月4日(農曆1942年12月30日),Unix之父肯·湯普遜誕生。肯湯普森1943年2月4日,Unix之父、圖靈獎得主、美國工程院院士肯·湯普遜(KennethLaneThompson,一般稱之為KenThompson,肯湯普森,1943年2月4日-)出生於美國新奧爾良。在《程式設計人生》一書的訪談中,他回憶自己小學時受到的教育很爛,但有一堂課講了二進位制,自小喜歡邏輯的他立即被迷住了,他做了很多二進位制運算,還藉助一臺十進位制計算器擴充套件到各種進位制。到了高中,他又迷上了電子,自己製作無線電、示波器和放大器。1960年,Ken如願進入加州大學伯克利分校主修電氣工程。二年級的時候他有機會使用一臺模擬計算機,因為沒有別人搶,實際上成了他的專用。解釋程式太慢,他不得不直接用匯編程式設計,並從中學會了什麼是計算機。後來一個假期他又得到了解釋程式的原始碼清單,在不懂程式所用語言的情況下,他仔細研讀,學會了程式設計,並在學校找到程式設計的工作。1965年本科畢業後他沒有別的地方去,留校了。有個教授為他申請了碩士,於是他又讀了一年碩士。碩士導師是著名的資訊理論和博弈論專家ElwynBerlekamp。當然,Ken自己回憶,實際上他大部分都是在自學,就畢業了。Berlekamp也是一位傳奇人物,博士導師是夏農、Gallager等大師,發明了Berlekamp、Welch-Berlekamp和Berlekamp-Massey等著名演算法。他花了不少時間研究圍棋等博弈遊戲,是組合博弈論的創始人之一。他還是加州大學伯克利分校數學系裡唯一一位沒有數學學位的教授。更有意思的是,他曾與同事共同創辦了Axcom交易顧問公司,在其編寫的演算法指導下的基金創造了55%淨回報率的奇蹟。今天,這支基金仍然在運作,它就是傳奇基金公司文藝復興(Renaissance,另一家由數學教授創辦的公司)旗下歷史最長的Medallion。離開校園後,Thompson加入了貝爾實驗室。應市場的需要,當時貝爾實驗室與麻省理工學院以及通用電氣公司正在聯合開發一個多使用者分時作業系統,取名為Multics(多路資訊計算系統),Thompson成為這個系統的開發人員之一。在開發Multics的期間,Ken創造出了名為Bon的程式語言。可惜因為這個系統不但開發週期長,成本高,而且龐大而緩慢,市場前景完全不被看好,最後貝爾實驗室從這個專案中撤了出來。這對於Ken而言,簡直是個巨大的不幸,因為他自己用寫的一個“startravel”遊戲就是完全基於Multics的,退出Multics專案意味著Ken將沒有機器可以再玩這個遊戲了。面對此情此景,Ken作為一個創造者的本性立即體現了出來,於是他決定自己寫一個作業系統來滿足他玩遊戲的需要,說幹就幹,Ken找到了一臺廢棄已久的老式PDP-7,並在這臺機器上重寫了他的遊戲。在這個過程中,Ken有了一個主意,要開發一個全新的作業系統。利用PDP-7上的組合語言,Ken只花了一個月就編寫完了作業系統的核心,在這個一個月中,他一週一個核心,一個檔案系統,一個編輯器和一個編譯程式的完成。做完這個系統後,Ken將其命名為UNiplexedInformationandComputingSystem,縮寫為UNICS,後來做了一下改動,UNIX誕生了。為了開發Unix,Ken還開發了一種新的語言,即C語言的前身——B語言,這種語言簡潔明瞭,接近於硬體語言。Unix的出現開始雖然並不為大家所看好,但是卻引起了貝爾實驗室另一位同事的注意,這就是DennisM.Ritchie,於是Dennis主動加入進來共同完善這個系統。1972年,他們聯手將Unix移植到當時最先進的大型機PDP-2上。由於Unix是如此的簡潔、穩定與高效,以至於當時大家都放棄了PDP-2上自帶的DEC作業系統,而完全改用Unix,這時的Unix已經開始走向成熟了。在1973年之前Unix還不太為外界所知,到同年10月,Unix在IBM舉辦的作業系統原理專題研討會上被提及,當Ken和Dennis在會上宣讀論文並展示Unix後,整個會場轟動了,大家都立即湧上來索取這種新型的作業系統的程式。隨著Unix的需求量的日益增加,Ken與Dennis決定將Unix進一步改寫,以便可以移植到各種不同的硬體系統,由於Unix的原始碼中不少是用匯編完成,不具備良好的移植性,正好Dennis在1973年在B語言的基礎上開發出了C語言,C語言靈活,高效性,與硬體無關,並且不失其簡潔性,正是Unix移植所需要的法寶,於是舊版的Unix與C語言完美結合在一起產生了新的可移植的Unix系統。隨著Unix的廣泛使用,C語言也成為了當時最受歡迎的程式語言,一直延續至令。說到Unix與C語言,還有一段小故事,當時安裝了Unix的PDP-11被放在貝爾實驗室供大家使用,有一天大傢伙發現Ken總是可以得到最高的許可權輕鬆進入他們的帳戶,在貝爾實驗室這種高人云集的地方,這簡單是太不能容忍了,於是有若干高人跳了出來,仔細分析Unix程式碼,找到後門,修改後再重新編譯整個Unix,當所有人都以為這個世界應該從此清靜了的時候,卻發現Ken還是很容易就取得了他們的帳戶許可權,為此大家鬱悶不已。直到很多年後,Ken才道出其中的原委,原來程式碼裡確實存在後門,不過並不在Unix程式碼中,而是藏在編譯Unix的編譯器裡,每次編譯器編譯時就會自動加入後門程式碼,而當時整個貝爾實驗室都用的是Ken所寫的C編譯器。由於Unix與C語言的深遠影響,1983年美國計算機協會將當年的圖靈獎破例頒給了軟體工程師出身的Ken與Dennis,並在當年還決定新設立一個獎項――軟體系統獎,以獎勵那些優秀的軟體開發者,當然首個軟體系統獎也是非他們兩人莫屬了。完成Unix這樣的偉業之後,也許是受了老師Berlekamp的影響,Ken的興趣轉移到計算機象棋程式上,開發了一個名為Belle的國際象棋專用計算機,在當時那可是打遍天下無敵手。他還編寫了一個程式擴充套件象棋殘局庫。Ken的職業生涯也並非一帆風順。1980年代,他在DennisRitchie的支援下,與RobPike、BrianKernighan、TomDuff、DougMcIlroy、BjarneStroustrup、BruceEllis等眾多大牛合作,開始投入雄心勃勃的Plan9作業系統開發中,這個專案的目的是開發出能取代Unix的新一代分散式多使用者和圖形化的作業系統。1992年、1995年先後釋出了兩個正式版本。但Linux的迅猛發展漸漸使Plan9喪失了成長空間。1990年代後期,朗訊公司取消了商業計劃,Plan9最終也沒能真正走出實驗室。此後,朗訊又啟動了Inferno作業系統研究專案,Ken繼續投身其中。這個名字嚇人(取材自《神曲》中的地獄之火)的專案有Dis虛擬機器、先進的程式語言Limbo和協議Styx,在1997年釋出了第一版,並用於朗訊兩個產品之中,而且公司還成立了專門的業務部門。應該說取得了一定的成功。但是,這時候網際網路興起,Sun開發的Java開始大紅大紫。而朗訊公司完全沒有意識到,其實Inferno完全可以與Java環境競爭,從網際網路大潮中分一杯羹,在營銷和運營模式上完敗。三年後Inferno業務部門被關閉,智慧財產權出售給英國公司Vitanuova。2000年12月,Ken正式退休。後曾以Fellow頭銜在另一家通訊裝置公司Entrisphere工作到2006年。2007年9月,他以傑出工程師的身份加入Google,再次與老朋友RobPike一起出徵,這次他的任務是為Google設計基礎設施。他在《程式設計人生》一書訪談中表示,自己的工作是作業系統方面的事情,是各部分之間的膠水。他有特權可以做自己想做的事情,面臨的挑戰是,使許多不可靠的機器能像一臺可靠的多處理器機器那樣工作。雖然對Google大規模海量使用者的計算環境以及相關的制度還不太適應(比如,他甚至還沒有資格提交程式碼),但他總體上還是很喜歡這裡的工作。2009年11月他們工作的第一個成果釋出,這就是引起廣大程式設計師關注的Go語言——帶垃圾收集、編譯型的併發系統語言。某種程度上,他們的工作似乎是Inferno的延續,Go語言的原始碼中,有一些直接衍生自Inferno。下一步還會有什麼驚喜呢?讓我們拭目以待。Unix使Ken獲得了眾多榮譽,圖靈獎、美國國家技術獎、IEEETsutomuKanai獎,還有前幾天剛剛頒發的2011年日本國際獎(獎金45萬美元)。此外,Ken在開發編輯器的過程中發明了正規表示式,在開發Plan9作業系統的過程中發明了UTF-8編碼,這些成就也值得我們感念。應該說,KenThompson是幸運的,他因興趣進入計算機界,整個職業生涯幾乎能隨興之所至。難怪他認為優秀開發人員的標誌是熱情。不過,有一點可能會令我們驚訝,他建議自己的兒子去讀生物而非計算機,理由是計算機發展太慢了。1999年肯·湯普遜(左)和丹尼斯·裡奇因開發C語言和Unix作業系統一起獲得了美國國家技術獎,克林頓授獎。肯·湯普生和丹尼斯·利奇