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

EP 2242021-09-233:05:24

Oliphant 談 NumPy、SciPy 與開源怎麼活下去

Travis Oliphant

NumPy、SciPy、Anaconda 的創造者回顧從研究生到創業者的路,也談他這些年想方設法讓開源工具養活自己的種種嘗試。

Travis Oliphant: NumPy, SciPy, Anaconda, Python & Scientific Programming | Lex Fridman Podcast #224在 YouTube 看 ↗

重點6 條

  1. 從 BASIC 到 Numeric:Oliphant 十歲玩 TI Sinclair 開始寫程式,1997 年在梅約診所念生醫工程博士班時,因為一個叫 Numeric 的陣列函式庫而留在 Python。
  2. SciPy 從補洞開始:他發現 Python 沒有微分方程求解器、沒有積分器,於是把 Fortran 的 ODEPACK、QUADPACK 包成 Python 可以呼叫的工具,一步步湊成 SciPy。
  3. 拿教職風險換來的合併:Numeric 與哈伯望遠鏡團隊主導的 Numarray 分裂多年、資料互不相容,2005 年他趁一學期沒課的空檔,動手把兩邊合併寫成 NumPy。
  4. NumPy 從沒被真正資助過:他靠自費出版《Guide to NumPy》、接顧問案與 DARPA 補助養活開發,直到創立 QuantSight Labs 才第一次真的有錢付人維護 NumPy 和 SciPy。
  5. Conda 是被逼出來的:2012 年在 Google 總部,他跟 Guido van Rossum 抱怨 Python 打包問題,Guido 說「你們自己去解決」,於是有了跨作業系統、跨語言的 Conda。
  6. 開源要活下去,先想清楚錢從哪來:從 Enthought、Anaconda 到 QuantSight、OpenTeams,他反覆嘗試把顧問收入、創投資金導回開源專案本身,這條路走了二十多年還在走。

時間軸26 段

01 00:59
童年程式啟蒙

四年級用 Atari BASIC 寫迴圈,也學過 GOTO;十歲家裡添購 TI Sinclair 加裝擴充卡才真正能寫程式,存檔還得靠錄音帶轉換聲音訊號。

02 05:08
語言決定你怎麼想

聊到西班牙語、俄語怎麼形塑思維方式,也談杜斯妥也夫斯基的作品為什麼難翻,因為語言本身承載著文化的重量與音樂性。

03 09:19
與 Python 的初次交手

在梅約診所念生醫工程博士班時試過 MATLAB、Perl、Yorick,最後留在 Python 是因為一個叫 Numeric 的陣列函式庫補上了其他語言沒有的東西;跟 Perl 相比,Python 不用練成專家腦袋也能寫得懂,他認為拿掉多餘符號讓人可以直接用「英語語言中樞」思考程式碼。

04 17:46
APL 與 MATLAB 的傳統

APL 靠專屬鍵盤打出符號、逼人用維度思考,只是太難普及;NumPy 是這套 array 式思維務實傳承下來的結果。

05 23:05
SciPy 的起點

讀博班時發現 Python 沒有微分方程求解器、沒有積分器可以直接呼叫,於是開始在郵件論壇上動手補,這是他口中「真正的寶貝」專案。

06 26:12
從 Fortran 包裝到軟體怎麼發布

把 ODEPACK、QUADPACK 這些 Fortran 函式庫包成 Python 可以呼叫的模組;當年發布軟體就是把壓縮檔放上一個簡陋網頁,遠不是現在的套件生態。

07 31:04
開源的黏著力

被 Linux 精神感染,第一次收到別人主動寄來修好的 Makefile 讓他形容自己「上癮」;99 年一位高中生幫他做出 Windows 安裝檔,他才意識到 binary 安裝檔才是真正打開大門的關鍵。

08 35:04
SciPy 品牌的由來與正式發布

Eric Jones 與 Travis Vaught 找他一起在奧斯汀創業,把他的 multi-pack 加上 Pearu Peterson 的 f2py 等工具合併成一個安裝包,取名 SciPy;2001 年正式發布時他也選擇留在學界拿終身教職,繪圖的野心後來由另立門戶的 John Hunter 做出 Matplotlib 實現,SciPy 研討會也是這年開始辦。

09 40:37
一頭栽進經濟學

讀了 Stallman 的文章卻聽不下去對方「不要生小孩」的建議,於是一頭栽進經濟學,讀到馮米塞斯講價格訊號如何讓資源分配運作,這段閱讀後來變成他對創業與開源關係的核心信念。

10 47:36
SciPy 的設計哲學

目標是讓科學家不必多花腦力想程式,函式命名要短而達意、文件要做得夠深;這些原則因為沒有預算,花了近十年才真正到位。

11 51:26
Numeric 與 Numarray 的分裂

哈伯太空望遠鏡的影像處理團隊需要更完整的型別與 record array,另外做出 Numarray,結果兩邊資料格式互不相容,逼出後來合併的念頭。

12 56:01
動筆寫 NumPy

2005 年剛好一學期沒課,他決定把 Numeric 和 Numarray 合併寫成 NumPy,明知系上不會欣賞這種「不務正業」還是動手做了;他也坦言這段過程一度「玩過頭」,型別設計是他事後最想重來的地方。

13 1:03:26
管家心態

他強調自己不居功、也提醒大家記得誰做了什麼;John Hunter 做出 Matplotlib、Fernando Perez 做出 IPython、Wes McKinney 在 NumPy 的基礎上做出 pandas,都是這種互相成就的例子。

14 1:07:00
終身教職卡關,決定離開學界

2006 年申請終身教職被要求「兩年後再來一次」;加上開源分裂帶來的挫折與對創業的興趣升溫,他選擇離開 BYU,加入 Enthought。

15 1:11:42
寫書養活研究生

他自訂規則賣《Guide to NumPy》:湊到 25 萬美元或滿五年就免費開放,三年賣了 9 萬美元用來付研究生薪水;這本書也讓後來 DARPA 的人記住他的名字,促成了 Anaconda 的第一筆政府補助。

16 1:18:12
回頭看 NumPy 的遺憾

2012 年他寫信告別 NumPy 郵件論壇,回顧最大的遺憾是資料型別(dtype)做成了 Python 1 時代的形式,導致後來很難讓使用者自己擴充新型別,也連帶讓 NumPy 一直沒辦法原生支援 GPU。

17 1:22:07
TensorFlow、PyTorch 想模仿 NumPy

Google 與 Facebook 一開始都沒把 Python 介面當一回事,事後才臨時「掛」上去,他形容 TensorFlow 早期的 Python API「慘不忍睹」;現在他在推 data-apis.org,想統一介面而不是統一實作。

18 1:29:31
從 Guido 身上學到的事

Guido 願意傾聽科學社群的需求,但矩陣乘法運算子還是晚了十年才加進語言,memory view 物件的底層也是他自己動手補進 Python 的;後來聊到 Guido 因 walrus operator 之爭辭去「仁慈獨裁者」的位子,他認為社群媒體會放大負面情緒,遇到不完整的資訊應該先假設對方是善意的。

19 1:37:34
Python 2 到 3:為什麼拖了十幾年

他認為問題出在 3.0 到 3.2 沒有足夠吸引人的新功能,直到 3.3、3.4 才真的有東西讓人想升級;而且這整個過程沒人專職拿錢在做,慣性讓人不想搬家。

20 1:44:27
Numba 的誕生

他一直想要一個能把純量函式編譯成陣列運算的工具,2012 年靠 LLVM 寫出第一版 Numba,把 Python 位元碼直接轉成機器碼;後來又做出能在 GPU 上跑、快上千倍的版本。

21 2:06:06
創立 Anaconda 與 Conda

跟 Peter Wang 一起創業,目標是讓資料分析能規模化、也不讓 Python 被網頁世界忽略;2012 年在 Google 總部聽到 Guido 說「打包問題你們自己去解決」,就動手做出跨作業系統、跨語言的 Conda。

22 2:25:17
QuantSight 與 OpenTeams

QuantSight 分成顧問、非營利研究室 QuantSight Labs 與創投基金三塊,顧問收入與基金的績效分潤都回頭資助開源專案;衍生出的 OpenTeams 想當企業採購與開源社群之間的媒合層。

23 2:37:07
GitHub 收購與開發者行銷

他認為微軟買下 GitHub 是想證明自己在乎開發者;也吐槽多數企業的行銷部門只在複製過去做過的事,真正該做的是把行銷預算拿一部分直接資助開源專案。

24 2:47:11
什麼是好的工程師

他認為好奇心排第一位,其次是把問題拆小、別想一次全部解決;也提醒別急著追熱潮,敏捷、物件導向這類方法論通常都只對了一部分。

25 2:58:02
找人的心法

他覺得最好的方法是做一個開源專案,把貢獻的人找進來;也觀察到開源貢獻者跟產品導向的人往往是兩種不同性格,團隊需要同時擁有這兩種能量。

26 3:01:59
給年輕人的建議

他認為第一步是找到願意用心去愛、去承諾的人,先有這個錨點再談其他;也建議別急著在高中就把自己定型,遇到不喜歡的事,該做的是動手打造更好的替代方案,而不是去攻擊它。