01
上世紀90年代中期,正在麻省理工讀碩士的吉姆來到了俄勒岡州的阿什蘭,這里以莎士比亞戲劇節聞名于世。
當吉姆在一個劇院后面的公園里玩雜耍時,遇到了來自施樂PARC的一個科學家帕維爾·柯蒂斯,帕維爾也想加入,玩一個雙人的雜耍。
![]()
吉姆欣然同意,兩人愉快地玩了起來。
兩人一邊玩兒一邊閑聊,帕維爾告訴吉姆他發現了一個新的編程語言:Python。
![]()
用Python寫程序特別清晰,易懂,簡直就是可以執行的偽代碼!帕維爾他們這些搞科學研究的簡直太喜歡這一點了!
吉姆默默地把Python記在了心里。
回到MIT,吉姆開始寫自己的碩士論文,論文是關于超導體和半導體相關的領域,需要大量的實驗,然后用Matlab對數據進行處理,和理論模型進行對比。
![]()
吉姆發現,Matlab在數值分析方面強大得嚇人,但在其他任務上糟糕透頂。
他費了九牛二虎之力,拼湊出了混合著C、Python、Matlab的代碼,終于完成了論文。
一般人也就到此為止了,但是吉姆不一樣,他開始琢磨起來:Python這么好用,如果能具備像Matlab那樣的數值分析能力就好了!
這樣大家做科研寫論文就會非常方便!
吉姆研究了一下,發現了Python的另外一個重要特點:可以和C/C++緊密集成。
Python對外提供了一個清晰的 C API,在C代碼中可以輕松調用 Python 函數,訪問Python的對象。
所以對于一些性能關鍵的函數(矩陣乘法、哈希、加密等),完全可以用C語言來實現,這對于科學計算來說非常友好。
于是,吉姆決定寫一個Python擴展,在保留Python作為通用編程語言的同時,又具備像Matlab那樣數值分析的能力。
很快,這個叫Numeric的擴展就新鮮出爐了,Numeric也是第一個用于科學計算的Python庫。
圍繞 Numeric ,一個非常活躍的科學家和工程師社區開始形成,他們開始用Python+Numeric進行科學計算,并且基于Numeric開發了SciPy,提供了更高級的科學計算功能,比如優化、積分、信號處理、線性代數、統計等。
馬里蘭州的一個空間望遠鏡科學研究所為了處理大規模的數據,開發了numarray 軟件包,相比Numeric ,numarray在處理大型數組時速度更快(但是在處理小型數組時更慢)。
2005年,Travis Oliphant將numarray的功能移植到了Numeric上,推出了大名鼎鼎的NumPy。
![]()
02
注意,Numeric出生于1995年,這一年也發生了幾件大事:
1.Sun 公司發明了Java
2.松本行弘推出了Ruby
3.網景的布蘭登用10天設計了JavaScript。
而C#、Go等語言要等到21世紀才會出現。
換句話說,Python在科學計算領域搶得了重要的先發優勢!
但是,Python卻丟失了一個更大的機會:互聯網。
1995~2005這十年,互聯網狂飆突進,Java通過J2EE統治了企業級應用開發,然后不斷向其他領域進軍,成為第一大編程語言。
在瀏覽器端,在GMail,Google Maps的助推下,JavaScript成為無可爭議的老大。
Ruby也依靠Ruby on Rails爆火,在Web2.0應用開發中捕獲了大量程序員的芳心。
Python依然在自動化腳本、運維、科學計算等領域默默耕耘,雖然也有Django、Flask這樣的框架,但是使用Python開發Web應用的人很少。
Python抬眼望去,Java、Ruby、JavaScript高高在上,如日中天,自己顯得非常落寞。
好在Python并沒有等多久,人工智能的浪潮就來了。
在科學計算和數值分析領域,沒有一個編程語言能像Python那樣擁有如此完備的生態,Python積累多年的優勢終于釋放了。
- NumPy、Pandas → 數據處理
- Scikit-learn → 傳統機器學習
- Matplotlib、Seaborn → 可視化
- TensorFlow、PyTorch → 深度學習
這些庫幾乎成了AI研究的“標準工具箱”,被各個高校,研究機構,實驗室廣泛使用。
假設你是一個研究生,你進實驗室的時候,你的師兄丟給你幾萬行沒有注釋的代碼,是使用Python的NumPy/SciPy做數值分析, 雖然你很討厭Python的語法,但是你會用你最喜歡的語言如Java/Ruby來重寫它們嗎?
大概率不會吧。
先發的優勢讓Python壟斷了數據科學領域,其他語言想替代Python,真正的門檻不在于 Python 語法,而在于“復制這個龐大的、久經考驗的底層科學計算生態系統”
而這個生態系統的起點就是公園的那次偶遇,帕維爾向吉姆介紹Python的那一刻。
如果在另外一個平行時空,帕維爾和吉姆在公園偶遇,帕維爾向吉姆介紹了Java、JavaScript、Ruby,吉姆會用它們去做數值分析嗎?
大概率不會,因為這三門語言無法同時滿足:1.清晰易懂 2.和C/C++緊密集成。
03
最后再來提一下吉姆,他完成了Python擴展Numeric , 把維護的工作交給了其他人,揮一揮衣袖,不帶走一片云彩。
在對Numeric做性能測試的時候,Jim比較了Python和其他很多語言, 他震驚地發現Java在一些簡單的數值運算上居然和C語言一樣快!于是他開始了一項工作,把Python移植到JVM, 這就是Jython。
后來他也加入了施樂PARC,在那里他又參與設計了著名的AOP庫AspectJ, 掀起了面向切面編程的熱潮,尤其在Spring中大行其道。
2004加入微軟后,他又把Python移植到了.NET平臺,即IronPython。
這四項工作,完成任意一項,都足以在軟件發展史上寫下自己的名字,而Jim居然都完成了,真乃奇人也!
如今吉姆興趣大變,他把注意力移到了一個叫做布料模擬器的研究上,玩得不亦樂乎:
![]()
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.