對於開發者來說,掌握什麼程式語言能更容易找到機器學習或者數據科學的工作?
這是個許多人關心的問題,非常實際,也在許多論壇被翻來覆去地討論過。非常顯著的是 「Python 是大趨勢」這一論調,似乎它即將在機器學習領域一統天下。那麼這種說法到底有幾分事實?
首先要指出的是,大多數對程式語言的討論都比較主觀。比如說,有的開發者(尤其是初學者)會因為一門語言的某個特性很契合自己的使用習慣、用著最順手,就狂贊這門語言,而對其他語言的優點選擇性失明。而這篇雷鋒網編譯自 IBM 開發者論壇的文章,則儘量避免了主觀判斷,用數據來展示各門開發語言在工業界的實際使用情況,可以說是十分難得。畢竟,統計學習的核心就是用數據說話。AI 開發者應該更明白可靠數據相比主觀臆測的價值。
閒話少說,我們來看看 2016 年開發語言使用情況統計,到底哪門語言的使用人數上升最快?居前幾位的都是哪些?
圖1:機器學習與數據科學領域各語言的僱主招聘指數對比
如圖所示,這是利用美國職位搜尋引擎 indeed.com 得出的機器學習、數據科學招聘趨勢:對這些領域內開發職位所列出的程式語言要求進行了統計。它展示出公司、僱主們都在尋找哪些語言技能。但注意:
我們可以清楚看出,美國僱主最需要的前四大語言排名是 Python,Java,R,C++。其中,Python 在 2015 年中超過 Java 躍升至第一。
然後,把搜索結果限制在機器學習領域(去掉數據科學),數據其實差不多:
圖2:機器學習領域各語言的僱主招聘指數對比
這張折線圖中包含了 Lua,但由於它的招聘職位實在太少,代表 Lua 的線與坐標軸重合。
我們能從這兩組數據中推斷出什麼?
Python 是市場的領先者,作為最受歡迎的機器學習語言當之無愧。 另外,Python 與 Java 之間的差距正在被拉開。但是 Java 與 R 之間的差距正在被縮小。雷鋒網(公眾號:雷鋒網)獲知,有業內人士對居第二位的語言是 Java 而不是 R 感到驚訝。通常,大家的主觀感受是除了 Python,使用 R 語言開發機器學習應用最普遍。
Python 並沒有成為霸主。各主流語言的招聘需求都很多。對小眾語言如 Lua 和 Julia ,目前業界的需求確實小些,但其他語言都佔有了相當的比例。
進入 2016 年後,市場對所有語言的需求都大幅上漲。Python 並沒有與其他語言拉開明顯差距。這表現出,最近一年裡業界對機器學習和數據科學整體的興趣和重視。
Scala 在 2014 年之後的增長十分驚人。2014 年之前,對它幾乎沒有招聘需求。但那年之後一直在穩定增長。2016 年,它趕上了 Javacript,達到主流語言陣營的水平。
作為一門口碑不錯的新興語言,Julia 的普及程度還很低。但在 2016 下半年有了巨幅增長。現在還看不出來它是否會成為主流語言。
關於 Scala 和 Julia 的增長趨勢,在它們的增長率折線圖中,我們可以很明顯的看出來:
圖3:Scala,Julia,Lua 在機器學習、數據科學領域的僱主招聘指數增長率
然後,當我們省略掉 Scala、Julia 和 Lua,統計主流語言的增長率,可以明白無誤看出 Python 和 R 的增長速度遠超其他主流語言:
圖4:機器學習與數據科學領域,主流語言的僱主招聘增長率
R 的增長率始終高於 Python,位居第一,更是遠超 Java。以此來看,在可預測的將來,R 不但不會消失,還會成為更受歡迎的主流機器學習語言。因此,說「Python 是未來大趨勢」肯定是不對的。
但是,當我們聚焦於細分領域「深度學習」,數據就變得很不一樣:
圖4:深度學習領域各語言的僱主招聘指數對比
在深度學習市場,對 Python 的招聘需求仍然最高。但前五大語言的排序變成了Python,C++,Java,C,R。這裡有很明顯的對高性能計算語言的側重。 而且,Java 的增長速度驚人,它可能很快成為深度學習市場的第二位。在可預期的將來,R 還不會成為最受歡迎的深度學習語言。令人驚訝的是 Lua 的存在感之低。要知道,開源框架巨頭之一的 Torch 便是基於 Lua,許多開發者因此會認為它在深度學習市場佔有特殊地位。
對於文章開頭提出的問題——僱主需要掌握什麼語言的開發者,答案已經很明確了:
在機器學習和數據科學市場,Python, Java, 和 R 的招聘需求最大;
在深度學習領域, Python, Java, C++ 以及 C 更被公司歡迎。
但雷鋒網的讀者們請注意,這只是私營公司的招聘需求。學界研究人員的偏好會有很大出入。另外,自學 AI 的業餘愛好者、暫時沒打算在這行謀生的,也不需要對這些數據太過在意。
至於文章原作者的個人觀點(雷鋒網再次提醒:請注意是「個人」觀點,僅給大家做參考),他本人較傾向 Python。原因有二:1. 基於 Python 的頂級機器學習框架選擇較多。2. 作者來自計算機專業背景,Python 的邏輯更適合。相比之下,R 語言就更適合統計學、數學背景的開發者。在 Python 之外,作者更傾向於使用 C++,這是因為他用 C++ 寫代碼寫了半輩子,已經習慣了。其他人、新人可能更適合學習其他語言。比如說,寫代碼功底不深的統計學背景開發者通常用 R 語言更順手。經驗豐富的 Java 開發者可以接著用 Java,尤其有那麼多開源 Java API 。
歸納起來,還是程序猿的個人學習、開發經歷,以及知識背景影響了他的語言偏好。很少有人能夠涉獵所有主流語言,即便只掌握幾門語言,也未必在每一門上的開發經驗都夠深。因此,老司機對新入門開發者的語言推薦都帶有強烈主觀色彩。即使拿這篇以陳述數據為主的文章來說,也有它的主觀局限:Matlab/Octave 和 Lisp,這兩門重頭語言並沒有包括在內。這大約是由於作者並沒有充分接觸這三門語言。而 AI 大牛吳恩達對新手的建議就是選擇 Octave 或者 Matlab 起步。
對於新入門、正猶豫選擇哪門語言的技術宅,關鍵還是在投入大量時間之前多聽、多看、多了解;比較不同人的觀點,選擇最適合自己的。雷鋒網與旗下 AI 科技評論頻道常年更新針對新老開發者的技術文章,以及追蹤 AI 界的重大新聞事件,感興趣可關注公眾號。
更多對機器學習程式語言的介紹請參考上期文章 入門必讀 機器學習六大開發語言。
via ibm developer
雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。