閱讀632 返回首頁    go Python


Python 為何能坐穩 AI 時代頭牌語言?

誰會成為AI 和大數據時代的第一開發語言?這本已是一個不需要爭論的問題。如果說三年前,Matlab、Scala、R、Java 和 Python還各有機會,局麵尚且不清楚,那麼三年之後,趨勢已經非常明確了,特別是 Facebook 開源了 PyTorch 之後,Python 作為 AI 時代頭牌語言的位置基本確立,未來的懸念僅僅是誰能坐穩第二把交椅。

不過聲音市場上還有一些雜音。最近一個有意學習數據科學的姑娘跟我說,她的一個朋友建議她從 Java 入手,因為 Hadoop 等大數據基礎設施是用 Java 寫的。

在這裏我要明確表個態,對於希望加入到 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 的一些優點,比如語言設計簡潔優雅,對程序員友好,開發效率高。但我認為這不是根本原因,因為其他一些語言在這方麵表現得並不差。

還有人認為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 程序更加清爽痛快

最後更新:2017-10-08 18:32:34

  上一篇:go Python與Java曝漏洞,黑客利用FTP注入可繞過防火牆
  下一篇:go 楚江數據:Python爬取豆瓣熱門電影信息