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