Python 爲什麼能坐穩 AI 時代頭牌語言


做者 | 子白python


誰會成爲AI 和大數據時代的第一開發語言?這本已經是一個不須要爭論的問題。若是說三年前,Matlab、Scala、R、Java 和 Python還各有機會,局面尚且不清楚,那麼三年以後,趨勢已經很是明確了,特別是 Facebook 開源了 PyTorch 以後,Python 做爲 AI 時代頭牌語言的位置基本確立,將來的懸念僅僅是誰能坐穩第二把交椅。
程序員

不過聲音市場上還有一些雜音。最近一個有意學習數據科學的姑娘跟我說,她的一個朋友建議她從 Java 入手,由於 Hadoop 等大數據基礎設施是用 Java 寫的。無獨有偶,上個月 IBM developerWorks 發表的一篇我的博客(算法

https://www.ibm.com/developerworks/community/blogs/jfp/entry/What_Language_Is_Best_For_Machine_Learning_And_Data_Science?lang=en
),用職位招聘網站indeed 上的數據作了一個統計。這篇文章自己算得上是客觀公正,實事求是,但傳到國內來,就被一些評論者曲解了本意,說 Python 的優點地位還沒有確立,鹿死誰手還沒有可知,各位學習者不可盲目跟風啊,千萬要多方押寶,繼續撒胡椒麪不要停。

在這裏我要明確表個態,對於但願加入到 AI 和大數據行業的開發人員來講,把雞蛋放在 Python 這個籃子裏不可是安全的,並且是必須的。或者換個方式說,若是你未來想在這個行業混,什麼都不用想,先閉着眼睛把 Python 學會了。固然,Python不是沒有它的問題和短處,你能夠也應該有另一種甚至幾種語言與 Python 造成搭配,可是Python 將坐穩數據分析和 AI 第一語言的位置,這一點毫無疑問。編程


我甚至認爲,因爲 Python 坐穩了這個位置,因爲這個行業將來須要大批的從業者,更因爲Python正在迅速成爲全球大中小學編程入門課程的首選教學語言,這種開源動態腳本語言很是有機會在不久的未來成爲第一種真正意義上的編程世界語。後端


討論編程語言的優劣興衰一直被認爲是一個口水戰話題,被資深人士所不屑。可是我認爲此次 Python 的上位是一件大事。請設想一下,若是十五年以後,全部40歲如下的知識工做者,無分中外,從醫生到建築工程師,從辦公室祕書到電影導演,從做曲家到銷售,都能使用同一種編程語言進行基本的數據處理,調用雲上的人工智能 API,操縱智能機器人,進而相互溝通想法,那麼這一廣泛編程的協做網絡,其意義將遠遠超越任何編程語言之爭。目前看來,Python 最有但願擔任這個角色。安全

Python 的勝出使人意外,由於它缺點很明顯。網絡

  • 它語法上自成一派,讓不少老手感到不習慣。併發

  • 「裸」 Python 的速度很慢,在不一樣的任務上比C 語言大約慢數十倍到數千倍不等。機器學習

  • 因爲全局解釋器鎖(GIL)的限制,單個Python 程序沒法在多核上併發執行;Python 2 和 Python 3 兩個版本長期並行,不少模塊須要同時維護兩個不一樣的版本,給開發者選擇帶來了不少沒必要要的混亂和麻煩。編程語言


因爲不受任何一家公司的控制,一直以來也沒有一個技術巨頭肯死挺 Python ,因此相對於 Python 的應用之普遍,其核心基礎設施所獲得的投入和支持實際上是很是薄弱的。直到今天,26歲的Python 都尚未一個官方標配的 JIT 編譯器,相比之下, Java 語言在其發佈以後頭三年內就得到了標配 JIT 。


另外一個事情更可以說明問題。Python 的 GIL 核心代碼 1992 年由該語言創造者 Guido van Rossum 編寫,此後十八年時間沒有一我的對這段相當重要的代碼改動過一個字節。十八年!直到2010年,Antoine Pitrou纔對 GIL 進行了近二十年來的第一次改進,並且還僅在 Python 3.x 版本中使用。這也就是說,今天使用 Python 2.7 的大多數開發者,他們所寫的每一段程序仍然被26年前的一段代碼緊緊制約着。

說到 Python 的不足,我就想起發生在本身身上的一段小小的軼事。我多年前曾經在一篇文章裏聲明本身看好 Python,而不看好 Ruby。大概兩年多之前,有一個網友在微博裏找到我,對我大加責備,說由於當年讀了我這篇文章,誤聽讒言,鬼迷心竅,一直專攻 Python,而始終對 Ruby 敬而遠之。結果他Python 當然精通,但最近一學 Ruby,如此美好,如此甜蜜,喜不自勝,反過來憤然意識到,當年徹底被我誤導了,在最美的年華錯過了最美的編程語言。我當時沒有更多的與他爭辯,也不知道他今天是否已經從Python後端、大數據分析、機器學習和 AI 工程師成功轉型爲Rails快速開發高手。我只是以爲,想要真正認識一件事物的價值,確實也不是一件容易的事情。

Python 就是這樣一個帶着各類毛病衝到第一方陣的賽車手,但即使到了幾年前,也沒有多少人相信它有機會摘取桂冠,不少人認爲 Java 的位置不可動搖,還有人說一切程序都將用 JavaScript重寫。但今天咱們再看,Python 已是數據分析和 AI的第一語言,網絡攻防的第一黑客語言,正在成爲編程入門教學的第一語言,雲計算系統管理第一語言。Python 也早就成爲Web 開發、遊戲腳本、計算機視覺、物聯網管理和機器人開發的主流語言之一,隨着 Python 用戶能夠預期的增加,它還有機會在多個領域裏登頂。

並且不要忘了,將來絕大多數的 Python 用戶並非專業的程序員,而是今天還在使用 Excel、PowePoint、SAS、Matlab和視頻編輯器的那些人。


就拿 AI 來講,咱們首先要問一下,AI 的主力人羣在哪裏?若是咱們今天靜態的來談這個話題,你可能會認爲 AI 的主力是研究機構裏的 AI 科學家、擁有博士學位的機器學習專家和算法專家。


但上次我提到李開復的「AI紅利三段論」明確告訴咱們,只要稍微把眼光放長遠一點,日後看三至五年,你會看到整個 AI 產業的從業人口將逐漸造成一個巨大的金字塔結構,上述的 AI 科學家僅僅是頂端的那麼一點點,95% 甚至更多的 AI 技術人員,都將是AI 工程師、應用工程師和AI 工具用戶。


我相信這些人幾乎都將被Python 一網打盡,成爲 Python 陣營的龐大後備軍。這些潛在的 Python 用戶至今仍然在技術圈子以外,但隨着 AI 應用的發展,數百萬之衆的教師、公司職員、工程師、翻譯、編輯、醫生、銷售、管理者和公務員將裹挾着各自領域中的行業知識和數據資源,涌入 Python 和 AI 大潮之中,深入的改變整個 IT,或者說 DT (數據科技)產業的總體格局和麪貌。

爲何 Python 可以後來居上呢?

若是泛泛而論,我很能夠列舉 Python 的一些優勢,好比語言設計簡潔優雅,對程序員友好,開發效率高。但我認爲這不是根本緣由,由於其餘一些語言在這方面表現得並不差。

還有人認爲 Python 的優點在於資源豐富,擁有堅實的數值算法、圖標和數據處理基礎設施,創建了很是良好的生態環境,吸引了大批科學家以及各領域的專家使用,從而把雪球越滾越大。但我以爲這是倒由於果。爲何恰恰是 Python 可以吸引人們使用,創建起這麼好的基礎設施呢?爲何世界上最好的語言 PHP 裏頭就沒有 numpy 、NLTK、sk-learn、pandas 和 PyTorch 這樣級別的庫呢?爲何 JavaScript 極度繁榮以後就搞得各類程序庫層次不齊,一地雞毛,而 Python 的各類程序庫既繁榮又有序,可以保持較高水準呢?

我認爲最根本的緣由只有一點:Python 是衆多主流語言中惟一一個戰略定位明確,並且始終堅持原有戰略定位不動搖的語言


相比之下,太多的語言不斷的用戰術上無原則的勤奮去侵蝕和模糊本身的戰略定位,最終只能等而下之。

Python 的戰略定位是什麼


其實很簡單,就是要作一種簡單、易用但專業、嚴謹的通用組合語言,或者叫膠水語言,讓普通人也可以很容易的入門,把各類基本程序元件拼裝在一塊兒,協調運做。

正是由於堅持這個定位,Python 始終把語言自己的優美一致放在奇技妙招前面,始終把開發者效率放在CPU效率前面,始終把橫向擴張能力放在縱向深潛能力以前。長期堅持這些戰略選擇,爲 Python 帶來了其餘語言可望不可即的豐富生態。


好比說,任何一我的,只要願意學習,能夠在幾天的時間裏學會Python基礎部分,而後幹不少不少事情,這種投入產出比多是其餘任何語言都沒法相比的。再好比說,正是因爲 Python 語言自己慢,因此你們在開發被頻繁使用的核心程序庫時,大量使用 C 語言跟它配合,結果用 Python 開發的真實程序跑起來很是快,由於頗有可能超過 80% 的時間系統執行的代碼是 C 寫的。相反,若是 Python 不服氣,非要在速度上較勁,那麼結果極可能是裸速提升個幾倍,但這樣就沒人有動力爲它開發 C 模塊了,最後的速度遠不如混合模式,並且極可能語言所以會變得更復雜,結果是一個又慢又醜陋的語言。


更重要的是,Python 的包裝能力、可組合性、可嵌入性都很好,能夠把各類複雜性包裝在 Python 模塊裏,暴露出漂亮的接口。


不少時候,一個程序庫自己是用 C/C++ 寫的,但你會發現,直接使用 C 或者 C++ 去調用那個程序庫,從環境配置到接口調用,都很是麻煩,反而隔着一層,用其python 包裝庫更加清爽整潔,又快又漂亮。這些特色到了 AI 領域中,就成了 Python 的強大優點。Python 也藉助 AI 和數據科學,攀爬到了編程語言生態鏈的頂級位置。Python 與 AI綁在一塊兒,對它們來講,不管是電子商務、搜索引擎、社交網絡仍是智能硬件,將來都只是生態鏈下游的數據奶牛、電子神經和執行工具,都將聽命於本身。

對編程語言發展歷史缺少了解的人可能會以爲,Python 的戰略定位是犬儒主義和缺少進取心的。但事實證實,能同時作到簡單而嚴謹、易用而專業,是很難的,而可以堅守膠水語言的定位,更是難上加難。


有的語言,從一開始就是出於學術而非實用的目的,學習曲線過於陡峭,通常人很難接近。有的語言,過於依賴背後金主的商業支持,好的時候風光無限,一旦被打入冷宮,連生存下去都成問題。有的語言,設計的時候有明確的假想場景,要麼是爲了解決大規模併發,要麼是爲了解決矩陣運算,要麼是爲了作網頁渲染模板,一旦離開這個場景,就各類不爽。更多的語言,剛剛取得一點成功,就火燒眉毛的想成爲全能冠軍,在各個方向上拼命的伸展觸角,特別是在加強表達能力和提高性能方面常常過度積極,不惜將核心語言改得面目全非,最後變成誰都沒法掌控的龐然大物。相比之下,Python 是現代編程語言設計和演化當中的一個成功典範。

Python 之因此在戰略定位上如此清晰,戰略堅持上如此堅決,歸根結底是由於其社區構建了一個堪稱典範的決策和治理機制。這個機制以 Guido van Rossum (BDFL,Pythoners 都知道這是什麼意思), DavidBeazley, Raymond Hettinger 等人爲核心,以 PEP 爲組織平臺,民主而有序,集中而開明。只要這個機制自己得以維繫,Python 在可見的將來裏仍將一路平穩上行。

最有可能向 Python 發起挑戰的,固然是Java。Java 的用戶存量大,它自己也是一種戰略定位清晰並且很是堅決的語言。但我並不認爲 Java 有很大的機會,由於它本質上是爲構造大型複雜系統而設計的。什麼是大型複雜系統?就是由人清清楚楚描述和構造出來的系統,其規模和複雜性是外生的,或者說外界賦予的。而 AI 的本質是一個自學習、自組織的系統,其規模和複雜性是一個數學模型在數據的餵養下本身長出來的,是內生的。所以,Java大多數的語言結構對於大數據的處理和 AI 系統的開發顯得使不上勁,你強的東西這裏用不上,這裏須要的東西你作起來又彆扭。而 Python 在數據處理方面的簡潔強悍早就盡人皆知。對比兩個功能相同的 Java 和 Python 機器學習程序,正常人只要看兩眼就能作出判斷,必定是 Python 程序更加清爽痛快。

大概在 2003 或者 2004 年的時候,我買過一本 Python 的書,做者是一位巴西人。他說本身之因此堅決的選擇 Python,是由於他小時候常常夢到將來世界將由一條大蟒蛇(蟒蛇的英文爲python)統治。我當時以爲這哥們好可憐,作個夢都能夢到這麼恐怖的場景。但今天來看,也許他只是像黑客帝國裏的程序員安德森同樣,不當心穿越到將來,而且窺探到了世界的真相。

相關文章
相關標籤/搜索