為何要學習新的程式語言?
對某些人來說,學習新的程式語言似乎是多餘之舉,他們認為現有的工具就足以應付所有任務。然而,也有一群人熱衷於探索新事物,他們視學習為樂趣,並樂於嘗試各種新興的程式語言。
無論您屬於哪一陣營,都不可否認的是,我們都希望將時間投入到具有發展前景的事物上。對於偏好傳統的人來說,他們所熟悉的語言已經擁有廣大的社群基礎,並且預期將持續發展。但我們必須提醒自己,現今成熟的開發工具鏈,也曾經是許多人抗拒嘗試的「新事物」。新技術的出現,往往是為了解決新的問題或降低開發的痛點。
當一項技術經過充分發展,它便有可能在市場上佔據主導地位。當這種情況發生時,我們都不希望被拋在後面。
對於那些熱衷於嘗試新技術的人,則要小心不要漫無目的地浪費精力。雖然像 Brainfuck 這樣有趣的語言,能帶來挑戰和樂趣,但不太可能從中獲得實際利益。我們應該選擇那些具備紮實基礎、有實際應用價值的技術。
如何選擇這些語言
選擇程式語言是一項艱難的任務,特別是當我們希望透過學習新語言來提升職涯發展時。每一位語言的創造者都相信自己打造了完美的語言。那麼,我們該如何選擇呢?
本文的重點會放在一些特定的條件,以便將選擇範圍縮小在合理的範圍內。
發布日期
我們會避免選擇過於新穎的語言。
所謂的「新」,指的是發布時間不到 5-6 年,尤其是那些尚未達到穩定版本 (1.0 版) 的語言。雖然這會排除一些像 Crystal 這樣出色的語言,但我們期待未來有機會深入探討其發展。
Crystal 的程式碼範例(“Fast as C, Slick as Ruby”)
對我們而言,5-12 年是最佳的選擇時間,因為這些語言已經趨於穩定,並且持續改進。當然,這條規則也有例外,我們會根據實際情況來評估。
大型企業的支援和社群
這是顯而易見,但在我們對新事物感到興奮時,往往會被忽略的重點。雖然許多人認為有大型企業的支持,就足以成為成功的先例,但事實並非總是如此。
雖然 Apple 的 Objective-C 和 Swift 因為是高度封閉生態系統中的唯一選擇而蓬勃發展,但 Facebook 的 D 和 Hack 僅僅是實驗性的嘗試。
理想的組合應該是受到大型穩定企業支持,並且快速普及的語言(例如 React)。
但問題的核心仍然在於社群。如果一種語言沒有受到廣泛關注,且沒有足夠的開發人員參與學習和推廣,它將無法在程式碼的墳墓中倖存。
因此,像 Racket 和 Erlang 這樣成熟且引人入勝的語言,因為成長曲線平緩,所以不在我們的選擇範圍內。
明確的獨特優勢
我們所尋找的第三件事是語言的明確目標。例如,僅僅解決命名問題並編譯為 PHP 的更好版本,對我們而言並無吸引力。
如果每個人都想轉向使用,但優勢太小,不足以合理化這種轉變。依照這個標準,我們會拒絕像 CoffeeScript 以及許多其他類似編譯為 JavaScript 的語言。
老實說,我們會立即放棄僅針對語法的改進。歷史證明,在語言方面,實用性勝過友善性。因此,如果所有新語言都專注於更愉悅的使用體驗,它們恐怕不會出現在我們的榜單上。
清晰且一致的語法
是的,我們知道我們說過語法不重要。但更準確地說,我們說過「僅語法改進」並不重要。儘管如此,語法仍然是影響程式開發人員生產力和可維護性的重要因素,因此它仍然是我們的考量重點。
與語法相關的是一致性的概念。函式命名、模組結構等是語言中不可或缺的關鍵元素。現在是 2018 年,天啊,再出現另一種類似 PHP 的語言設計,對我們所有人來說都是一種恥辱。因此,事不宜遲,讓我們開始介紹前五項推薦。
1. Julia
對麻省理工學院的學者而言,用於數據科學的程式語言充其量只是一種妥協。Python 雖然清晰易讀且廣受歡迎,但卻缺乏處理數據物件的原生結構。此外,作為一種直譯語言,Python 的執行速度對它們來說實在太慢(這裡指的並非函式庫,因為它們大多是用 C 語言編寫的)。
但也許最大的障礙是笨拙的並發模型,以及缺乏平行運算的支援,而後者是超級運算的核心。
因此,Julia 應運而生。
Julia 在 2018 年 9 月 29 日發布了穩定版本,剛好在撰寫本文的前幾天(這時間點真是巧!)。以下是官方網站對其功能的描述:
Julia 擅長數值計算。其語法非常適合數學,支援多種數值數據類型,並具備開箱即用的平行處理功能。Julia 的多重分派非常適合定義數值和類陣列的數據類型。
在語法方面,Julia 可以被視為 Python 和 C 的組合。是的,這可能是第一種同時以這兩種特質為目標並取得成功的語言。
簡單來說,Julia 的執行速度非常快,並且不強制執行嚴格的輸入類型。以下是一些基準測試結果:
官方 Julia 基準測試
如您所見,Julia 的表現略遜於 C,但將 Java 和 Python 遠遠拋在後面。Julia 又有哪些亮點呢?
以下是計算直角三角形斜邊的函數實作:
最後,雖然 Julia 的 生態系統 大多集中於數學應用,但我們相信它在通用領域中具有光明的前景。據我們所知,它是第一種對平行運算具有一流支援的語言,因此看到它在 Web 和 IoT 領域越來越受歡迎並不奇怪。
2. Rust
如果您嘗試過新版本的 Firefox 瀏覽器,您就會知道經過多年的努力,它們最終似乎能夠從 Chrome 手中奪回一些市場佔有率。
如果瀏覽器給人輕巧活潑且渲染速度快的感覺,這完全歸功於 Mozilla 專門開發的語言:Rust。
說 Rust 有光明的未來是自欺欺人;該語言已經取得了巨大的成功,如果你還沒聽過它,那是因為它的應用領域很專業,而且它的目標很可怕:取代 C++!是的,我們終於有了一種不僅能夠做到這一點,而且已經在這麼做的語言。
對於那些對 C++ 過於繁瑣的設計和記憶體管理挑戰感到沮喪的人來說,Rust 就像一股清新的空氣。
以下是 Rust 程式的範例:
我們認為,它簡潔而優雅。Rust 遵循函數式程式設計的方法,這讓您的程式碼更具可組合性,而且沒有需要處理的物件導向階層結構。
那麼,是什麼讓 Rust 有勇氣挑戰 C++ 呢?是新的記憶體模型。Rust 沒有依賴舊的 new()/delete() 方式,而是引入了所有權的概念。
Rust 變數並非直接分配和存取記憶體,而是彼此「借用」,並受到編譯器的嚴格限制。整體概念太複雜,無法用幾句話來解釋,因此請隨意查閱官方文件以了解更多資訊。
關鍵在於,這能帶來 100% 的記憶體安全,而不需要垃圾收集器,這非常重要。
Rust 正在席捲系統程式設計的世界。它已經在某些平台上獲得支援,強大的瀏覽器和渲染引擎正在迅速取代生產系統中的 C/C++ 程式碼,並且被用於編寫作業系統。
當然,並非每個人都喜歡創建另一個瀏覽器或裝置驅動程式,但 Rust 已經將自己擴展到其他領域。我們已經在 Rust 中擁有一些功能齊全、速度極快的 Web 框架,並且有越來越多的應用程式函式庫正在開發中。
老實說,如果您對令人興奮的未來感興趣,Rust 是一種完美的語言,現在也是學習的絕佳時機。Rust 是一架已經起飛的飛機,但仍然有時間登上飛往星空的旅程!
3. Elixir
在關注開發者體驗的程式語言中,Ruby 一直處於領先地位。它是一種讀起來像詩歌的語言,並且有足夠的捷徑可以減少心理摩擦。
因此,Rails 框架持續主導著認真開發人員和新創公司的全端開發也就不足為奇了。但並非每個人都對 Rails 感到滿意,特別是其核心開發人員之一 José Valim。我們認為,創造者本人最好地解釋了這種語言的起源 訪談:
這是一個很長的故事,但我會盡量讓它簡短一點。早在 2010 年,我就致力於提高 Rails 在使用多核心系統時的效能,因為我們的機器和生產系統正使用越來越多的核心。然而,整個體驗非常令人沮喪,因為 Ruby 並沒有提供解決並發問題的適當工具。那時我開始研究其他技術,並最終愛上了 Erlang 虛擬機器。
我開始越來越多地使用 Erlang,並且隨著經驗的累積,我注意到我錯過了一些其他語言中可用的結構,包括函數式結構。那時我決定創建 Elixir,試圖在 Erlang VM 之上引入不同的結構和優異的工具。
看哪,Elixir 誕生了!
就像 Scala 對 Java 語言進行改進,但針對底層的虛擬機器 (JVM) 一樣,Elixir 也利用了幾十年前經過考驗的 Erlang 虛擬機器。
現在,關於 Erlang 的討論超出了本文的範圍,但您至少應該知道它是電信業最大的秘密:如果我們的電話網路比我們基於 Web 的系統更可靠,這都要歸功於 Erlang。
用更簡單的術語來說,它的意思就是這樣。如果您正在構建像聊天這樣的即時系統,Elixir 比 Ruby(或 PHP、Python 和 Java 就此而言)更不佔用記憶體且更穩定。
一台執行 Ruby 且最大並發連線數為 10,000 的機器,在使用 Elixir 時可以輕鬆處理 200,000 個,並且仍然有足夠的記憶體來執行 2D 遊戲!
Elixir 的程式碼範例
在語法方面,Elixir 無恥地複製了 Ruby,而其主導的 Web 框架 Phoenix 也無恥地複製了 Rails。我認為這也是一件好事,因為與 Laravel、Grails、Masonite 等一起,我們正逐漸達到所有語言都有類似 Rails 的框架的地步,可以簡化轉換的過程。有些人可能會嘲笑「缺乏原創性」,但至少我們並不抱怨。
最後,Elixir 是一種令人耳目一新、愉悅且非常實用的技術。一些 Ruby(甚至非 Ruby)商店正轉向使用 Elixir,像 Pinterest 這樣的大公司在生產環境中使用它,並取得了非常令人滿意的成果。
許多人認為 Node.js 是一種臨機應變的並發嘗試,很快就會被 Elixir 取代。我們不得不說,我們同意他們的觀點。
4. Kotlin
在 2017 年的 I/O 大會上,Google 向毫無戒心的人群投下了一顆炸彈。該公司正式宣布 Kotlin 為 Android 開發的主要語言,在整個產業中掀起了衝擊波。
現在,Google 在被甲骨文訴訟咬傷後,一直在積極尋求取代 Java 的方案也就不足為奇了。然而,Kotlin 的採用有點出乎意料,Google 很有可能很快就會推出自己的虛擬機器。不過,就目前而言,Kotlin 正在蓬勃發展。
Kotlin 是由 JetBrains 開發的,JetBrains 以其出色的程式碼編輯器套件而聞名。其中之一是 IntelliJ IDEA,它構成了 Android Studio 的基石。Kotlin 的設計目標是安全、簡潔以及與 Java 100% 的互操作性。
最重要的是,Kotlin 編譯器會更努力地消除 Java 世界中常見的任何空指標異常。它還大大減少了眾所周知的 Java 冗長,這對許多人來說是一種解脫。
以下是 Java 和 Kotlin 之間精彩的程式碼比較:
圖片來源:hype.codes
Kotlin 程式碼明顯更簡短,而且需要學習的認知超載也少得多。
但讓我們弄清楚一件事:Kotlin 極不可能取代 Java,儘管它正在迅速成為人們的最愛。我們相信,10 年後,中小型團隊只會使用 Kotlin,而大型團隊將繼續使用 Java,純粹是出於歷史原因。
也就是說,Kotlin 有一個非常光明的未來,因為它可以執行 Java 所能做的一切,可以在沒有任何人注意到的情況下與 Java 程式碼合併,而且更令人愉悅!
5. TypeScript
天知道為了這個位置,我們不得不克制自己!我們內心的一切都在尖叫著「Elm!Elm!」,但無論它的想法多麼具有革命性,語法多麼神聖,Elm 尚未被視為前端工作的主流替代方案。無論如何,讓我們繼續討論主流:TypeScript。
JavaScript 就像野生漿果:醜陋且令人反感,但如果您想在前端開發的叢林中生存,就必須忍受它。在取代它方面進行了許多嘗試(很可能,新的 WebAssembly 標準會成功),但真正引起大家注意的是微軟開發的超集。
您很有可能聽說過 TypeScript:Angular 是第一個從版本 2 開始接受它的框架,人們很快就注意到了。那是因為 TypeScript 為世界上最著名的程式語言添加了一些急需的、奇妙的超能力。
是的,終於可以編寫原生 JavaScript 程式碼而不用受苦和詛咒自己的出生了!
以下是 TypeScript 帶來的增強功能:
✓ 強型別:最後,字串不再是數字,數字也不是物件,也不是空陣列!
✓ 編譯時型別檢查:如果您的程式碼編譯正確,則或多或少可以保證沒有 JavaScript 執行時的錯誤。
✓ 類別和模組:是的,類別在 ES6 中是標準的,但它們也包含在 TypeScript 中,此外還有一個簡潔的模組系統。
✓ 型別推斷:對於複雜的型別,編譯器可以很容易地推斷出型別,省去了一些麻煩。
✓ Async/await:async/await 關鍵字和模式是基本的,所以不要再亂用 Promises 和 Callbacks!
命名空間、泛型、元組…我們還可以繼續說下去,但足以說明 TypeScript 將最糟糕的開發體驗之一轉變為最好的開發體驗之一。
TypeScript 程式碼片段
TypeScript 的影響是不可否認的。它將像 Google 的 Dart 之類的類似嘗試推出了該領域(儘管它正試圖透過移動開發框架 Flutter 捲土重來),並讓 JS 開發人員看到了更強型別的好處。
因此,像 React、D3、Vue(甚至 jQuery!)這樣的重要函式庫現在都有 TypeScript 版本,並且在世界上最好的軟體商店中,所有 JavaScript 程式碼都被編寫為 TypeScript 程式碼。TypeScript 標頭現在也可用於 Node.js(老實說,如果一個節點可以改善其並發處理能力並修補其糟糕的記憶體管理,它將永遠存在)。
您可能會驚訝地發現,Node.js 的創建者在公開表示 後悔 他的創作之後,正在研究以 TypeScript 作為主要語言的新執行環境(目前沒有官方網站;只有 GitHub 儲存庫)。
最好的消息? 學習 TypeScript 的門檻很低,但未來可以獲得可觀的收益。如果您是中階 JavaScript 開發人員,您將在兩天內獲得足夠的 TypeScript 知識,以便移植所有現有程式碼!
結論與免責聲明
某些特定的語言與本文中的語言一樣受歡迎,但由於各種原因未包含在列表中。快速瀏覽一下:
- Golang:已經被確立為一種主流語言,如果不是非常流行的話。我們確實相信,在這一點上,Golang 有幾個競爭對手將保持其較低的市場佔有率。
- R:R 在數據科學家之間已經很流行,但它不太可能吸引應用程式開發人員。此外,我們不能忘記機器學習函式庫正慢慢進入所有主要語言(天啊,現在連 PHP 都有了!),所以您需要做的就是等待一段時間。🙂
- Swift:Apple 牢牢地控制著它的生態系統,而 Swift 是那裡唯一可用的語言。早些時候,Objective C 風靡一時,就像現在的 Swift 一樣。我們認為它作弊,因此拒絕將其包含在此處。😀
未來總是不確定的,而您職涯發展的一種方式是堅持使用已經在使用的工具,拒絕「分心」。如果您這樣做,Java、PHP、Python、Ruby 等都是值得堅持的優秀語言。然而,對於我們中的一些人來說,墨守成規是不夠的。他們想出去探索,並在未來下重注。如果您屬於後者,那麼這五種語言中的一種應該在您的待辦事項清單上。
最後,在嘗試評估一種語言時,不要讓學習的努力讓你感到不知所措,因為它並不多。如果您已經了解幾種程式語言,則最多可以在兩個月內學會其中任何一種,每週花費 5-6 小時。而未來可能產生的幸福感和金錢回報將是數倍。
我們在這裡錯過了一些重要的語言嗎?或者我們對這裡列出的語言有任何誤解?如果是這樣,請發表評論並幫助我們改進。 🙂