# 詹姆斯·高斯林：Java、JVM、Emacs 與計算的早期歲月

> Java 之父回顧語言設計的初衷、JVM 的演化，以及早年程式設計工具與計算環境的往事。

- 原標題：#126 – James Gosling: Java, JVM, Emacs, and the Early Days of Computing
- 期數：第 126 期
- 釋出日期：2020-09-24
- 嘉賓 / 主題：詹姆斯·高斯林
- 網頁版：https://lex.qiaomu.ai/tw/ep/james-gosling/
- 官方頁面：https://lexfridman.com/james-gosling/
- 精讀字數：約 9469 字（閱讀約 21 分鐘）

> 本文為 lex.qiaomu.ai 基於原始訪談的 AI 改寫中文精讀，非官方翻譯；引用請註明出處並連結網頁版。

2020 年，Chrome 團隊統計了一遍自家修過的高危漏洞。六到七成屬於同一類：指標指到了不該指的地方。

詹姆斯·高斯林（James Gosling）看到這條新聞時的反應是拍額頭。三十年前，1990 年，他和 Sun 的幾個同事啟動 Java 專案，最重要的設計目標之一就是讓這類 bug 在語言層面寫不出來。

三十年過去，指標還在惹事。

這個細節差不多能概括整期訪談的氣質。他不講宏大敘事，講的是具體的機器、具體的 bug、會議室裡幾個人怎麼吵架。這些細節把五十年計算的脈絡串了起來：從 PDP-8 到 Emacs，從 ARPANET 到 Java 虛擬機器，從柯達的倒下到 Android 的官司。

## 他看程式碼的方式和大多數人不一樣

訪談開始，Lex 問了一個奇怪的問題：你最喜歡的無理數是什麼。

他說沒有這回事，不知道這個說法從哪來的。順口講了一段少年往事。十幾歲讀到一本《好奇與有趣數字詞典》（The Dictionary of Curious and Interesting Numbers），幾乎背了下來。後來養成一個怪癖，刷卡、填支票時會想辦法讓收據總額湊成一個有意思的數字。

Lex 追問 √2 有沒有故事。他的回答有味道：那是唯一一個摧毀過宗教的數字。畢達哥拉斯學派相信一切數都能寫成整數之比，直到有人證明 √2 不能。世界的不完美從那一天起有了數學證明。

接著聊到哥德爾不完備定理。他的讀法挺別緻。這條定理常被理解成"有些事你永遠無法知道"，他從中讀到的教訓是另一件事。人們想要非黑即白的答案，想要真或假。只要允許第三種狀態，真、假、也許，日子就能過下去。

這段閒談裡藏著理解他整個職業生涯的鑰匙。他相信二進位制之外還有別的層次，同時又極度厭惡模糊。他喜歡把複雜的東西收攏成一眼能看懂的形狀。

Lex 問：想一個程式的時候Lex 問：想一個程式的時候，你腦子裡看到的是什麼。

他的回答是：圖片。

程式碼落在紙上，很快會變成一張圖。它更像一臺機器，這個連著那個，齒輪咬合在一起。他看到的是那個，字母拼出來的詞法結構並不在他的視野裡。

這解釋了他為什麼堅持一種在很多人看來不健康的程式碼風格：**極度密集，最少留白，一個函式最好能完整放在一屏裡。**

他說因為這事被工程團隊約談過好幾次。場景挺戲劇化，所有人提前到場坐好，等他進門，然後集體開口："詹姆斯，關於你的程式碼風格。"

他的理由純粹是視覺上的。滾動螢幕意味著失憶，意味著要把剛才看到的東西從腦子裡重新撈一遍。整個函式攤在同一屏上，他一眼就能看到輸入什麼、輸出什麼、這東西到底在幹嘛。程式碼在紙上會直接跳出來，像一臺機器的透檢視。

自稱視覺思考者、自認口語表達不好的人，寫出了 Emacs 和 Java，兩個都需要極強抽象表達能力的東西。抽象未必靠語言完成。

## 從 PDP-8 到用高壓電搭井字棋

讓他上手的第一個機器，是卡爾加里大學的 PDP-8。

規格他記得一清二楚：**4K 記憶體，12 位字長，主頻大約三分之一兆赫茲。**他順手算了一下，今天隨便一臺機器都比它快一萬倍以上。

那臺機器藏在計算中心的角落，原本是一個網路專案買來的，買來之後基本沒人碰。他注意到它閒置，就開始折騰，沒人管，於是一直折騰下去。輸入裝置是一臺電傳打字機，紙帶那種，螢幕還沒有進入人們的視野。

這是歷史上第一臺用積體電路造的計算機。所謂積體電路，也不過是把十到十二個電晶體刻在一片矽上。今天一顆晶片上有上百億個。

Lex 問：那個年代你有沒有感受到摩爾定律的魔力，感覺到未來在指尖。

他把這種浪漫打了個稀碎：那時候它就是個玩具。

但這個玩具解釋了一件重要的事。他從小就喜歡動手做東西，做東西的麻煩在於需要材料，木頭、電線、開關，樣樣要錢。寫程式不需要任何物理材料，你能構造任意複雜的東西，成本為零。對一個沒什麼錢的少年來說，這是一扇突然開啟的門。

那時候他確實很窮。做電子專案靠翻垃圾桶撿零件，最大的收穫是電話公司交換中心後面扔掉的繼電器架。他用這些繼電器搭了一臺會下井字棋的機器。

麻煩在於繼電器的驅動電壓有講究，他沒有合適的電源。他從一堆廢棄電視機裡拆零件，拼出一個不對但能用的東西，**最後讓繼電器跑在 300 伏電壓下，接頭全部裸露，沒有任何絕緣。**

Lex 說我很驚訝你活下來了。他回，原因有很多。他還順口提了一句，十幾歲的極客發現鋁熱劑很容易自制，是件很常見的事。

在 PDP-8 上，他最初用的語言叫 FOCAL-5，可以理解成極度精簡版的 Fortran。寫的東西包括二十一點、紙牌接龍，還有一類他特別喜歡的：畫函式影象。輸入一個函式或者一組資料，讓電傳打字機把它打出來。沒有螢幕，影象由字元一行一行堆出來。

他就看著，覺得，哦，漂亮的圖。

## Emacs 是一次順手做出來的東西

1985 到 1986 年，他在卡內基梅隆。Unix 已經在研究圈站穩，Unix 上卻沒有 Emacs。當時的主流編輯器叫 TECO，全稱文字編輯器與校正器（Text Editor and Corrector）。

TECO 的宏語言公認晦澀。他的原話是，把一段 TECO 程式打在紙上，你會以為那是一頁隨機字元，比 LaTeX 還難讀。

用慣了就明白它的邏輯。TECO 為高速盲打做了最佳化，幾乎每個鍵就是一個命令，加上 Shift 和 Control，一個鍵能對應兩三個命令，編碼密度極高。用它編輯文件，你要在腦子裡維護一個遊標位置的心智模型：游標在 A 和 E 之間，要交換這兩個字母，那就執行這樣幾個動作。

他給了一個絕妙的比喻：**用 TECO，相當於閉著眼睛用 Emacs。**

最早的 Emacs 就是一堆 TECO 宏。這個名字的意思是編輯器宏（Editor MACroS），最初是麻省理工的理查德·斯托曼（Richard Stallman）等人寫的一套宏集合。後來 MIT 之外出現了好幾個實現，程式碼完全不同，繼承了那套哲學。

Emacs 加進來的東西里，最關鍵的是看得見。你編輯的東西以符合文件本來面貌的方式呈現在螢幕上，不需要靠記憶在腦子裡畫圖。再加上它可程式設計，能自由擴充套件命令。

他第一次用 Emacs 是某個暑假去 Multics 專案寫 Pascal 編譯器，那套 Emacs 是伯納德·格林伯格（Bernard Greenberg）用 Maclisp 寫的。他在那臺機器上住了三個月，基本上住在 Emacs 裡。回到 CMU 之後，他發現校園裡什麼機器都有，Unix 偏偏沒有 Emacs，決定順手補上這個洞。

**用 C 寫，因為當時 Unix 上能用的只有 C。**一兩個月之後，這個編輯器已經好用到能編輯自己的原始碼。接著它佔領了 CMU，然後越過校園圍牆。原因也簡單，Unix 拿下了 ARPANET 上的研究社群，Emacs 是當時最好的編輯器。

那段時間他曾經在 ARPANET 上每一個非軍方主機都有登入賬號，因為總有人發郵件過來說能不能給我們裝一下。那是安全性還沒人關心的年代，沒人管。

## 八零年代的 ARPANET，就是他眼裡的社交媒體

Lex 問他，當年能想象今天的網際網路嗎。

他的回答有點出人意料：很多東西其實沒怎麼變。

在 CMU 的時候，社交生活已經高度依賴 ARPANET。那時候沒有手機，人們坐在終端前打字，郵件和一行短訊息是最主要的溝通方式。約午飯、約約會，全部在網路上完成。

所以他個人的時間線是這樣的：**從 1980 年代初到中期，他已經在社交媒體上生活了。**等到 1990 年代網際網路爆發、社交媒體成為大眾現象，他的感受是這有什麼大驚小怪的。變的只是規模。規模的變化確實驚人，底層的東西幾乎沒動。

真正變了的是網路之外的那些利益格局。

## 為什麼有線電視公司恨網際網路

1990 年代初，Sun 內部寫過一個提案，核心意思是：有了網際網路技術，任何人都可以成為內容提供者。你可以把家庭錄影發給遠方的父母，可以傳孩子的作文，街角的小店或者餐館可以直接向外釋出資訊。

聽起來很正常。在當時，這個提案在另一些人眼裡是災難。

他講了一個特別精準的觀察。有線電視公司的大部分員工，真心認為自己的工作是把好內容送到使用者手上，使用者為此付費。這是他們在組織金字塔底層看到的世界。

往上走，看法會變。**有線電視公司真正的生意，從來都是把觀眾的眼球賣給廣告主。**這個認知在基層員工那裡幾乎不存在，在高層是預設設定。對他們來說，網際網路是搶眼球的人，並非新機會。網際網路上的內容越多，他們的觀眾越分散，廣告價值越低。

他說他們和好幾家有線電視公司正面衝突過，就是在這件事上。公司內部分層很清楚：底層在為使用者服務，高層在賣使用者。

## 柯達知道自己在往牆上撞，但它停不下來

柯達的故事他講得最細，因為 Sun 當年是柯達的重要供應商，他和柯達的人打過很多交道。

柯達有一個規模不小的數碼相機和數字影像研究團隊。他們非常清楚趨勢線長什麼樣。數碼相機今天的畫質確實不如膠片，改善速度是一條陡峭的曲線。兩條線遲早會交叉，交叉的那天就是膠片業務的崩塌。**這件事他們知道得太清楚了。**

問題在於，在撞牆之前，他們賺得盆滿缽滿。

他把這類困境講成了一個結構性難題。要跨過這道坎，你必須主動做一次轉型，轉型期必然是一段低谷：收入下滑，利潤變負，幾個季度報表難看。上市公司的鐵律是，CEO 不能讓某個季度的報表出現大坑。

他把特斯拉和亞馬遜拿出來做對照。這兩家公司在早期都敢承受巨大的賬面虧損，因為它們有耐心資本：創始人手裡握著一大塊股票，可以不管華爾街怎麼想。亞馬遜長期在虧損中運營，本質上是在投資未來。這種做法在一般公司裡幾乎不可能，因為沒有一個持股足夠多、說話足夠算數的人去頂住季報壓力。

他順帶評價了這幾個創始人。貝索斯有願景，而且有能力一直照著願景走。願景人人都有，絕大多數願景是徹頭徹尾的蠢主意，然後公司就燒掉了。矽谷的失敗率很高，很多失敗的原因在於時機不對、運氣不好，想法蠢只是其中一小部分。

說到特斯拉，他提了一個很有意思的細節。Model X 的鷹翼門，從工程角度看是徹底的荒唐，他的原話是那是一種對工程的褻瀆。說這話的時候他帶著欣賞。

因為那對門恰好是偉大領導力的符號：你有願景，你就一頭扎進去。**如果你要做一件蠢事，那就把它做得徹底蠢，然後全力以赴。**

## 聰明地工作是句毒雞湯

聊到喬布斯，他的態度很坦誠。喬布斯和他有過幾次面試和談判，他個人其實是喜歡喬布斯的，從來沒想過給喬布斯幹活。

Lex 追問為什麼。

他說，喬布斯對技術的部分並不懂，對人的感受、對人與物之間的關係，眼光極準。同時喬布斯會吼人、會罵人。

> 我不認為你需要那樣做。有推動人做到最好，也有推過頭。我認為他站在了那條線的錯誤一側。（James Gosling 談喬布斯）

他接著說了一段批評矽谷的話，說得挺重。矽谷當下的一個問題是，很多飛得很高的公司由徹頭徹尾的混蛋在管。喬布斯的神話在這裡起了壞作用：他成功了，因為他狠，所以想成功就得狠。這個推論在他看來完全不成立。

他認識很多成功的人，人都很好，只是不在公眾視野裡。媒體把混蛋抬成了英雄，因為混蛋做的事容易上新聞。

Lex 在這段裡做了個漂亮的反彈。他說自己更擔心另一種矽谷文化：對努力工作的抵制。聰明地工作而不是努力地工作，這句話聽起來像是給懶惰找的藉口。追求效率沒有錯，發現那條高效路徑本身需要大量的笨功夫。

他完全同意，而且說得更狠。**那些說聰明地工作而不是努力地工作的人，基本上都失敗了。**聰明和努力有先後順序，先有大量的努力，才有資格談哪條路更聰明。

他舉了谷歌作為反例。谷歌歷史上的領導層，拉里·佩奇和謝爾蓋·布林，都是很好的人。桑達爾·皮查伊也是。而這是一家工作極其拼命的公司。

## Lisp 的偉大與括號的原罪

Lex 提到一個大家都同意的事：Lisp 是史上最偉大的語言之一。他同意它在自己清單上，不願意把它排第一。

理由樸素得讓人發笑：**括號實在太多了。**

他也說，這些多到誇張的括號裡，確實藏著一種有趣的語言結構。他一直覺得應該有一個更友好的 Lisp 版本藏在某個地方，只是他從沒花時間去找。

他的清單上，Lisp 之上還有 Simula。這個名字今天很少有人提，它是第一個物件導向的程式語言，1967 年就有了 Simula 67。物件導向和語言真正結合，從這裡開始。協程（coroutine）也是第一次作為語言的一部分出現在這裡。

協程接近執行緒，沒有真正的併發。好處是不需要複雜的加鎖就能寫出像多執行緒一樣的程式碼，心智模型是並行的，你能用完全不同的方式組織很多問題。壞處是它用不上多核。真要在多核機器上跑協程，要麼享受不到多核，要麼就得掉進訊號量和鎖的世界。

## Java 不是被設計出來的，是被憋出來的

1990 年，Sun 內部有一小撮人覺得，計算行業漏掉了什麼。

起因很模糊：**有些事正在計算機行業之外發生。**電梯、機車、工廠的過程控制系統、音訊裝置、影片裝置，裡面都塞了處理器，都在用處理器做事。手機剛露出一點雛形。這些領域的處理器用量，比傳統計算機行業大得多。

當時 C 和 C++ 已經完全統治了世界。問題不在於語言沒人用，問題在於有一群人正在用 C 和 C++ 重新發明計算機網路，並且在重犯計算機行業二十年前犯過的所有錯誤。

於是幾個人開始了真正的公路旅行。飛到日本，拜訪東芝、夏普、三菱、索尼；去韓國見三星；去歐洲見飛利浦、西門子、湯姆遜。因為他們在 Sun 工作，對方願意接待。

拜訪中的發現，一部分在技術上，一部分在文化上。

技術上的發現是，這些消費電子公司造出來的網路方案，一眼就能看出二十五個必然翻車的地方。文化上的發現更深：**這些公司把和使用者的關係當作神聖不可侵犯的東西。**他們在可靠性和效能之間不做交易。

這一點讓他印象極深，計算機行業不是這樣的。計算機行業習慣用可靠性換效能。他舉了克雷超級計算機的例子，當年克雷為了讓除法變快，用了牛頓迭代近似，結果是一個浮點數的低若干位本質上是隨機數。這在跑分上是勝利，在烤麵包機上就是災難。如果一臺烤箱的控制晶片算錯了溫度，後果不是重啟，是房子著火。

回到 Sun 之後，他們決定用一個最土的辦法去理解這些市場：做一個原型。做一個家庭電子裝置的控制系統，電視、錄影機那一類。

寫的還是 C 和 C++，寫著寫著，麻煩就暴露出來了。

團隊裡有一位做商業計劃的同事，MBA 出身。日常討論裡他反覆問一些外行問題，這些問題逼著工程師把一些習以為常的東西重新審視一遍。安全性的要求、可靠性的要求、記憶體管理的細節，一條一條浮上來。

最刺眼的是裸指標。1990 年代初，行業裡已經有共識：**安全漏洞的第一大來源就是指標 bug，佔全部漏洞的五到七成，其中絕大多數是緩衝區溢位。**

他在這段裡放了一句自嘲。他年輕時做過一個 Pascal 到 VAX 彙編的翻譯器，那個專案是為了把一批跑在 PERQ 工作站上的軟體搬到 VAX 上，PERQ 是 Three Rivers 計算機公司造的教育用機器。他本來以為那是個偷懶的權宜之計，結果生成的程式碼質量比 C 編譯器還好，快得驚人。他當時想把這個做成博士論文題目，沒人覺得有意思。

好幾年後，當 Java 團隊需要解決同一份軟體如何跨不同指令集的機器執行這個問題時，那段經驗回來了。

於是他想到，為什麼不做一臺抽象機器。寫一個指令集，讓程式碼編譯成這臺抽象機器的指令，然後為每一臺真實機器寫一個翻譯器。既可以解釋執行，也可以編譯執行。直譯器容易寫，編譯器跑得快，兩條路都留著。

他的總結帶著一貫的自嘲：**我大部分好主意都是懶出來的。有些人的蠢主意，是因為他們不夠懶，非要把東西做得特別複雜。**

## 虛擬機器的兩次勝利

Java 虛擬機器是一個被刻意設計成可以從多個角度理解的東西。

一個角度很少被提及：你可以把它看成語法樹的逆波蘭記法編碼。另一個角度是它對外呈現的樣子，一臺抽象機器的指令集，而這臺抽象機器可以被翻譯成任何一臺物理機器。

為什麼這件事重要，要回到 1990 年代初和消費電子公司打交道的場景。

採購部門的痛苦非常具體。一臺裝置由鈑金、齒輪、電路板、電容、電阻拼起來，除了 CPU，幾乎所有零件都有多個來源，可以比價，可以談判，能拿到合理價格。

CPU 是專有的，而且每一代都不同。一旦選了某家的晶片，你從今往後就是它的客戶，沒有退路。因為你的軟體已經焊死在這臺機器上。C 語言在這件事上特別糟，它把底層機器的太多特性直接漏給了程式設計師。字長、位元組序、浮點行為，全都寫在程式碼裡。

最荒謬的地方在於時間的錯位：**這個不可逆的決定，必須在第一行軟體寫出來之前做出。**採購部門被這個邏輯逼瘋了很多年。

虛擬機器解決的正是這件事。晶片之上的那一層被抹平，軟體的生命週期和晶片的生命週期脫鉤了。你想換供應商，換就是了。

他還講了另一半痛苦：跨代遷移。Sun 當年從摩托羅拉的 68010 換到 68020，兩代晶片之間有一堆差異，其中一條把他們坑得極慘。他因此成了這個案子的主要負責人，整整一年的人生被這件事吃掉。

在所有差異裡，最要命的是浮點。

早年的機器不全是補碼錶示整數。CDC 的機器用反碼，偶爾還有用十進位制的。他覺得這已經夠荒唐了，乾脆就定死：整數就用補碼，別再折騰。

浮點更亂。各家機器對浮點的處理方式差異巨大，後果是整個軟體行業沒法寫出一個通用的數值計算庫。在 CDC 上能跑的程式碼，搬到 IBM 上就不對，再搬到另一臺機器上又是另一回事。

行業裡為此積累了大量工作，最後沉澱出一個標準，也就是後來的 IEEE 754。他做 Java 的時候，這個標準已經基本統一了天下，只剩幾個角落還有釘子戶。他的態度強硬：**必須能說清楚二加二等於什麼。**

這場仗打得很不體面。有幾臺機器沒有正確實現 754，主要對手是英特爾。英特爾在舍入上做了奇怪的處理，在超越函式上做了更奇怪的處理，名義是最佳化。

他提到一個至今讓人無話可說的細節：英特爾的三角函式在做範圍約簡時，用的圓周率值略有偏差。正弦和餘弦的計算，建立在一個錯的 π 上。

## Android 那筆賬，本來可以便宜很多

訪談快結束時，Lex 問了 Android。

他的回答被時間限制壓得很緊，資訊量不小。他說他很高興谷歌做了這件事。Java 在手機上已經跑了很多年，跑得很好。

問題出在怎麼做的這一部分。他點名了當年主導 Android 的安迪·魯賓（Andy Rubin），越了很多條線。這些越界後來滾成了鉅額訴訟。在他看來，這些線本來完全沒必要越，**不越線的成本要低得多。**

Lex 追問，是不是當時沒人預料到 Android 會這麼成功。

他的回答很有意思。他覺得這件事跟安迪做了什麼關係不大，它註定會爆炸。他形容安迪像是一個炸彈製造商。有些最好的東西和有些最壞的東西，都出自這種爆炸性。

至於驕傲這件事，他給了一個更早的答案。Android 出現之前，Java 已經在幾十億部手機裡了。比手機更讓他驕傲的是智慧卡標準採納了 Java。那個專案裡所有參與者都做得很紮實，SIM 卡就是其中之一。你口袋裡那張卡，跑的是 Java。

## 開源、斯托曼，和軟體工程師必須發誓貧窮

Lex 問了一個不太好答的問題：你做過一些很棒但沒成為主流的工作，部分原因是許可問題。回頭看開源這件事，你怎麼想。

他先給了立場：整體上他是開源的大粉絲。開源能建社群、能推動協作、能加速開發，這些都很了不起。

他對一件事有意見：**當開源變成宗教，開始主張一切都必須開源的時候。**在他的理解裡，這個版本的極端主張等價於要求所有以生產資訊為生的人發誓貧窮，包括寫軟體的、拍電影的。這條他接受不了。

他承認自己心裡有一小塊是認同那種衝動的。有人靠一個專利賺了幾十億，那個專利來自半夜半睡半醒時劈下來的一道閃電。那是運氣，運氣好沒什麼可說的。當這種運氣膨脹成他眼中的剝削時，問題就出現了。他舉了製藥業的例子：一種藥一天要一百美元，這不對勁。

他真正在意的有一個更具體的判斷標準：**如果一樣東西因為不開源而變成了更差的產品，那就是壞事。**

他自己就是受害者。Lex 說，我用 Emacs，我很抱歉，我本來可能用你寫的那個版本。他說，其實你現在用的那個，血統上可以追溯到他寫的那一份。Linux 上的預設實現，源頭繞了一圈是他的程式碼。

為什麼沒繼續做下去，他講得很實在。研究生最後兩年，有一件事變得很清楚：要麼當一輩子 Emacs 先生，要麼畢業。兩件事他做不到同時。

他去找了 ARPANET 上所有可能接手的人，幾乎每個人都回了一句：我有正職工作。最後找到新澤西一個車庫裡的兩個人，還帶著一條狗，他們願意接手，但要收費。他的條件是，對大學和學校必須免費。對方答應了。這個安排得罪了一些人。

他也承認，如果當年當了 Emacs 先生，今天可能非常有錢，Emacs 也許會膨脹成一整套文字處理產品線。他的原話是：**自己在財務上有一長串次優決策的歷史，因為他不想要那種生活。**

談到理查德·斯托曼，他試著把分歧講清楚。他的立場是，當資訊必須自由被推到極端，結果就是所有以生產資訊為業的人都要發誓貧窮。他不想暴富，他也不是暴富的人，但他得養孩子。

他也承認平衡的另一面。有些軟體閉源之後，官僚體系開始生長，產品反而變差了，這讓他難過。這是雙向的。

他舉了一個很少被提到的現實機制。很多國家的會計和審計標準，包括薩班斯法案的各種解讀，會有這樣的邏輯：如果一家公司的業務依賴某個軟體，你沒有為它買支援合同，這在審計上是一個風險項。於是你必須買支援合同。這就給開源軟體公司提供了一條活路，賣服務和支援。

這裡也有分寸。開源資料庫廠商收的支援費，和甲骨文那種收法，是兩回事。他用的詞是貪婪。**平衡是存在的，問題在於太多現代商業變成了贏家通吃。**

## 他留下的東西，不是語言

訪談最後兩個問題，一個關於遺產，一個關於給年輕人的建議。

Lex 問，五百年後人們寫到你，你希望他們記住什麼。

他的回答是：**希望人們不害怕做出信仰之躍。**

他說自己有一份很怪的歷史，做了一堆奇怪的事，結果還不錯。最怪的那些，往往是最酷的。當然也有燒掉的。他估了一下，自己做過的事裡，超過一半是燒掉的，偶爾讓人極其惱火。

但還是要繼續做。即使燒掉，你至少學到了東西。

給年輕工程師的建議很短：不要害怕風險。做蠢事一兩次是可以的，社會會給你一兩次豁免。第三次第四次就不太行了。

他還講了一件我覺得是整期訪談裡最值得抄下來的一段。

他很早就在思考技術決策裡的倫理問題。因為他是科幻小說的大粉絲，他會把每一個技術決定放進一個框架裡問：你是在造《銀翼殺手》，還是在造《星際迷航》。你更願意住在哪一個未來裡。

他的答案毫不含糊：《星際迷航》。

Lex 順著說，那最喜歡的 AI 就是《星際迷航》裡的 Data，最不喜歡的當然是天網。他同意，談話就此結束。

這個結尾看著輕鬆，其實很硬。一個寫了全世界最流行語言之一的人，衡量技術的方式，是這東西把人帶向哪個未來，效能、市場份額、融資額都不在這個位置上。他一生做的很多選擇都笨拙、不最優、財務上說不通，這條標準一直在。

最後他留給節目一句話：生活裡最難的事之一，是做選擇。

從 PDP-8 後面那個沒人管的角落，到 300 伏裸線搭出來的井字棋機器，到用一個月的晚上寫出改變整個研究社群工作方式的編輯器，到因為討厭指標 bug 而做出的那臺虛擬機器，這條線索其實一直都在。他一直在做的，是把世界收拾得讓人能一眼看明白。

- 翻出最近寫的一段程式碼，試著把其中一個函式壓到一屏之內。看不到全域性的時候，你其實是在靠記憶寫程式，而記憶會漏。
- 下一次技術選型，先問一句：這東西三年後要換掉，成本是多少。綁死在供應商身上之前，想清楚退路在哪。
- 查一下自己專案的程式碼庫裡有多少裸指標、多少手動記憶體管理。三十年過去了，這一條仍然是最常見的漏洞來源。
- 如果你在帶團隊，把推人一把和把人推下懸崖分開。前者能讓人做出這輩子最好的工作，後者只會讓人記住你是個混蛋。
- 給自己留一兩次信仰之躍的額度。前兩次搞砸是可以的，把它算進學費。第三次開始，先覆盤。
- 做一個技術決定之前，花兩分鐘問自己：這東西是在把世界推向《星際迷航》，還是《銀翼殺手》。答案不一定要改變決定，但值得你知道。
- 別信聰明地工作而不是努力工作。那句話的完整版本應該是：先努力到有資格談聰明。
