為什么Python贏了,別的語(yǔ)言都干嘛去了?
人工智能時(shí)代,為什么Python大放異彩,別的語(yǔ)言都干嘛去了?
為什么不是使用者眾多的Java?也許是Java啰里啰唆,不如Python那么簡(jiǎn)潔?
為什么不是Ruby? 和Python一樣簡(jiǎn)潔,但是更加優(yōu)雅。
為什么不是微軟大力支持的C#?
為什么不是C++? 嗯, 其實(shí)很多AI核心庫(kù)如TensorFlow就是C++寫(xiě)的, Python更像個(gè)“殼”,但是別的語(yǔ)言怎么沒(méi)有成為“殼”呢?
先把這個(gè)疑問(wèn)放下,看一個(gè)故事。
1
上個(gè)世紀(jì)90年代,一個(gè)叫Jim Hugunin的小伙子在俄勒岡州阿什蘭市的一個(gè)公園里玩雜耍,這時(shí)候他遇到了施樂(lè)PARC的科學(xué)家Pavel Curtis, Pavel告訴Jim,有一門(mén)叫做Python的語(yǔ)言,非常的酷,用Python編程就像用自然語(yǔ)言一樣,Python就像是可執(zhí)行的偽代碼,當(dāng)程序員想快速地分享想法時(shí),使用Python最合適不過(guò)了。
這些話應(yīng)該在Jim的腦海中扎下了根。
1995年,當(dāng)Jim Hugunin 正在麻省理工學(xué)院和他的碩士論文“搏斗”時(shí),他廣泛地使用了Matlab,因?yàn)樵谀瞧撐闹?,他需要?duì)實(shí)驗(yàn)結(jié)果進(jìn)行數(shù)據(jù)分析,和理論值比較。
Matlab在數(shù)據(jù)分析領(lǐng)域表現(xiàn)非常棒,但是一旦超出這個(gè)領(lǐng)域,就糟糕透頂。為了克服Matlab的缺點(diǎn),Jim將C語(yǔ)言,Python和Matlab拼湊在一起,終于完成了論文。
Jim 受夠了Matlab,完成論文后,他就開(kāi)始寫(xiě)一個(gè)Python的擴(kuò)展,以便像Matlab那樣自然地支持?jǐn)?shù)據(jù)分析,同時(shí)又不犧牲Python作為一個(gè)通用編程語(yǔ)言的強(qiáng)大的功能。
這個(gè)Python擴(kuò)展就是Numeric ,也就是大名鼎鼎的NumPy的前身。
NumPy,以及后來(lái)發(fā)展起來(lái)的SciPy、Matplotlab等, 共同構(gòu)成了AI時(shí)代做應(yīng)用編程的基礎(chǔ)。
Jim在當(dāng)時(shí)為什么選擇了Python,而不是其他語(yǔ)言來(lái)開(kāi)發(fā)數(shù)據(jù)分析的擴(kuò)展呢? 這是一種巧合嗎?
首要的原因就是喜歡,“Python編程就像用自然語(yǔ)言一樣”。
其次當(dāng)時(shí)可以選擇的語(yǔ)言也不多,C,C++這種“復(fù)雜”的語(yǔ)言肯定不合適, Java, JavaScript才剛剛誕生,Perl擅長(zhǎng)的是字符串處理,Ruby是日本人發(fā)明的,估計(jì)影響力還在日本國(guó)內(nèi),Matz本人又忽視了社區(qū)和類(lèi)庫(kù)的發(fā)展。
2
可是,NumPy是Python的擴(kuò)展,難道別的語(yǔ)言如Ruby,Java就不能也寫(xiě)個(gè)類(lèi)似的類(lèi)庫(kù),和Python競(jìng)爭(zhēng)嗎?
NumPy, SciPy被開(kāi)發(fā)出來(lái)的時(shí)候,普通的做應(yīng)用開(kāi)發(fā)的程序員很少使用,它的主要用戶(hù)是大學(xué)的研究人員、學(xué)者和數(shù)據(jù)科學(xué)家,這些人并不是專(zhuān)業(yè)的開(kāi)發(fā)人員,他們也不想成為專(zhuān)業(yè)的開(kāi)發(fā)人員,他們只要能利用工具解決問(wèn)題就行了。
由于Python簡(jiǎn)潔易懂,并且有NumPy這樣的類(lèi)庫(kù),在數(shù)據(jù)分析和科學(xué)計(jì)算領(lǐng)域,積累起了大量的Python代碼。
假設(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)域的開(kāi)發(fā),當(dāng)AI爆發(fā)的時(shí)候,Python扶搖直上,就吃盡了紅利,壟斷了市場(chǎng),別的語(yǔ)言難以和它競(jìng)爭(zhēng)。
3
總結(jié)一下,Python的簡(jiǎn)潔易懂再加上早期在數(shù)據(jù)科學(xué)領(lǐng)域的先發(fā)優(yōu)勢(shì),讓它在AI時(shí)代獲勝,有偶然也有必然。
最后再來(lái)提一下Jim Hugunin,他完成了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, 掀起了面向切面編程的熱潮。
2004加入微軟后,他又把Python移植到了.NET平臺(tái),即IronPython。
這四項(xiàng)工作,完成任意一項(xiàng),都足以在軟件發(fā)展史上寫(xiě)下自己的名字,而Jim居然都完成了,真乃奇人也!
參考資料:
參考資料:
http://hugunin.net/story_of_jython.html
http://hugunin.net/papers/hugunin95numpy.html
https://en.wikipedia.org/wiki/Jim_Hugunin
https://www.revolvy.com/page/Jim-Hugunin
https://en.wikipedia.org/wiki/NumPy
https://www.quora.com/Why-didnt-Ruby-become-popular-for-data-science-like-Python-did
【本文為51CTO專(zhuān)欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】