選Python還是選Java?2020年,頂尖程式設計師最應該掌握的7種程式語言

哪種程式語言最好?這個問題可能永遠不會有答案。蘿蔔白菜,各有所愛,AI 工程師和科學家可以根據項目需要,從眾多程式語言中選擇最適合自己的。

有人曾經將程式設計比作做菜,那程式語言就是首先要準備的食材或廚具。

C:一把菜刀一口炒鍋,一個很好用的灶,隔壁有個菜市場。

Java:碎菜器,切菜機,絞肉機,和麵機,烤箱,微波爐……

Python:大超市的速凍櫃檯,要成品有成品,要半成品有半成品,什麼都有。它能讓你快速獲得一桌還能吃的飯,但是深究口味火候什麼的不那麼容易。

C++:一套頂級廚具,光刀就十幾把,切肉的切片的雕花的;鍋有爆炒的悶燒的平底煎肉的煎蛋的燉湯的……有人試圖用二十一天掌握這套工具的用法,結果往往是玩刀傷了自己,或者是炸了廚房。

儘管在剛開始開發 AI 時,有很多程式語言都可以滿足你的需求,但沒有一種程式語言是可以一站式解決 AI 程式設計的問題,因為在每一個項目中,不同的目標需要特定的方法。

和做菜時的精挑細選一樣,在成為一個「高手」的過程中,我們要學會的是找到最適合自己的程式語言。

Python — — 最強大的程式語言

Python 是可讀的最強大的語言。 — Pau Dubois

Python 程式設計。圖源:Unsplash。

Python 開發於 1991 年,一項民意調查表明,在開發 AI 時,超過 57% 的開發者將 Python 作為首選程式語言,而不是 C++。因為易於學習,Python 讓程式設計師和資料科學家可以更輕鬆地進入開發 AI 的世界。

Python 是一個程式設計師需要多少自由度的「實驗」。太自由,沒人可以讀懂別人的程式碼;太不自由,就會沒那麼強的表現力。 — Guido van Rossum

使用 Python,你不僅可以獲得優秀的社群支援和廣泛的庫集,還能享受到其靈活性。你從 Python 中得到的最大的好處可能是平臺獨立性和針對深度學習和機器學習的廣泛框架。

用 Python 編碼的樂趣在於可以看到短小精悍、可讀性高的類,這些類可以用少量清晰的程式碼表達大量行為(而不是用大量程式碼煩死讀者)。 — — Guido van Rossum

Python 程式碼片段示例:

Python 程式段落示例。

常用的庫

  • TensorFlow — — 用於機器學習工作負載和用資料集處理;
  • Matplotlib — — 非常方便的可视化操作界面。
  • scikit-learn — — 訓練機器學習模型;
  • PyTorch — — 計算機視覺和自然語言處理;
  • Keras — — 高度複雜性的數學計算和操作的程式碼介面;
  • SparkMLib — — 類似 Apache Spark 的機器學習庫,通過演算法和實用程式等工具,讓每一個人都能輕鬆地進行機器學習;
  • MXNet — — Apache 的另一個庫,可以簡化深度學習流程;
  • Theano — — 定義、優化和評價數學表示式的庫;
  • Pybrain — — 用於強大的機器學習演算法。

另外,根據 GitHub 庫的貢獻度,Python 已經超越了 Java,成為世界第二受歡迎的語言。Stack Overflow 將 Python 稱為「成長最快」的主流程式語言。

Python 入門課程

  • 《三門免費的 Python 入門課程:2020 版》

課程連結:https://hackernoon.com/3-free-python-courses-for-beginners-2020-edition-j7c23y3u

  • 《完整 Python 訓練營:用 Python 3 從小白到大師》

課程連結:https://www.udemy.com/course/complete-python-bootcamp/?LSNPUBID=JVFxdTr9V80&ranEAID=JVFxdTr9V80&ranMID=39197&ranSiteID=JVFxdTr9V80-lB6TwxSdouentAk36.qjmw

Java —— 最靈活的程式語言

編寫一次,隨時執行。

Java 被公認為世界上最好的程式語言之一,它在過去 20 年間的使用情況就是最好的證明。

憑藉其使用者友好度、靈活的特性以及平臺獨立性,Java 以各種方式參與到了 AI 的開發中,比如:

  • TensorFlow — — TensorFlow 支援的程式語言中也列出了帶有 API 的 Java。雖然不像其他完全支援的語言那樣功能豐富,但確實支援 Java,並且在迅速地改進。
  • Deep Java Library(深度 Java 庫) — — 亞馬遜開發的、用 Java 來建立並部署深度學習能力的庫。
  • Kubeflow — — Kubeflow 使在 Kubernetes 上部署和管理機器學習堆棧更容易,還提供了現成的 ML 解決方案。
  • OpenNLP — — Apache 的 OpenNLP 是用於自然語言處理的機器學習工具。
  • Java Machine Learning Library(Java 機器學習庫) — — Java-ML 為開發者提供了多種機器學習演算法。
  • Neuroph — — Neuroph 藉助 Neuroph GUI,利用 Java 開源框架設計了神經網路。

如果 Java 可以垃圾回收,大多數程式都會在執行時刪除自己。 — — Robert Sewell

Java 程式碼片段示例:

Java 程式碼段示例。

Java 入門課程

  • 《五大線上 Java 程式設計入門課程 — — 最好的》

課程連結:https://javarevisited.blogspot.com/2018/05/top-5-java-courses-for-beginners-to-learn-online.html

R —— 善於處理資料的程式語言

Ross Ihaka 和 Robert Gentleman 在 1995 年釋出了第一版 R 語言。現在由 R 開發核心隊伍維護,R 是 S 程式語言的實現,用於統計軟體的開發和資料的分析。

R 的基礎特徵是善於處理大量資料,相比 Python 中不夠完善的 NumPy 包,R 是更好的選擇;你可以用 R 處理各種不同的程式設計正規化,比如函數語言程式設計、向量計算和麵向物件程式設計等。

R 適用的 AI 程式設計包:

  • Gmodels — — 提供了一系列擬合模型用的工具;
  • Tm — — 文字挖掘應用的框架;
  • RODBC — — R 的 ODBC 介面;
  • OneR — — 用來實現單規則機器學習分類演算法,適用於機器學習模型。

在資料探勘者和統計學家中,廣泛使用的 R 的功能有:

  • 多種用於擴充套件功能的庫和包;
  • 活躍的支援社群;
  • 能和 C、C++ 和 Fortran 協同工作;
  • 多個有助於擴充套件功能的包;
  • 支援生成高質量的圖形。

Prolog ——最AI的程式語言

邏輯程式設計(Logic Programming)的簡稱。Prolog 最早出現在 1972 年,適用於開發人工智慧,尤其是自然語言處理。Prolog 最適合建立聊天機器人,ELIZA 是有史以來第一個用 Prolog 建立的聊天機器人。

第一個成功的聊天機器人。

理解 Prolog,你必須熟悉一些指導 Prolog 工作的基本術語:

  • 事實(Fact)定義了正確的陳述;
  • 規則(Rule)定義了有附加條件的陳述;
  • 目標(Goal)根據知識庫定義了提交陳述的位置;
  • 查詢(Query)定義瞭如何使你的陳述正確,以及對事實和規則的最終分析。

Prolog 提供了兩種實現 AI 的方法,這兩種方法已經實現很久了,並且在資料科學家和研究人員中廣為人知:

  • 符號方法包括基於規則的專家系統、定理證明和基於約束的方法;
  • 統計方法包括神經網路、資料探勘、機器學習以及其他方法。

Lisp ——實現不可能的程式語言

用 Lisp 編碼建立有 n 個輸入 m 個單元的一層感知機。

列表處理(List Processing)的簡稱。這是繼 Fortran 後第二古老的程式語言。也被稱作 AI 的奠基語言之一,由 John McCarthy 與 1958 年建立。

Lisp 是用來實現不可能的語言。 — — Kent Pitman

Lisp 是可以程式設計的實用數學符號,很快就成為了開發人員首選的 AI 程式語言。Lisp 因為其特有的功能,成為機器學習 AI 項目的最佳選擇之一:

  • 快速建立原型;
  • 建立動態物件;
  • 垃圾回收;
  • 靈活性。

隨著其他競爭的程式語言的重大改進,其他語言集成了 Lisp 特有的一些功能。涉及到 Lisp 的著名項目有 Reddit 和 HackerNews。

說到 Lisp,這是世界上最美的語言 — — 至少在 Haskell 出現之前是這樣。 — — Larry Wall

Haskell —— 最安全的程式語言

Haskell 創建於 1990 年,以著名數學家 Haskell Brooks Curry 的名字命名。Haskell 是純粹的函數式和靜態類型的程式語言,與惰性計算和短程式碼配合使用。

Haskell 是一種非常安全的程式語言,因為和其他程式語言相比,Haskell 很少出現錯誤,所以在處理錯誤方面提供了更大的靈活性。即便發生了錯誤,也可以在編譯(而非執行)時捕獲大多數非語法錯誤。Haskell 提供的功能包括:

  • 強大的抽象能力;
  • 內建的記憶體管理;
  • 程式碼的可重用性;
  • 易於理解。

SQL、Lisp 和 Haskell 是我所見過的唯一可以把時間花在思考而不是打字上的程式語言。 — — Philip Greenspun

Haskell 的功能有助於提高程式設計師的生產率。Haskell 與其他程式語言非常相似,但只有一小部分開發人員使用。撇開挑戰不談,隨著開發者社群使用率的增加,可以證明 Haskell 和其他用於 AI 的競爭語言一樣出色。

Julia —— 高效能的程式語言

Julia 是一種高效能的通用動態程式語言,可以建立幾乎任何應用,但最適合進行數值分析和計算科學。和 Julia 一起使用的工具還包括:

  • 像 Vim 和 Emacs 這樣流行的編輯器;
  • 像 Juno 和 Visual Studio 這樣的 IDE。

Julia 原始碼組織。

Julia 中有一些功能使其成為 AI 程式設計、機器學習、統計和資料建模的重要選擇,這些功能有:

動態類型系統;

  • 內建的包管理器;
  • 能夠進行並行和分散式計算;
  • 宏和超程式設計能力;
  • 支援多分派;
  • 直接支援 C 函數。

Julia 是為了消除其他程式語言的弱點而構建的,和其他工具(如 TensorFlow.jl、MLBase.jl 和 MXNet.jl)整合後還可以用於機器學習,利用 Julia 的可伸縮性還可以做更多事。

谷歌趨勢 — — Julia 的使用趨勢。

總結

AI 工程師和科學家可以根據項目的需求,從多種程式語言中進行選擇。每一種 AI 程式語言都有優缺點。隨著這些語言的不斷改進,AI 開發很快就可以有更舒適的體驗,這樣就會有更多人加入這一創新浪潮。出色的社群支援使新人們可以更好地工作,社群對包和擴充套件的貢獻讓每個人的工作都變得更加輕鬆。

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!

接受贊助/免費投稿/商業合作,具體請於臉書洽談!!!

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/