現代編程語言哪家強?2020年你或許應該了解這7門編程語言
如果我們把人類的現代文明看作一輛汽車,那麼軟件開發行業就像汽車的發動機,編程語言就像發動機的燃料。那麼問題來了,你應該學哪種編程語言?學習一門新的編程語言在時間、精力和腦力上的投入都非常巨大,但它可以提高你的軟件開發技能,並給你的職業生涯帶來提升,正如我在另一篇博客中所寫的:
通常,你應該選擇一種能有助於你事業發展的編程語言。另外,你還可以學習一門受歡迎程度正在上升的語言。
我對主流編程語言非常尊重。但在這裡,我列出現代編程語言,這些語言可以提高你的工作效率,使你成為一個更好的開發人員。此外,我還將涉及更廣泛的領域:系統編程,應用程序開發,網絡開發,科學計算。
“現代編程語言”這個詞是模棱兩可的。許多人認為像Python、JavaScript 這樣的語言是現代編程語言。但同時,他們認為Java 是一種古老的編程語言。事實上,它們都出現在同一時間:1995 年。
大多數主流的編程語言是在上個世紀發展起來的,主要是在20 世紀70 年代(例如C)、20 世紀80 年代(例如C++)、20 世紀90 年代(例如Java、Python、JavaScript)。這些語言不是為了利用現代軟件開發生態系統而設計的。儘管其中的許多語言中有改進特性,比如並發性和自我調整,但是它們也提供了向後兼容性,並且不能丟棄舊的、過時的特性。
在這一點上,Python 做的很好,它在Python 2 和Python 3 之間做了一個明確的劃分。這些語言通常提供10 種方法來做同樣的事情,而不關心開發人員用起來是否方便。根據StackOverflow developer 的調查,大多數主流的舊編程語言都在“最可怕的語言”類別中佔據了榜首:
圖片來源:Stackoverflow
我將以第一款iPhone發布的時候,也就是2007年6月29日作為新舊編程語言之間的界限時間點。在iPhone發布之後,一切都發生了變化。在這個列表中,我主要考慮2007年後的編程語言。
首先,開發現代編程語言是為了充分利用現代計算機硬件(多核CPU、GPU、TPU)、移動設備、大數據集、快速網絡、容器和雲。此外,大多數現代編程語言使用起來都更容易,主要體現在:
- 簡潔的代碼
- 內置的並發支持
- 空指針安全
- 類型推斷
- 更簡單的特性集
- 低認知負荷
- 混合所有編程範例的最佳特性
其次,列表中的許多編程語言都具有破壞性,將永遠改變軟件行業。其中一些已經成為主流編程語言,而另一些則等待取得突破。至少作為第二種編程語言來學習這些語言是明智的。
在之前的一篇博文“20 個2020 年軟件發展趨勢預測”中,我預測了2020 年許多現代編程語言的突破:
文章網址:https://towardsdatascience.com/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0
Rust
圖片來源:Thoughtram
系統編程語言是由C、C++等主導的,儘管它們可以完全控製程序和硬件,但它們缺乏內存安全性。即使它們支持並發性,但是在比你保證並發安全性的情況下,使用C/C++編寫並發程序是很有挑戰性的。其他流行的編程語言是可解釋性的語言,如Java、Python、Haskell,它們提供安全性,但需要很多的運行時間或虛擬機。由於運行時很大,像Java 這樣的語言不適合系統編程。
有很多人嘗試過將C/C++的特性和Haskell,Java 的安全性結合起來,但目前看來,Rust 是第一個實現這一目的的產品級編程語言。
Graydon Hoare 最早將Rust 作為一個副產品開發出來。他受到了研究性的編程語言Cyclone 的啟發。Rust 是開源的,Mozilla 與許多其他公司和社區一起進行語言開發。Rust 於2015 年首次發布,很快就引起了社會各界的關注。在以前的文章中,我深入研究了Rust,並論證了為什麼在大數據域中使用Rust 來代替C++、Java 是一個更好的選擇:
主要特性:
- 通過所有權和借用的概念提供內存安全性和並發安全性。
- 內存安全和並發安全的編譯時間保證,即如果一個程序代碼編譯了,那麼它既是內存安全的,也沒有數據競爭。這是Rust 最吸引人的特點。
- 它還提供了ML,Haskell 的表示方式。Rust 具有不變的數據結構和函數式編程特性,提供函數式並發和數據並發。
- Rust 的速度非常快。
- 由於沒有運行時,Rust 提供了對現代硬件(TPU、GPU、多核CPU)的完全控制。
- Rust 有LLVM 支持。
受歡迎程度:
自2015 年首次亮相以來,Rust 一直被開發者所喜愛,並在StackOverflow 開發者調查中連續四年(2016、2017、2018、2019)被評為最受歡迎的語言:
圖片來源:Stackoverflow
根據GitHub Octoverse 的說法,Rust 是僅次於Dart 的增長第二快的語言:
圖片來源:Octoverse
流行編程語言網站PyPl 也將Rust 排在第18 位,並呈上升趨勢:
圖片來源:PyPl
對比它提供的功能集,難怪像微軟、亞馬遜、谷歌這樣的科技巨頭最終宣布將Rust作為一種長期的系統編程語言。
在過去的5 年裡,Rust 的吸引力每年都在增加:
圖片來源:Google Trends
主要用在:
- 系統編程
- 無服務器計算
- 業務應用程序
主要競爭語言:
- C
- C++
- Go
- Swift
Go
圖片來源:Wikimedia
谷歌是最大的網絡公司之一。本世紀初,Google 面臨著兩個擴展問題:開發擴展和應用程序擴展。開發擴展意味著他們不能通過增加開發人員來增加更多的功能,應用程序擴展意味著他們無法輕鬆開發一個可以擴展到“Google”級機器集群的應用程序。2007 年左右,谷歌開始創建一種新的“實用”編程語言,這種語言可以解決這兩個問題。在Rob Pike(UTF-8)和Ken Thompson(UNIX 操作系統)中,兩個世界上最有才華的軟件工程師創建了一種新的語言。
2012 年,谷歌發布了Go 編程語言的第一個官方版本。Go 是一種系統編程語言,但不同於Rust。它也有一個運行時和垃圾收集器(幾兆字節),但與Java 或Python 不同的是,這個運行時包含了生成的代碼。最後,Go 生成一個本機二進制代碼,可以在沒有附加依賴項或運行時的情況下在計算機中運行。
主要特性:
- Go 具有一流的並發支持。它不通過線程和鎖提供“共享內存”並發性,因為編程難度要大得多。相反,它提供了基於CSP 的消息傳遞並發性。Go 使用“Goroutine”(輕量級綠色線程)和“Channel”進行消息傳遞。
- Go 最具殺傷力的特點是簡單,它是最簡單的系統編程語言,一個萌新軟件開發人員可以在幾天內編寫出高效的代碼。一些最大的雲原生項目(Kubernetes,Docker)是用Go 編寫的。
- GO 也有嵌入式垃圾收集器,這意味著開發人員不需要擔心像C/C++那樣的內存管理問題。
- 谷歌在Go 上投入了大量資金,因此,Go 擁有大量的工具支持。對於新的Go 開發人員來說,有一個龐大的工俱生態系統。
- 通常,開發人員花費20% 的時間編寫新代碼,80% 的時間維護現有代碼。由於其簡單性,Go 在語言維護領域表現出色。如今,Go 在商業應用程序中得到了廣泛的應用。
受歡迎程度:
自Go 首次問世以來,軟件開發社區已經欣然接受了它。在2009 年(首次亮相)和2018 年,Go 通過TIOBE 指數進入編程語言名人堂排行榜。難怪Go 的成功為Rust 這樣的新一代編程語言鋪平了道路。
Go 已經是一種主流編程語言。最近,Go 團隊宣布了“Go 2”的計劃,目的只是讓語言更加穩固。
在幾乎所有流行編程語言比較網站,Go 的排名很高,超過了許多現有的語言。以下是2019 年12 月的TIOBE 指數評級,Go 排名第15 位:
圖片來源:TIOBE
根據Stackoverflow 的調查,Go 是十大最受歡迎的編程語言之一:
圖片來源:Stackoverflow
根據GitHub Octoverse 的統計,Go 也是增長最快的十大語言之一:
圖片來源:Octoverse
谷歌還顯示,過去五年裡,Go 的吸引力不斷增強:
圖片來源:Google Trends
主要用例:
- 系統編程
- 無服務器計算
- 業務應用程序
- 雲本機開發
主要競爭語言:
- C
- C++
- Rust
- Python
- Java
Kotlin
Java 是企業軟件開發中無可爭議的王者。近年來,Java 已經受到了很多批評:冗長,需要大量的樣板編碼,複雜,容易發生意外。然而,關於Java 虛擬機(JVM)的爭論很少。JVM 是軟件工程領域的傑作,它提供了一個經過時間考驗的運行時。在上一篇文章中,我詳細討論了JVM 的優點:
多年來,像Scala這樣的JVM語言試圖回答Java的缺點,並希望成為更好的Java,但是失敗了。最後,Kotlin出現了,尋找更好Java的旅程似乎已經結束。Jet Brains(流行IDE Intel liJ背後的公司)開發了Kotlin,它運行在JVM上,解決了Java的缺點,並提供了許多現代特性。與Scala不同,Kotlin比Java簡單得多,並在JVM中提供Go或Python式的開發效率。
谷歌宣布Kotlin 是開發Android 的一流語言,並提高了Kotlin 在社區的接受度。同樣流行的Java 企業框架Spring 也從2017 年開始在Spring 生態系統中支持Kotlin。
主要特性:
- Kotlin 的USP 是它的語言設計。我總是將Kotlin 看作JVM 上的Go/Python,因為它的代碼簡潔明了。因此,Kotlin 的生產效率很高。
- 與許多其他現代語言一樣,Kotlin 提供了空指針安全、類型推斷等功能。
- 因為Kotlin 在JVM 中運行,因此你可以使用現存的Java 庫龐大的生態系統。
- Kotlin 是開發Android 應用程序的一流語言,已經超越Java 成為開發Android 應用程序的第一語言。
- Kotlin 有JetBrains 和開源的支持。所以,Kotlin 有很好的工具支持。
- 有兩個有趣的項目:Kotlin Native(將Kotlin 編譯為本機代碼)和Kotlin.js(Kotlin 轉換為JavaScript)。如果他們成功了,那麼Kotlin 可以在JVM 之外使用。
- Kotlin 還提供了一種編寫DSL(領域特定語言)的簡單方法。
受歡迎程度:
自2015 年首次發布以來,Kotlin 的受歡迎程度正在飆升。根據Stack Overflow,Kotlin 是2019 年第四受歡迎的編程語言:
圖片來源:Stackoverflow
Kotlin 也是增長最快的編程語言之一,排名第四:
圖片來源:Github Octoverse
熱門編程語言排名網站PyPl 將Kotlin 列為第12 位最受歡迎的編程語言,並有很高的上升趨勢:
圖片來源:Pypl
自從谷歌宣布Kotlin 是開發Android 應用程序的一流語言以來,Kotlin 的受歡迎程度快速上升,如下圖所示:
圖片來源:Google Trends
主要用例:
- 企業應用程序
- Android應用程序開發
主要競爭語言:
- Java
- Scala
- Python
- Go
TypeScript
JavaScript 是一種優秀的語言,但2015 年以前的JavaScript 有許多缺點。甚至著名的軟件工程師Douglas Crockford 也寫過一本書《JavaScript: The Good Parts》,並暗示JavaScript 有很多不好的部分。由於沒有模塊化和“回調地獄”,開發人員不喜歡維護特別大的JavaScript 項目。
Google 甚至開發了一個平台,將Java 代碼轉換為JavaScript 代碼(GWT)。許多公司或個人試圖開發更好的JavaScript,例如CoffeeScript、Flow、ClojureScript,但微軟的TypeScript 無疑是其中最突出的。由Delphi 的創建者Anders Hejlsberg 領導的一組微軟工程師創建了TypeScript,把它作為JavaScript 的靜態類型的模塊化超集。
在編譯期間,TypeScript 被編譯為JavaScript。2014 年首次發布以來,TypeScript 迅速引起社會關注。當時谷歌還計劃開發一個靜態類型的JavaScript 超集。谷歌對TypeScript 印象深刻,他們沒有開發新的語言,而是與微軟合作改進TypeScript。
Google 使用TypeScript 作為其SPA 框架Angular2+ 的主要編程語言。另外,流行的SPA 框架React 提供了對TypeScript 的支持。另一個流行的JavaScript 框架Vue.js 聲明他們將使用TypeScript 開發新的Vue.js 3:
圖片來源:Vue.js Roadmap
此外,node.js 的創建者Ryan Dahl 決定使用TypeScript 開發一個安全的node.js 替代品Deno。
主要特性:
- 與列表中的Go 或Kotlin 一樣,TypeScript 的主要特性是語言設計。憑藉其清晰乾淨的代碼,它是最優雅的編程語言之一。就開發人員的生產力而言,它與JVM 上的Kotlin 或Go/Python 不相上下。TypeScript 是最高效的JavaScript 超集。
- TypeScript 是JavaScript 的強類型超集。它特別適合大型項目,並被正確地稱為“大規模的JavaScript”。
- “三大”單頁應用程序框架(Angular、React、Vue.js)為TypeScript 提供了極好的支持。在Angular 中,TypeScript 是首選的編程語言。在React 和Vue.js 中,TypeScript 越來越流行。
- 兩個最大的科技巨頭:微軟和谷歌正在合作開發TypeScript,它得到了一個充滿活力的開源社區的支持。因此,對TypeScript 的工具支持是最好的支持之一。
- 由於TypeScript 是JavaScript 的超集,它可以在JavaScript 所有的地方運行。TypeScript 可以在瀏覽器、服務器、移動設備、物聯網設備和雲上運行。
受歡迎程度:
開發人員喜歡TypeScript 優雅的語言設計。在Stackoverflow 開發者調查中,它在最受歡迎的語言類別中與Python 並列第二:
圖片來源:Stackoverflow
TypeScript 是增長最快的Web 編程語言之一,在GitHub Octoverse 上排名第五:
圖片來源:Octoverse
根據GitHub 貢獻,TypeScript 也進入了前10 名(排名第7):
圖片來源:Octoverse
TypeScript 在過去的一年中吸引了越來越多的眼球,這反映在Google 趨勢上:
圖片來源:Google Trends
主要用例:
- Web 用戶界面開發
- 服務器端開發
主要競爭語言:
- JavaScript
- Dart
Swift
Steve Jobs拒絕在iOS中支持Java(和JVM),因為他認為Java將不再是一種主要的編程語言。我們現在知道Steve Jobs對Java的評價是錯誤的,但是iOS仍然不支持Java。相反,蘋果選擇Objective-C作為iOS中的主流編程語言。Objective-C是一門很難掌握的語言。而且,它具備現代編程語言所要求的高開發效率。
在蘋果,Chris Lattner 和其他人開發了Swift ,它是一種多範式、通用、可編譯的編程語言,為Objective-C 提供了一種替代方案。Swift 的第一個穩定版本於2014 年發布。Swift 還支持LLVM 編譯器工具鏈(也由Chris Lattner 開發)。Swift 與Objective-C 代碼庫具有良好的互操作性,並且已經成為iOS 應用程序開發的主要編程語言。
主要特性:
- Swift 的一個致命優點是它的語言設計。它使用更簡單、簡潔和乾淨的語法,為Objective-C 提供了一個更高效的替代方案。
- Swift 還提供了現代程序語言的特性:null 安全性。
- Swift 是一種編譯語言,它和C++一樣快。
- Swift 支持LLVM 編譯器工具鏈。因此,我們可以在服務器端甚至瀏覽器編程(使用WebAssembly)中使用Swift。
- Swift 提供自動參考計數(ARC)支持,這樣可以限制內存管理不當。
受歡迎程度:
和許多其他現代語言一樣,開發人員也非常喜歡Swift。根據StackOverflow 的調查,Swift 在最受歡迎的編程語言中排名第六:
在TIOBE 的編程語言排行榜中,Swift 在2019 年已升至第10 位。考慮到這門語言才5 歲,這是一個相當了不起的成就:
圖片來源:TIOBE Index
Google trends 還顯示,Swift 的受歡迎程度先急劇上升,隨後在最後幾次飽和中趨勢略有下降:
圖片來源:Google Trends
主要用例:
- iOS 應用程序開發
- 系統編程
- 客戶端開發(通過WebAssembly)
主要競爭語言:
- Objective-C
- Rust
- Go
Dart
Dart 也是Google 發布的編程語言。Google 是網絡和安卓領域的關鍵玩家,在網絡和應用程序開發領域開發自己的編程語言也就不足為奇了。
Dart 是一種支持強類型和麵向對象編程的通用編程語言。Dart 也可以被轉換成JavaScript,並且可以運行在JavaScript 運行著的任何地方(例如Web、移動、服務器)。
主要特性:
- 與Go 一樣,Dart 也非常注重開發人員的工作效率。Dart 由於其乾淨、簡單、簡潔的語法,極大地提高了生產效率,深受開發人員的喜愛。
- Dart 還提供強大的類和麵向對象的編程。
- Dart 是少數支持JIT 編譯和AOT 編譯的語言之一。因此,Dart 可以以JavaScript 運行時(V8 引擎)為目標,Dart 可以編譯成快速的本機代碼(AOT 編譯)。
- 跨平台的原生應用開發平台Flutter 選擇Dart 作為編程語言來開發iOS 和Android 應用。從那以後,Dart 變得越來越流行。
- 與Go 一樣,Dart 也有出色的工具支持和Flutter 巨大的生態系統。Flutter 的日益流行只會增加Dart 的流行程度。
受歡迎程度:
根據Github Octoverse,Dart 是2019 年增長最快的編程語言,去年它的受歡迎程度翻了五倍:
根據TIOBE,Dart 居於第23 位,僅僅4 年時間,它已經超越了其它很多編程語言:
圖片來源:TIOBE index
它也是StackOverflow 開發者調查中排名第12 位的最受歡迎的編程語言之一:
圖片來源:StackOverflow
除了Flutter,Dart 的受歡迎程度在過去兩年也經歷了巨大的改善,這一點在Google 中很明顯:
圖片來源:Google Trends
主要用例:
- 應用程序開發
- 前端開發
主要競爭語言:
- JavaScript
- TypeScript
Julia
前面列出的編程語言都是由大公司開發的,但Julia 不是。在技術計算中,通常使用Python、Matlab 等動態語言。這些語言提供易於使用的語法,但不適合大規模的技術計算,他們使用C/C++庫來處理CPU 密集型任務。由於代碼是在兩種語言之間轉換的,因此總會有一些性能損失。
為了解決這個問題,麻省理工學院的一組研究人員計劃從頭開始創建一種新的語言,它利用了現代硬件的優勢,並結合了其他語言的最佳部分。他們在麻省理工學院創新實驗室完成這項工作,還發表了以下宣言:
資料來源:Julia Presentation
Julia 是一種動態的高級編程語言,為並發、並行和分佈式計算提供一流的支持。Julia 的第一個穩定版本於2018 年發布,很快就得到了社區和業界的青睞。Julia 可以應用於科學計算、人工智能等許多領域,最終解決“兩種語言”的問題。
特性:
- 和Rust 一樣,Julia 的主要特點是語言的設計。它試圖在不犧牲性能的情況下,結合現有的編程語言在高性能和科學計算中的一些最佳特性。到目前為止,它做得很好。
- Julia 是一種可選類型的動態編程語言。因此,Julia 很容易學習,而且效率很高。
- 它以多分派編程範式為核心。
- 它內置了對並發、並行和分佈式計算的支持。
- 它還為I/O 密集型任務提供異步I/O。
- 它速度非常快,可以用於需要數百萬線程的科學計算。
受歡迎程度:
在許多領域,Julia 主要與Python 競爭。由於Python 是最流行的編程語言之一,Julia 成為主流還需要幾年時間。
Julia 相對年輕(只有一歲),但在TIOBE index 中仍排在第43 位:
圖片來源:TIOBE
Google Trends 也顯示出過去的時間裡,程序員對Julia 的穩定興趣。
但考慮到Julia 背後的功能集和公司數量,如NSF、DARPA、NASA、Intel,Julia 何時取得突破只是個時間問題。
主要用例:
- 科學計算
- 高性能計算
- 數據科學
- 可視化
主要競爭語言:
- Python
- Matlab
via:https://towardsdatascience.com/top-7-modern-programming-language-to-learn-now-156863bd1eec