← 回到天際線 寫程式的人第 7 層 / 31

EP 1262020-09-241:51:01

Java 之父談 JVM、Emacs 與早年寫程式的路

James Gosling

Java 與 JVM 的設計者 James Gosling,回顧從撿破爛做電路到寫出跨平台虛擬機的路,也談 Emacs 起源與矽谷創辦人的兩種樣子。

James Gosling: Java, JVM, Emacs, and the Early Days of Computing | Lex Fridman Podcast #126在 YouTube 看 ↗

重點6 條

  1. 數學與寫程式的美感:Gosling 提到平方根二推翻了畢氏學派「一切都能用有理數表示」的信念,談到哥德爾不完備定理時則說,接受「真、假、也許」的三值邏輯就好;他認為寫程式像在可能性的圖裡找一條短路徑,重點是能拿語言做什麼,不是語法本身。
  2. 視覺化的思考方式:他形容自己是視覺思考者,看程式碼會直接轉成一台零件彼此相連的機器,因此偏好緊湊的排版,好讓一整個函式能一次看完,不必捲動螢幕、靠記憶拼湊。
  3. 不用材料就能動手做:他在 Calgary 大學摸到一台閒置在電腦中心角落的 PDP-8,就自己玩起來;以前做電子專題,零件都要錢,只能去撿破爛,曾拿電話公司丟掉的繼電器做了一台井字棋機器,靠拆舊電視拼出 300 伏特電源;寫程式則完全不用材料。
  4. 在 CMU 寫出有名的 Emacs 版本:他在 Multics 上用過 Lisp 版的 Emacs 之後,回到 CMU 發現 Unix 沒有 Emacs,就用 C 寫了一版;有一段時間,ARPANET 上每一台非軍用主機都有他的登入帳號。他說現在的 GNU Emacs 輾轉演變下來,最早就是從他那一版開始的。
  5. 創辦人的願景,跟愛不愛罵人是兩回事:他談到 Tesla、Amazon 早年能撐過虧損期,也談到跟 Steve Jobs 打交道的印象;他不認同矽谷把「兇才能成功」當成必經之路,也提到自己認識不少不是渾蛋的成功人士,只是不常上新聞。
  6. Java 的幾個起點:1990 年代初他與同事跑遍日韓歐洲的消費電子公司,學到這些廠商絕不拿安全換效能,採購也不想被單一晶片供應商綁死;回頭做家電控制原型時,又被 C 的指標錯誤卡住。這些念頭最後匯成 Java 與 JVM「把抽象機器翻譯到實體機器」的做法。

時間軸26 段

01 04:39
數學之美

Lex 聽說平方根二是他最愛的無理數,他說沒這回事;但它是「唯一毀掉一個宗教的數字」,推翻了畢氏學派「一切都能用有理數表示」的信念。談到哥德爾不完備定理,他的心得是:接受真、假、也許的三值邏輯,日子就好過了。

02 08:02
程式與數學的關係

Gosling 認為程式跟數學一樣重點在找出簡潔路徑;他提到研究所一位同學靠直覺就能瞬間解題,像個活的定理證明機器。

03 11:12
視覺化思考

他重視能證明自己的程式正確,排版偏好緊湊、盡量把整個函式塞進一個畫面,因為他把程式看成互相咬合的機械畫面,不是文字。

04 14:43
童年動手做

他在 Calgary 大學摸到一台被冷落在角落的 PDP-8 自學;也拿撿來的繼電器與電視機零件湊出跑 300 伏特的井字棋機器。他說寫程式最吸引他的,就是不需要任何材料。

05 21:10
FOCAL 與組合語言

有點規模的程式都用組合語言寫;更早之前他在 PDP 上用過 FOCAL,像精簡版的 FORTRAN,寫過二十一點、接龍,最愛的是在電傳打字機上畫函數圖。

06 22:30
語言不是重點

他從沒覺得哪個語言特別美,重點是能拿它做什麼;有人找他吵語法,他的反應是「誰在乎」。後來工作多半寫 PDP 與 CDC 6400 的組合語言和 FORTRAN。

07 24:02
Lisp 與 Simula

他喜歡 Lisp 括號堆出來的語言結構,一直覺得某處藏著更友善的版本;也提到 Simula 是他心目中第一個物件導向語言,還率先把協同程序的概念帶進語言設計。

08 27:13
從 TECO 到 Emacs

他在 CMU 平常用 Unix 上的 ed 編輯。Emacs 最早是 MIT 用 TECO 巨集拼出來的;他暑假在 Multics 上寫 Pascal 編譯器,第一次用到別人用 Lisp 寫的 Emacs,覺得編輯體驗好太多。

09 33:29
自己動手寫 Emacs

因為 Unix 世界沒有 Emacs,他決定用 C 自己寫一版;有一段時間,ARPANET 上每一台非軍用主機都有他的登入帳號,因為各地要安裝都得找他幫忙。

10 35:36
ARPANET 上的社交生活

他說 1980 年代已經靠終端機上一行文字訊息安排約會與聚餐,社群互動的本質跟現在差不多,只是規模完全不同。

11 37:59
網路衝擊舊產業

有線電視、廣播與電話公司打從骨子裡痛恨網際網路;以有線電視為例,基層以為工作是把節目送到客戶手上,高層眼中真正的生意是把觀眾的眼球賣給廣告主。Sun 曾提案讓任何人都能發布內容,業者的反應是「那我們就沒戲唱了」,連知道趨勢的 Kodak 也困在既有的獲利模式裡走不出來。

12 45:53
承受低谷

轉型一定會經過低谷,但上市公司每季都要交財報,執行長最不能做的就是認列一季大虧損;早年的 Tesla 與 Amazon 能不理季報,靠的是握有大量股份的核心人物帶來的「有耐心的錢」。

13 48:48
願景、時機與運氣

被問到 Bezos 與 Musk,他說大多數願景其實很蠢,矽谷的失敗率很高,失敗常常是時機與運氣;Musk 接手前的 Tesla 只是還可以,是他的強烈願景把公司推上去,Model X 有點胡鬧,但他做得很大膽。

14 51:23
Steve Jobs 是不是渾蛋

他跟 Jobs 面試過幾次、也談判過幾次,私下喜歡他,但沒辦法替他工作,覺得對人吼叫、罵人沒有必要;他討厭矽谷從 Jobs 身上長出來的迷思:以為要成功就得當個渾蛋,他認識很多不是渾蛋的成功人士,只是不常上新聞。至於拚不拚,他說聰明和努力不是二選一,喊著「work smart, not hard」的人幾乎都失敗。

15 58:50
開源的界線

他支持開源建立社群、促成協作的價值,但不認同「所有軟體都必須開源」的教條;他與 Richard Stallman 的分歧在於,不認為軟體創作者一定得甘於貧窮。

16 1:02:39
Mr. Emacs 還是畢業

研究所最後幾年他發現,要嘛一輩子當 Mr. Emacs,要嘛畢業,兩者只能選一個;他把 Emacs 交給紐澤西車庫裡的幾個人維護,對方要收費,條件是學校免費,這件事惹惱了一些人。他說自己有「一長串財務上不划算的決定」。

17 1:11:03
Java 的起點

1990 年他和同事在 Sun 內部組了一個小組,跑遍日本、韓國、歐洲的消費電子公司,想搞懂電腦產業之外正在發生什麼事。

18 1:15:40
安全優先的教訓

他觀察到消費電子業者把顧客關係視為神聖、絕不用安全性換效能;反觀電腦業,Cray 為了讓除法快,用 Newton-Raphson 近似,結果最後幾個位元形同亂數。

19 1:19:16
指標是頭號漏洞

90 年代初就知道五到七成資安漏洞來自這類 bug,大多是緩衝區溢位;30 年後,用 C++ 寫的 Chrome 仍有六到七成漏洞是指標惹的禍。

20 1:23:30
快速失敗與擋後門

他希望程式出錯就立刻、明顯地壞掉;很多團隊發現,從開始寫到能上線的穩定版本快了兩倍,第一個 demo 倒是差不多。他也把介面設計成不能繞後門存取,逼工程師直接找對方談改介面,而不是偷用內部細節。

21 1:28:30
JVM 的構想

JVM 是把抽象機器翻譯到實體機器的做法;用意是讓採購不必在寫下第一行程式之前就被綁死在某家晶片上。換一代處理器也不用重寫軟體,他就曾因為 Sun 從 68010 換到 68020 賠掉一年。

22 1:34:05
靈感來自研究所

這個想法源自他研究所時期的一個專案:把 Three Rivers 公司工作站用的 UCSD Pascal p-code 翻譯成 VAX 組合語言,效果比 C 編譯器還好;當時沒人認同這值得當論文題目,多年後才想通這正是可以推廣的做法。他說自己多數好點子都是懶出來的。

23 1:40:31
算術也要一致

他堅持 Java 的整數一律用二補數、浮點數照 IEEE 754;最大的衝突對象是 Intel,他們的捨入方式與超越函數做法怪異,算 sine、cosine 時用的 π 值還差了一點。

24 1:44:00
Android 用 Java

他樂見 Android 採用 Java,但認為主導 Android 的 Andy Rubin「跨過了不少界線」,違反各種合約,後來演變成大型官司;他說不越線其實便宜得多。

25 1:47:26
想留下的印象

被問到希望怎麼被記得,他說希望是讓人不怕放手一搏;他也提到自己做過的事遠超過一半以失敗收場。

26 1:48:30
給年輕人的建議

他說不要怕冒險,第一兩次做蠢事沒關係;也提到自己幾乎每個技術決定都會拿科幻作品來問:這是在打造《銀翼殺手》還是《星際爭霸戰》的世界?並表態更想活在《星際爭霸戰》的世界。