為什么Python贏了,別的語言都干嘛去了?
人工智能時代,為什么Python大放異彩,別的語言都干嘛去了?
為什么不是使用者眾多的Java?也許是Java啰里啰唆,不如Python那么簡潔?
為什么不是Ruby? 和Python一樣簡潔,但是更加優雅。
為什么不是微軟大力支持的C#?
為什么不是C++? 嗯, 其實很多AI核心庫如TensorFlow就是C++寫的, Python更像個“殼”,但是別的語言怎么沒有成為“殼”呢?
先把這個疑問放下,看一個故事。
1
上個世紀90年代,一個叫Jim Hugunin的小伙子在俄勒岡州阿什蘭市的一個公園里玩雜耍,這時候他遇到了施樂PARC的科學家Pavel Curtis, Pavel告訴Jim,有一門叫做Python的語言,非常的酷,用Python編程就像用自然語言一樣,Python就像是可執行的偽代碼,當程序員想快速地分享想法時,使用Python最合適不過了。
這些話應該在Jim的腦海中扎下了根。
1995年,當Jim Hugunin 正在麻省理工學院和他的碩士論文“搏斗”時,他廣泛地使用了Matlab,因為在那篇論文中,他需要對實驗結果進行數據分析,和理論值比較。
Matlab在數據分析領域表現非常棒,但是一旦超出這個領域,就糟糕透頂。為了克服Matlab的缺點,Jim將C語言,Python和Matlab拼湊在一起,終于完成了論文。
Jim 受夠了Matlab,完成論文后,他就開始寫一個Python的擴展,以便像Matlab那樣自然地支持數據分析,同時又不犧牲Python作為一個通用編程語言的強大的功能。
這個Python擴展就是Numeric ,也就是大名鼎鼎的NumPy的前身。
NumPy,以及后來發展起來的SciPy、Matplotlab等, 共同構成了AI時代做應用編程的基礎。
Jim在當時為什么選擇了Python,而不是其他語言來開發數據分析的擴展呢? 這是一種巧合嗎?
首要的原因就是喜歡,“Python編程就像用自然語言一樣”。
其次當時可以選擇的語言也不多,C,C++這種“復雜”的語言肯定不合適, Java, JavaScript才剛剛誕生,Perl擅長的是字符串處理,Ruby是日本人發明的,估計影響力還在日本國內,Matz本人又忽視了社區和類庫的發展。
2
可是,NumPy是Python的擴展,難道別的語言如Ruby,Java就不能也寫個類似的類庫,和Python競爭嗎?
NumPy, SciPy被開發出來的時候,普通的做應用開發的程序員很少使用,它的主要用戶是大學的研究人員、學者和數據科學家,這些人并不是專業的開發人員,他們也不想成為專業的開發人員,他們只要能利用工具解決問題就行了。
由于Python簡潔易懂,并且有NumPy這樣的類庫,在數據分析和科學計算領域,積累起了大量的Python代碼。
假設你是一個研究生,你進實驗室的時候,你的師兄丟給你幾萬行沒有注釋的代碼,是使用Python的NumPy/SciPy做數值分析, 雖然你很討厭Python的語法,但是你會用你最喜歡的語言如Java/Ruby來重寫它們嗎?大概率不會吧。
先發優勢讓Python鎖定了數據科學領域的開發,當AI爆發的時候,Python扶搖直上,就吃盡了紅利,壟斷了市場,別的語言難以和它競爭。
3
總結一下,Python的簡潔易懂再加上早期在數據科學領域的先發優勢,讓它在AI時代獲勝,有偶然也有必然。
最后再來提一下Jim Hugunin,他完成了Python擴展Numeric , 把維護的工作交給了其他人,揮一揮衣袖,不帶走一片云彩。
在對Numeric做性能測試的時候,Jim比較了Python和其他很多語言, 他震驚地發現Java在一些簡單的數值運算上居然和C語言一樣快!于是他開始了一項工作,把Python移植到JVM, 這就是Jython。
后來他也加入了施樂PARC,在那里他又參與設計了著名的AOP庫AspectJ, 掀起了面向切面編程的熱潮。
2004加入微軟后,他又把Python移植到了.NET平臺,即IronPython。
這四項工作,完成任意一項,都足以在軟件發展史上寫下自己的名字,而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專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】