那些神一樣的程序員

在MIT的BBS上曾有一個帖子,其中問道:

你覺得誰是最厲害的程序員, 為什麼?

雖然大家在回復的帖子中聲明最厲害的程序員排名不分先後,然而大多數人仍把Bill Joy列在第一位。

Bill Joy?

年輕的程序員也許已經不知道他是誰了,但是他留在這個世界上的作品你一定知道,今天來講一講Bill Joy這位神一樣的程序員。

1

1975的秋天,Unix光環加身的大神Ken Thompson休了一個長假,他回到了自己的母校,加州大學伯克利分校,他將在這裡以訪問學者的身份待一學年。

(Unix,Go語言發明人Ken Thompson)

在伯克利分校,Ken Thompson把Unix v6 安裝到了最新的機器PDP 11/70上面,並且開設了一門Unix的課程。

(PDP-11/70)

他不僅講解理論,還在晚上帶着大家閱讀一行行的Unix內核代碼,向大家解釋為什麼這麼做。

每個晚上,學生們都圍繞在Ken Thomphson周圍,瞪着一雙雙求知的大眼睛,聆聽Unix作者的教誨,實在是太幸福了!

這些學生當中有一個研究生,Bill Joy, 也是我們故事的主人公。

2

Ken Thompson通過Unix在伯克利大學激發了黑客精神。

有一天Ken Thompson在PDP 11/70 機房「閑逛」的時候,在Unix上隨手寫了一個不太完善的Pascal編譯器,這令Bill Joy大開眼界,原來黑客就是這麼玩的啊!

Bill Joy在用Pascal寫項目作業的時候,很快他發現了編譯器的缺陷,他也決定做一個黑客,把這個編譯器改好。

那時候沒有IDE,他們使用一個叫ed的文本編輯器來程序,ed也是大神Ken Thompson寫的,但是它實在是不好用,後來有人寫出了em,Bill Joy和Chuck又改進了em, 把它變成了en ,然後是eo, ep…… ex。

必須要提一下,那時候並沒有顯示器,大家用的都是teleprinter :

ed,en,ex們和我們現在用的文本編輯器不同,是所謂的「行編輯器」, 它們有什麼特點呢?

你想在文檔中任意移動光標,選取要編輯的文本段落?對不起,不行!你只能以行為單位進行上下移動!

你好不容易定位到了一行,想改這一行的某個詞,對不起,不行,你得刪除這一行,然後重新輸入!

當時的程序員過的都是什麼日子啊!

Bill Joy 使用ex這個「趁手」的工具,很快就把Thompson留下的「爛攤子」Pascal編譯器給收拾好了,新的Pascal編譯速度很快,運行起來也很快,深受學生們的喜愛。

後來,伯克利大學購買了一批叫做ADM-3A的終端,在屏幕上終於支持可以隨意移動的光標了!

Bill Joy 欣喜異常,他重新設計了ex, 增加了「可視化模式」,ex變成了大名鼎鼎的vi

(使用vi 編輯hello world)

vi這個編輯器讓無數程序員愛不釋手,更讓無數程序員從入門到放棄。還和另外一個神器Emacs開啟了長達幾十年的論戰:到底誰是最好的編輯器?

有個笑話說:如果讓計算機生成隨機數呢?

答:讓新手退出vi。

3

1976年夏天,「休假」滿一年的大神Ken Thompson返回了貝爾實驗室, 他雖然走了,但是他撒播下的黑客的種子開始生根發芽。

Bill Joy和其他同學此時對Unix內核越來越感興趣,他們發揮真正的黑客精神,不斷地對Unix進行改進和增強,比如Bill 覺得Unix自帶的Shell不爽,自己開發了一個C Shell (csh)

與此同時,他的Pascal編譯器有着良好的聲望,很多人都想要一個Copy。

Bill Joy突發奇想,為什麼不把Pascal編譯器,ex編輯器(還有後來的vi編輯器),以及其他對Unix的增強一起打成一個新的包,重新分發呢?

於是在1977年早些時候,著名的Berkeley Software Distribution,即BSD 誕生了!

(BSD 的logo 小惡魔)

BSD發佈之後大受歡迎,各個學校和公司都在使用,後來相繼發展出了3BSD、4.0BSD、4.1BSD、4.2BSD、4.3BSD,還有些後繼產品如FreeBSD,NetBSD,OpenBSD,NeXTSTEP等, 其中NeXTSTEP最終演化成了蘋果公司名揚天下的MacOS。

BSD不斷增長的影響力引起了AT&T(貝爾實驗室的母公司, Unix版權所有者)的不爽,AT&T和伯克利大學打了一場曠日持久的官司,我們按下不表。

4

接下來就是一個傳奇的故事,關於TCP/IP。

當時,國防高級研究計劃局(DARPA)主導了計算機網絡的發展,由於BSD的良好表現,伯克利獲得了DARPA的合同,希望能增強BSD,可以支持DARPA的網絡。

當時有一家叫BBN的公司,曾經參加過ARPANET的建設,獲得了實現TCP/IP協議棧的合同。

TCP/IP協議是互聯網的基石, 讀過的人都知道,光是理解這些協議就非常不容易,更不用說準確地、高性能地實現它們了。

BBN把TCP/IP協議棧實現以後,DARPA要求Bill Joy集成進BSD,但是被Bill拒絕了,他理由很簡單:BBN寫的TCP/IP性能太差了!還不如我自己寫一個!

Bill Joy說到做到,很快就手寫了一個高性能的版本,集成進了BSD。當被問道是怎麼實現TCP/IP的時候, Bill Joy說:這非常簡單,你只要讀一下協議,然後寫代碼就行了

一個人打敗了一個公司,這讓BBN非常難堪!

5

1979年, Bill Joy 獲得了伯克利大學的電氣工程與計算機科學碩士學位,1982年他作為聯合創始人創立了Sun 公司,作為首席科學家一直到2003年。

在這期間,他的成就依然無與倫比:

Network File System(NFS)的主要設計人。

微處理器 SPARC 的主要設計者(軟硬通吃啊!),SPARC是Sun工作站的核心,每年給Sun帶來幾十億美元的收入。

很多重要技術的靈感來源:Java, Jini , JXTA

6

vi編輯器, c shell , BSD Unix, TCP/IP協議的實現, NFS, SPARC處理器,一個人能搞定任意一樣,足以在計算機的歷史上刻下自己的姓名。

可是Bill Joy居然以一己之力創造了這麼多的東西,讓我們嘆為觀止。可是他想要「封神」, 還差一樣東西:以他的名字命名的定律,或者法則。

這難不住Bill Joy, 以他的名字命名的有兩個定律:

Bill Joy 定律1

從1984年起,計算機的峰值計算速度,每年翻一倍。

Bill Joy 定律2

不管你是誰,大多數絕頂聰明的人總是在為另外一個人或者組織工作。