# 吉多·範羅蘇姆：Python

> Python 之父講述語言的設計取捨、社群治理的演變，以及程式語言的品味。

- 原標題：Guido van Rossum: Python
- 期數：特別節目
- 釋出日期：2018-11-22
- 嘉賓 / 主題：吉多·範羅蘇姆
- 網頁版：https://lex.qiaomu.ai/tw/ep/guido-van-rossum/
- 官方頁面：https://lexfridman.com/guido-van-rossum/
- 精讀字數：約 9583 字（閱讀約 21 分鐘）

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

2018年7月的一個週四早上，7點鐘。吉多·範羅蘇姆（Guido van Rossum）醒來，腦子裡冒出一句話：昨晚那場 PEP 572 的爭論，是我最後一次讓自己為這類事情緊張成這樣。於是他開啟電腦，用15到20分鐘寫完一封郵件，宣佈辭去 Python 社群"終身仁慈獨裁者"（BDFL，Benevolent Dictator For Life）的職位。

郵件發出去5分鐘，他在 Twitter 上看到人們已經在討論：吉多辭去 BDFL 了。他本以為那封郵件只發在核心開發者才讀的內部論壇上，至少能給自己留一天緩衝時間。

郵件裡有一句話後來被反覆引用：**你們將自謀出路。**他沒有指定繼承人，沒有說要建立民主制、無政府狀態、獨裁還是聯邦，把這個開放性問題整個扔回給社群。

這場對話發生在辭職三個月後。Lex 問他，Python 生涯裡最艱難的決定是哪一個。是 Python 3 不向後相容嗎？

> 最艱難的決定大概是辭職。（吉多·範羅蘇姆）

## 從電子積木到生命遊戲

1956年，吉多出生在荷蘭。父母那一代人被二戰深深地刻過一遍。Lex 開場就問了個大問題：人性本善還是本惡？

吉多的回答很樸素：我們每個人身上都有善和惡的潛能，很大程度上取決於環境和情境。

他青少年時期最喜歡的荷蘭作家是威廉·弗雷德裡克·赫爾曼斯（Willem Frederik Hermans）。這位作家的早期小說寫的全是二戰期間那些說不清的事：抵抗組織和德國間諜之間的界限，你永遠搞不清某個人是真的抵抗者還是告密者，有些角色跨過了那條線，讀者到最後也不知道究竟發生了什麼。主角往往是反英雄，常常在某個層面上沒能實現自己的宏大目標。

然後是童年愛好：搭電子電路，拼機械模型。

他講得很老實。頭幾年純粹是照說明書組裝，他對電子學的理解淺到可笑，連線圈和電容是幹什麼的都不知道。這個無知後來惹了麻煩。做複雜一點的數位電路時，電路圖看起來完美無缺，就是不工作。他沒想到兩根線靠得太近、或者開關做工太糙，會產生兆赫級的振盪，把整個電路搞亂。

他能除錯，能極其仔細地照說明書操作，這個習慣保持了一輩子。但他腦子裡那套"電晶體怎麼工作"的模型是錯的。

這段經歷後來有回聲。他自己承認：

> 我一直非常專注於程式設計這項活動本身，而不是你寫出來的程式拿去幹什麼。（吉多·範羅蘇姆）

所以他從沒把計算機看成"能創造人工生命的弗蘭肯斯坦"，也沒把它看成寫作工具或者遊戲機。他最後造出一門給程式設計師用的工具語言，回頭看不算巧合。

18歲那年，他去東歐參加數學奧林匹克，是荷蘭隊成員。隊裡另一個極客小孩跟他講了一種叫"計算機"的玩意兒。他之前從沒聽過這個詞。

更早的時候，父母用打孔卡付雜誌訂閱費，他完全不知道背後有臺計算機在讀取這些卡片、在賬戶之間轉賬。他不感興趣。

直到上大學讀數學，才發現學校有一臺計算機，學生可以用。用法是：把程式打在打孔卡上，交給操作員，一小時後取回列印結果。那臺機器不連線真實世界，你能做的只有寫點抽象的東西。

大二或者大三，有人給他看了一篇兩頁的影印文章。《科學美國人》上的一個專欄，作者每月寫一篇數學趣題，那一期講的是康威的生命遊戲（Conway's Game of Life）。文章列出了全部規則，還暗示這件事在哲學上很有意思，這也正是康威給它起這個名字的原因。

他用 Pascal 寫了個實現。值得說的是他怎麼寫的。

他先在紙上設計了一個由邏輯閘構成的電路，九個位元輸入，也就是一個細胞加上它周圍八個鄰居，輸出這個細胞下一代的值。那是個全加器加上一些截斷邏輯。然後他把這個電路翻譯成 Pascal 整數上的一系列布林運算，把整數當位串用。這樣大約八條指令就能算出一代裡的60個位元。

他得意的那個點很有意思：整段回憶的重點落在"我把它最佳化得很好"上，對圖形本身的美一個字沒提。

原因很實際。學生機時預算極小，而且是計量的。他曾經因為超支被教授找麻煩。他想跑更大的棋盤、更多的代。實現必須快，他才有餘力去喂不同的圖案進去，看看會跑出什麼，比如滑翔機，那個幾代之後整體平移一兩格的經典圖案，還有滑翔機槍。

滑翔機槍這種圖案是他跑出來的。規則是他寫的，輸出不在他預期之內。

這就碰到了生命遊戲真正的謎題：**底層規則簡單到可以手算，跑出來的東西卻沒人能用數學描述。**

Lex 提到斯蒂芬·沃爾夫勒姆（Stephen Wolfram）為這事著迷，因為數學工具不夠用，你唯一能做的就是跑一遍看結果。吉多的回應比較剋制，他不認為這類問題適合經典數學分析。

這裡岔出了一條很有意思的思路。如果我們想造出真正的智慧，是不是也得造一個宇宙然後讓它跑起來？手工用 Python 一行行碼出一個完整智慧體，可能根本沒戲。需要的可能是先找到一套規則，讓它在演進過程中不會迅速退化成無意義的重複。

沃爾夫勒姆的經驗是：你發現能產生有趣現象的規則，快得令人意外。理論上不該這麼容易，但事實就是這樣。所以也許我們這個宇宙裝載的規則本身就容易長出有趣的東西，而長出有趣東西的難度，比我們以為的低。

年輕的吉多對"計算機會思考"這件事基本無感。他那時幾乎不讀科幻，頂多讀過一本科幻小說集。真正讓他開眼的是二十出頭讀的《哥德爾、埃舍爾、巴赫》（Gödel, Escher, Bach），一本講意識的書。

他說得很直接：

> 我完全相信大腦在某種意義上就是計算機。我不相信有什麼額外的東西給我們注入智慧或意識。沒有靈魂這種東西。我大概十歲就是無神論者了，就是稍微想了想數學和宇宙。（吉多·範羅蘇姆）

但同一段話裡他又說，他十幾歲的時候，知道那臺計算機有多少位記憶體、知道給它程式設計有多難，他完全不信能從這麼個東西里造出滿足他定義的那種智慧。

這兩種說法並不矛盾。**他知道大腦是計算機，也知道當時的計算機差得太遠，遠到他看不出這段距離怎麼填。**

## 程式語言是攢出來的，不是想出來的

Lex 問了一個假設：如果給你三個月，從零設計一門語言，你怎麼把"Python 好用的那些特質"變成語法規則和語言特性？

吉多的回答把這個問題直接推翻了。

他說 Python 一開始他就給自己定了規矩：**我可不想什麼都從零設計，我要從別的語言裡借我喜歡的東西。**

所以設計的第一步是觀察：我自己喜歡什麼。

這也是為什麼17歲造不出一門好語言。你還沒有足夠多的語言使用經驗，根本不知道自己討厭什麼、捨不得什麼。

他造 Python 的時候三十五六歲。他寫過解析器，參與過 ABC 語言的實現，跟 ABC 的設計者爭論了好幾年設計問題，雖然 ABC 的最終設計他一點沒參與，他加入團隊時語言已經設計完並實現了。

然後他開始借。縮排和一部分語法特徵來自 ABC，字串字面量和數字的工作方式來自 C，還有各種零零碎碎的區域性規則從各處拿來。Python 的好東西大部分是借的。

這個回答解釋了 Python 的長相。它來自一個有品味、有經驗的中年工程師做的大規模策展，跟天才式的設計推演沒什麼關係。

## Python 3：那些繞不過去的老坑

從"終身仁慈獨裁者"這個稱呼說起，Lex 問了 Python 3 的決策過程。不向後相容，這個決定怎麼做的？

吉多說那其實是群體過程。當時他名義上是 BDFL，所有人都尊重他作為創造者和語言設計擁有者的位置，但他在看所有人的反饋。

Python 3.0 的起點是社群裡的人反覆指出：有幾個問題一遍又一遍地咬到使用者，能不能動一動？

那些問題當時被叫"Python 疣"（Python warts）。團隊過去的做法一直是死守向後相容，所以很多疣在早年的版本里已經解決了，辦法是相容地解決，或者用非常漸進的演化路徑繞過去。剩下這些，是公認的問題，談不上路障，但總有人在這裡絆倒，而且每次絆倒都是同一個地方。

團隊想不出向後相容的解法。

但也一直有個選項擺在那裡：不解決。很長一段時間，他們就是這麼自我安慰的：好吧，這門語言在這個地方、那個地方就是不完美。有些細節在 Java 裡更好，在 R 裡更好，在 Visual Basic 裡更好，我們認了，反正改不動。也沒那麼糟，可以做點使用者教育，可以加靜態分析器，可以讓解析器報個警告。

但有一部分疣，他們的判斷是：這些問題不會消失，而且未來會越來越糟，得動手。

於是有了 Python 3。

## 2018年7月那個週四

PEP 572 是賦值表示式，也就是那個 `:=` 海象運算子。一個小特性。

爭論大得離譜。很多人聲稱自己知道什麼是 Pythonic 什麼不是，聲稱這會毀掉這門語言，是對 Python 最根本設計哲學的侵犯。

吉多的原話是：我覺得這全是扯淡，因為我支援它，而關於 Python 的設計哲學，我大概還是知道一點的。

他為此累了很久，也緊張了很久。那個週三晚上他終於發出郵件：接受了，我可以去實現了。然後上床睡覺，感覺很解脫，這事過去了。

週四早上7點醒來，他想的是：這是最後一次讓我為 PEP 決策緊張成這樣的爭論了，我應該辭職。

他想了退休這件事已經有五年，一直在開玩笑、在暗示，告訴社群未來某天我會退休，別把稱呼裡"終身"那部分太當真。這次他想，就是現在了。

那天他休假，本來打算和妻子去附近一個小海濱鎮子好好過一天。他花了15到20分鐘寫完那封辭職信。

他說自己當時甚至沒意識到那是個多麼重大的決定。

Lex 說那封信讀起來幾乎有莎士比亞的味道。不指定繼承人，把"你們將自謀出路"這種不確定性直接交出去，這個開放式的姿態把創造未來的責任還給了社群。

吉多的判斷是：**他敢這麼幹，是因為他知道 Python 處在很好的位置。**

核心開發者是50到100人的群體，寫或者審了絕大部分進入 Python 的程式碼。這些人大部分時候相處得很好，專業領域分佈廣，經驗層次從 Python 核心到嵌入式系統都有。他放心，因為這群人能照顧好自己。

辭職信發出後，社群開始起草憲法。到這次對話時，已經有五六個互相競爭的提案。

他對此非常自信。辯論整體上健康且有產出。

## 關於程式設計師之間的戰爭

Lex 提了個觀察。他彈吉他，隨便彈點什麼，周圍人都是"太棒了""真好聽"。但他以旁觀者身份進程式設計社群，發現但凡一個話題，往往會分成陣營，陣營之間互相批評起來相當狠。

他問得挺小心：作為旁觀者我可能完全錯了，但你怎麼看這件事？

吉多先承認了這個現象：聖戰是程式設計社群最喜歡的活動之一。

然後他給了個平衡的看法。如果所有人互相拍肩膀、從不說真話，那不是好事。但確實存在一箇中間地帶：**對人刻薄不行，但持續健康的批評和反饋非常有用。**

這個中間地帶在每一層都能看到。有人提了個改動很小的修復，很可能有 reviewer 回一句：其實換個做法更好。

## Python 不打算變成高併發語言

Lex 把所有熱門話題打包扔過來：併發、平行計算、async IO、GIL、打包工具、函數語言程式設計。請吉多挑著說。

吉多把 GIL、並行、async IO 合成一個話題回答，結論明確：

> 我對 Python 發展成一門高併發、高並行的語言不太抱希望。語言的設計方式、大多數使用者的用法、語言的實現方式，都讓這個未來相當不可能。（吉多·範羅蘇姆）

但他把 async IO 單拎出來了。async IO 是個特例，它只做一件事：讓 IO 重疊起來，僅限 IO。這恰好是支撐高吞吐 IO、每秒大量連線的最佳實踐。這塊他不擔心，async IO 會繼續演進，有幾個互相競爭的包，有些非常聰明的人在推著他們改進。

平行計算他說得更乾脆：**Python 不是幹這個的語言。**

有繞過去的辦法，但你不能指望寫一段 Python 演算法，編譯器自動把它並行化。你能做的是用 NumPy 這類包，告訴它資料在哪、要對資料做什麼抽象操作，它把能用的 CPU 全用上，然後你其實已經回到 C++ 的世界了。這些包本身通常就是 C++ 寫的。TensorFlow 這些也一樣，跨 GPU 的並行它們替你處理。

打包是另一個故事。吉多第一句話就是：**打包一直是我最不喜歡的話題。**

他說這問題真的難，因為作業系統和平臺想擁有打包權，但它們的打包方案不針對任何特定語言。Linux 就有兩套互相競爭的方案，全都跨語言工作。而 Node、Ruby、Python 各自有隻在自家生態內工作的方案。

他自己怎麼辦？用系統包管理器裝 Python，用 Python 的包管理器裝第三方 Python 包。大多數人也是這麼幹的。

他給了個時間線：**十年前的 Python 打包是災難，現在 pip 就是未來。**數值計算和科學計算另有一個基於 Anaconda 的生態，兩者能共存。他看不出有再多搞幾套的必要。

## 他養大了這個孩子

Lex 看過那部五個半小時的口述史，說它因為線性敘事，給人一種"一生過得很充實"的感覺。他問：除了家庭，回頭看這段旅程，你真正驕傲的是什麼？

吉多的回答值得抄下來：

> Python 肯定是我做過的最好的事。但我不會只說創造 Python，而是我養育 Python 的方式，像養一個孩子。我不只是懷了一個孩子，我把他養大了，現在我要把他放進世界，我已經讓他能夠照顧自己。我為此非常驕傲。（吉多·範羅蘇姆）

然後是蒙提·派森。Lex 說你可以隨時給我放"死鸚鵡"那一段。吉多說那也是他最喜歡的。

"它已經蹬腿了。""不，它只是在休息。""它已經壽終正寢、魂歸西天了。"這就是那場對話。

## 意識是一條光譜

話題轉向意識。吉多強調，這跟他的日常工作完全是兩條線。他寫程式語言，不涉及任何朝智慧或意識方向走的東西。但作為科普讀物的 avid 讀者，他有些想法。

他的核心判斷是：把意識當成開關來看，方向就錯了。貓、狗、老鼠有某種形式的智慧，魚也有某種形式的智慧。演化花了很多時間。他認為，越來越多智慧的演化，特別是通向人類這種智慧的路徑，是跟著感官的演化走的，尤其是視覺。

解釋一個場景需要的計算量巨大，人類至今比計算機做得更好。他的猜想是：哺乳動物發展出它們那個層次的意識，從智慧到自我意識到意識，跟"這臺機器人有高度發達的感官"有關。大量豐富的感官資訊湧進來，一層層堆上去，某種類似意識的東西就出現了。

然後是自動駕駛。這段是他自己主動延伸的，而且說得相當具體。

他說自己開車的時候不只是注意交通規則。他會看周圍，從裡面讀線索：這片是商業區；有個老太太過馬路；有人抱著一大堆郵件，前面有個郵筒，這人八成是要過街去投信。**然後他就減速了，他完全沒意識到自己在做這個判斷。**

把觀察轉成"另一個意識打算幹什麼""世界上另一個系統會怎麼動"的理解，這個過程無處不在。比如判斷那棵樹要倒了。

所以他說：

> 如果有什麼東西會變得有意識，我預期會是自動駕駛汽車，而不是 Google 或 Amazon 資料中心裡那堆網路互聯的、數以億計的計算機。（吉多·範羅蘇姆）

這個判斷的標準很實用。意識在這裡成了一個工程指標：**一個系統為了跟人類互動而必須具備的東西。**你得能共情，能恐懼，能理解什麼是怕死，才能處理好跟行人的關係，才能基於人的慾望和想法做基本計算。

狗就是證據。狗明顯知道周圍的人要幹什麼，或者說至少有一個關於人類行為的模型，而且它會學。有些狗知道你要出門，它想跟著；你把它單獨留下它會難過、會叫；小時候被虐待過的狗會害怕。我們不認為狗有多少意識，但也不認為它一點沒有。

## 從笛卡爾到模式匹配

17世紀有一批人，萊布尼茨、霍布斯、笛卡爾，他們有種感覺：所有思考、所有推理，那些我們覺得大腦裡最特殊的東西，都可以轉換成邏輯。一旦形式化了全部知識，你就能計算。**我們的大腦在做的，就是計算。**

吉多的反駁切在很具體的地方：他們沒有"模式匹配"這個概念。

他們以為自己發現了不起的數學工具，牛頓的微積分之類，於是順著那條線推演邏輯能走多遠。他們沒意識到，認出人臉靠的是另一套機制：**海量資料，加上一個能解讀視覺線索和上下文的電路，對著儲存的規則做大規模並行模式匹配。**

他自己舉了個生動的例子。如果明天在 Dropbox 辦公室樓下見到 Lex，他能認出來，就算 Lex 換了件襯衫也能。但如果明天在貝爾蒙特某家咖啡館、或者海灘上碰見，他可能完全認不出來。他經常犯這種錯：只在"我妻子的同事"這個語境裡認識的人，在電影院裡撞見就認不出。

Lex 追問：你說模式匹配，你覺得規則無法編碼這個？看看這個房間，我是黑襯衫、這個身高、是個人，你每一刻都在拾取上萬條關於場景的事實，把它們聚合成對場景的理解。你不覺得這些全都能編碼，最後擺到桌上計算嗎？

吉多的回答分兩層。

第一層：是的，這裡沒有魔法。第二層：但從眼睛耳朵進來的原始事實，到"我理解了這一幕"，中間隔著的抽象層級太多，他不認為 AI 真的走完了這段距離。

他給了個類比。人體由原子構成，這是個毫無用處的還原論視角。人體由器官構成，器官由細胞構成，細胞由蛋白質構成，蛋白質由氨基酸構成，氨基酸由原子構成，再往下是量子力學。每層都對，但你不能拿量子力學去理解身體。

他還有一段關於編譯器的推演，我覺得是這次對話裡最有資訊量的部分。

一個編譯器解析程式，它的輸入例程在某種意義上就是一個感覺器官。它構建起一個極其複雜的內部表示：不再是線性的位元組序列，而是一棵抽象語法樹。編譯器用這棵樹生成輸出，比如翻譯成能在硬體上跑的機器碼，然後這棵樹被扔掉。

魚或者蒼蠅接收到視覺訊號，他相信它也在構建某種資料結構。蒼蠅腦子裡的抽象層級可能少到只有"這邊比那邊暗""有東西在動"，所以你的手一揮它就跑了。但那已經是對運動的抽象。

我們腦子裡有類似的東西，只是複雜得多。**你要是沒有對運動的極好的抽象，你根本沒法開車。**

再往上，人類在運動抽象之上建了更復雜的資料結構，其中一部分持久儲存下來，變成記憶，可以調取。記電話號碼是很"有意識"的記憶方式：十個數字，重複幾遍，能複述出來。但"我怎麼認出你的臉"，他完全不知道。大腦裡有一堆專用硬體會幹這件事，他不知道自己腦子裡這套東西有多少寫在 DNA 裡，有多少是零到三歲之間反覆訓練出來的。

所以日常生活裡，我們執行在抽象的最高層，完全不感知底下那些細節。**編譯器疊著編譯器，一路往下。**

## 軟體 2.0 不該叫程式設計

Lex 提到 Andrej Karpathy 的說法"軟體 2.0"：神經網路用一堆輸入輸出的例子學出對映，你看不見裡面，也沒法分析，只能訓練。他問吉多：這種模糊的、引號裡的"程式設計"，應該叫程式設計嗎？

吉多的回答很乾脆：**我不會把那叫程式設計。那是另一種活動。**

就像用細胞搭器官不叫化學。

他給了個觀察：AI 史上處理過的每一個任務，一旦我們搞清楚了它是怎麼做到的，它就不再被算作人工智慧了。那時你不需要這個詞了，那就是"哦，現在我們知道怎麼做了"，然後一個新的科學或工程領域長出來。

他承認自己可能太執著於術語。但他預期，未來就是會有不同的概念，由受教育背景不同、對"我在幹什麼"的模型不同的人去發展。

他對"演算法"這個詞有一處抱怨，挺有意思。他說每次在報紙上讀到關於 Facebook 的軟文，說"演算法"如何如何，他就來氣，因為那是同一個詞完全不同的用法。他八歲十歲學到的是：**演算法是一套你完全理解的規則，可以被數學分析，可以被證明。**你可以證明埃拉託斯特尼篩法只產生素數，且產生所有素數。

而今天那些系統，你只能說在所有測試過的東西上它99.9%的情況下有效，但你沒法保證，它會以意想不到的方式失敗，你甚至連它怎麼失敗的例子都舉不出來。

但這裡有個轉折，是吉多自己提出來的：**軟體 1.0 其實也早就到這一步了。**

無 bug 程式的理想，大部分軟體開發者早就放棄了。我們只在 bug 頻繁到煩人的時候才管它。我們接受偶爾的崩潰、宕機、錯誤結果，因為不可能有那麼多程式設計師把程式碼寫到無 bug，那活兒太枯燥，你要是上形式化方法，那就更枯燥。

使用者點了個連結報錯，普通人不會慌，再點一次，通常就好了，或者換個路子完成任務。這是一種端到端的恢復機制。系統內部全是重試、超時、降級。他猜生物系統裡這類機制更多，否則活不下來。

## 規模改變了一切

說到程式設計教育，吉多的觀察很準。

基礎程式設計課上學生寫的程式太小太簡單，只要有 bug 你總能找出來修掉。中學的資訊課是這樣，大學的程式設計入門課也大多是"小規模程式設計"。很少有課程真的教軟體工程，真的教你搭大型系統。

Dropbox 每年夏天招大量實習生，西海岸每家科技公司都這麼幹。**這些實習生總是被震到，因為這是他們有生以來第一次看見一個真正的大型軟體開發環境長什麼樣。**大學裡學的一切幾乎都是小得多的尺度，而那個尺度差異會造成質的差別，改變你做事的方式和思考的方式。

Lex 追問：70年代80年代你剛開始想 Python 的時候，有沒有想過會出現 Google、Facebook、Dropbox 底下那麼大的系統？

吉多：計算技術的幾乎每一個階段都讓我措手不及。

再往前追，他講了自己想解決什麼問題。他很高興自己當時不知道社群裡所有的"癢處"：

> 如果你試圖一次解決所有問題，你什麼都解決不了。（吉多·範羅蘇姆）

他的問題極其聚焦：**要一門卡在 shell 指令碼和 C 之間的語言。**一個在那個特定環境裡能讓他作為程式設計師更高效的工具。他還給自己定了時間預算，大約三個月，包含設計（想清楚語法和語義上所有特性）和實現（從解析原始碼到執行的整條流水線）。

所以他不知道自己缺什麼，反而救了他。

## 為什麼從 C++ 換到 Python 會覺得快

Lex 講了自己的經歷。90年代到21世紀頭十年，他做機器學習和 AI 研究一直用 C++。做機械、電氣的同事用 MATLAB，還有些人偏好 Java 那種強調物件導向的路子。最近十年，神經網路那些包都建在 Python 上，他切過去了，明顯感覺到效率提升，但說不清為什麼。

吉多說：你大概確實更快了。

然後 Lex 自己把原因說出來了，我覺得這段比任何抽象論證都好使。

他說他在 C++ 裡**太享受寫出高效能程式碼、構建漂亮結構這件事了**，尤其是新標準裡那些模板程式設計，搭一個形式上極其優雅的結構。結果他發現自己大部分時間都花在搭那個結構上，而不是完成任務本身，比如解析一個檔案、抽幾個關鍵詞。

這就是 Python 那三個月設計預算的回報。它砍掉的東西，恰好是讓人沉迷、讓人忘記自己在幹什麼的東西。

回過頭看吉多那三個月：借縮排、借字串字面量、借數字語義，不發明新正規化，不追求理論上完備，把"從想法到能跑起來"的路徑壓到最短。他在電子愛好時期用麵包板，線路一碰就散架，但能工作，他要的就是先看見它工作，然後去做下一張圖。等設計定了，再考慮做 PCB、考慮焊接、考慮電壓波動和機械振動。**後面那些他不懂，但寫程式碼的那部分他懂得很透。**

麵包板和 Python 是同一件事。

## 被愛者與獨裁者

這場對話錄於2018年11月，吉多辭職四個月後。回頭看，他留下的那句話分量很足：**你們將自謀出路。**

一個創造了全世界最流行語言之一的人，在最後關頭沒有安排接班人，沒有設計治理結構，甚至沒給自己留緩衝時間。他做的是把權力交出去，然後相信那群他親手挑進來、一起工作了二三十年的人。

而他自己給這段生涯的定性，落點在"我把它養大了，現在它能照顧自己"，至於"我發明了一門語言"這種說法，從來不是他敘述的重心。

這兩句話放在一起，是一種很少見的創造者姿態。多數強人卡在"我走了它會散"，他的判斷是"我走了它會自己長出憲法，而且會有五六份競爭方案，這很健康"。

## 如果你只記三條

- **別從零設計，先攢品味。**吉多造 Python 時三十五六歲，寫過解析器、參與過 ABC 實現、跟設計者吵了幾年架。他做的第一件事是列出自己喜歡的特性，然後從各語言裡借。17歲造不出好語言，跟聰明程度無關，問題在用過的語言還不夠多，不知道自己討厭什麼。
- **砍
- 砍掉讓你沉迷的部分。**Lex 從 C++ 換到 Python 之後效率明顯提升，原因跟語法長短沒什麼關係。C++ 讓他把時間花在構建優雅的模板結構上，完成任務本身反而被擠到了後面。評估一門工具時問一句：它讓我的時間有多少花在"手藝表演"上，多少花在把事情做完上？
- **先分清是哪一類問題，再決定用什麼標準驗收。**軟體 1.0 追求可證明的正確性，這個理想早就被大多數團隊放棄了；軟體 2.0 只能追求統計意義上的可靠，99.9% 有效，但說不清失敗邊界在哪。把神經網路的產出當成"演算法"來驗收，等於把兩套完全不同的工程契約混成一談。做技術決策之前先問一句：這個模組我能給出保證，還是隻能給出機率？答案不同，測試策略、釋出節奏、責任劃分全都不一樣。
