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

EP 3412022-11-263:15:51

Guido 談 Python 的過去、現在與未來

Guido van Rossum

Python 之父暢談縮排哲學、3.11 效能提升的訣竅、型別提示之爭,以及 GIL 與 Python 4.0 的未來抉擇。

Guido van Rossum: Python and the Future of Programming | Lex Fridman Podcast #341在 YouTube 看 ↗

重點6 條

  1. 縮排是刻意的取捨,不是巧合:Guido 解釋 Python 用縮排定義區塊是為了讓初學者少背一項語法規則,但也坦言背後真正的理由更多是歷史慣性,現在已經回不去了。
  2. 3.11 靠「賭一把」變快:CPython 3.11 的效能提升不是靠 JIT,而是讓直譯器學會賭「這行程式碼上次加的是整數,這次大概還是」,猜對就抄捷徑執行,猜錯才退回原本的萬用邏輯。
  3. 型別提示是選配,檢查器各家各做一套:PEP 484 只是讓工具讀懂型別的語法,真正做檢查的是外部的靜態型別檢查器,Google、Facebook、微軟後來都各自做了一套,誰也沒有統一。
  4. GIL 是折衷,不是失誤:GIL 讓 Python 在單核年代能安全支援多執行緒,到了多核硬體才變成瓶頸;Guido 仍認為它是「沒有鎖」跟「處處上鎖」之間蠻剛好的中間點,即使 Facebook 已經做出拿掉 GIL 的分支版本。
  5. Python 稱霸機器學習,靠的是先卡位:哈伯太空望遠鏡團隊這類科學社群很早就選了 Python 補上陣列運算的洞,等到 TensorFlow、PyTorch 出現時,使用者早就在那裡了;MATLAB 則因為沒有開源文化錯過這波。
  6. 卸任仁慈獨裁者之後,壓力少了、也更能專心寫程式:Guido 坦言長年當 BDFL 承受著說不清楚原因的壓力,交棒給 steering council 之後,他反而能專注在型別提示與非同步 I/O 這些自己真正想做的事。

時間軸24 段

01 00:39
開場破題

用釣客與駭客同在一艘船上的比喻,破題「什麼是程式語言」,帶出 Python 3.11 號稱快 10 到 60% 的話題。

02 06:04
PEP 8 與可讀性

解釋程式碼可讀性為什麼重要:軟體是團隊的社交活動,不是獨自一人的創作;也談縮排四個空白怎麼從 2 到 12 空白的亂象裡變成折衷慣例。

03 15:53
縮排 vs 大括號

認真回答「如果能重來,Python 還會選縮排嗎」的思想實驗:縮排省下一對括號,也讓初學者少背一項語法規則,但語言一旦定案就再也換不了。

04 21:38
美元符號的歷史

從早期 shell script 沒有變數與參數的年代講起,解釋 `$` 是怎麼被發明來區分檔名跟變數名稱的。

05 28:39
bug 統計嚇人

引用一份行銷報告:平均每千行程式碼有 70 個 bug,75% 的開發時間花在除錯;兩人一起吐槽這種數字的可信度。

06 35:54
打字與鍵盤習慣

自曝從沒學會十指打字,靠 Kinesis 鍵盤把退格鍵挪到拇指下方,省掉一般鍵盤要伸長小指去按退格的痛苦;也聊到 ActionScript、Flash 這種曾經投資後來報廢的技能。

07 44:55
轉向 Python 的掙扎

Lex 談自己在機器人領域從 C++ 全面轉向 Python 的心路歷程,兩人一起討論怎麼判斷一個程式語言值不值得長期投資。

08 53:31
CPython 怎麼變快

解釋 Python 其實有編譯器,只是編譯成給直譯器讀的位元碼而非機器碼;用質數判斷演算法示範「簡單」與「效能」之間的取捨。

09 1:05:49
猜對就抄捷徑

3.11 加速的核心技巧:直譯器賭「這行程式碼上次加的是整數,這次大概還是」,猜對就抄捷徑,猜錯才退回萬用版本。

10 1:18:31
型別提示是什麼

型別提示只是可選的「子語言」,本身不影響直譯器執行,真正檢查型別對不對的是另外跑的靜態型別檢查器,跑起來比較像 linter。

11 1:23:57
MyPy 的身世

MyPy 是最早的靜態型別檢查器,作者 Jukka Lehtosalo 原本自創一套跟 Python 不相容的語法,2013 年跟 Guido 在研討會上談出折衷寫法,才變成 PEP 484。

12 1:33:48
型別檢查器混戰

MyPy 由一群維護者的小型開源專案撐著,Google、Facebook、微軟後來都嫌它不夠快、覺得值得投資,索性各自做了一套自己的靜態型別檢查器。

13 1:45:10
編輯器的信仰之戰

從 80 年代初用 vi 一路聊到當了近四十年的 Emacs 使用者,2013 到 2018 年間也短暫嘗試過 PyCharm;他認為 VS Code 的擴充架構其實是 Emacs 精神的延續。

14 1:55:13
平行與並行入門

用「只有一張桌子的餐廳」與「多釣幾根釣竿」的比喻解釋平行、並行與非同步的差別,也用「共用 mermaid、merman 變數」的例子示範同步機制為什麼容易出錯。

15 2:04:01
AsyncIO 的身世

回顧 AsyncIO 從標準庫裡兩個不夠用的舊模組,一路變成史上最大 Python 增強提案的過程;也解釋當初為什麼選擇「任務」而非回呼(callback)的寫法。

16 2:12:57
認識 GIL

GIL 是 Python 早期為了讓直譯器在多執行緒下安全運作想出的折衷辦法,在單核年代沒問題,多核當道後才變成瓶頸。

17 2:22:59
沒有 GIL 的未來

Facebook 一位工程師做出拿掉 GIL 的 CPython 分支;Guido 設想如果真有 Python 4.0,會是先讓擴充套件開發者花好幾個版本適應、不破壞相容性的漸進轉換。

18 2:31:56
標準庫的大掃除

自認寫 Python 工具時很少依賴第三方套件;也解釋標準庫近年常做的「春季大掃除」:把過時多年沒人碰的模組慢慢移除。

19 2:34:58
為何稱霸機器學習

從哈伯太空望遠鏡團隊、把 Fortran 函式庫包給高階語言用的「computational steering」講起,也點出 MATLAB 沒有開源文化才是它敗給 Python 的關鍵。

20 2:44:31
卸任 BDFL 之後

坦言自己在仁慈獨裁者位子上待太久,長期承受說不清原因的壓力;但也認為那個角色替社群帶來清楚一致的方向感。

21 2:48:15
三間公司的文化差異

Dropbox 每年一次大改組讓人吃不消,但產品本身一直很穩;也聊到自己從沒學好 Excel 這件「人生一大憾事」。

22 2:54:37
領導力與創業抉擇

認為 Satya Nadella 帶微軟從敵視開源轉向擁抱開源,靠的是個人魅力說服整個領導層;也聊到工程師該選大公司安穩,還是自己出去創業。

23 3:03:01
Copilot 帶來的改變

每天都在用 GitHub Copilot,認為它省下的是打字的功夫而不是思考的功夫,也提醒不該拿它做自己不懂原理的事。

24 3:06:03
Python 與文明的未來

猜測 Python 終將變成沒人注意到的底層基礎建設;也用 DNA 到細胞、個人到文明的層層抽象,收尾這場橫跨技術與哲學的對談。