2019年值得學習的編程語言,竟然不是Java
前陣子,我看到國外開發者平臺 HackerRank 發布了一份開發者技能報告,其中有一項關于《2019年你想學的編程語言是哪個》的調查結果如下:
2019 年程序員最想學習的編程語言 Top 3 分別是 Go、Kotlin 和 Python,其中 Go 以 37.2% 的比例排在首位。
最近幾年,Go 語言的發展確實比較迅猛,想來自 2009 年底 Go 語言開源至今,也不過十個年頭。
關于 Go 語言為什么這么火,這里引用一段「左耳朵耗子」對 Go 語言的感受:
1. 語言簡單,上手快。
2. 并行和異步編程幾乎無痛點。
3. Go 語言的 lib 庫麻雀雖小五臟俱全。
4. C 語言的理念和 Python 的姿態。
其實,一個技術是否能發展得起來,關鍵看三點:
1. 有沒有一個比較好的社區。像 C、C++、Java、Python 和 JavaScript 的生態圈都非常豐富和火爆,尤其是有很多商業機構參與的社區,顯然是人氣爆棚的狀態,比如 Linux 社區。
2. 有沒有一個工業化的標準。像 C、C++、Java 都是有標準化組織的,尤其是 Java,在架構上還搞出了像 J2EE 這樣的企業級標準。
3. 有沒有一個或多個殺手級應用。C、C++ 和 Java 的殺手級應用自然不用多說,就算是 PHP 這種還稱不上優秀的編程語言,因為是 Linux 時代的第一個殺手級解決方案 LAMP 中的關鍵技術,所以也相應地發展起來了。
上述的這三點都非常關鍵,新的技術只需要占到其中一到兩點就已經很不錯了,而 Java 三點全占,所以現在才發展得這么好。
除了上面這三點以外,還有一些其它的因素:
• 學習曲線是否低,上手是否快。這點非常重要,C++ 在這點上越做越不行了。
• 有沒有一個不錯的提高開發效率的開發框架。如:Java 的 Spring 框架,C++ 的 STL 等。
• 是否有一個或多個巨型的技術公司作為后盾。如:Java 和 Linux 后面的 IBM、Sun……
• 有沒有解決軟件開發中的痛點。如:Java 解決了 C 和 C++ 的內存管理問題。
用這些標尺來量一下 Go 語言,我們會發現:Go 語言不僅容易上手,還解決了并發編程和寫底層應用開發效率的痛點;背后有 Google 這個世界一流的技術公司;它的殺手級應用是 Docker,而 Docker 的生態圈在這幾年完全爆棚了。
其實,我跟大家一樣,也曾對“程序員是否有必要掌握多門語言”感到困惑,想起之前看 Google 研究總監 Peter Norvig 發表過一個觀點:
一個優秀的程序員至少應該掌握 6 種編程語言,其中包括一種支持類抽象的,如 Java 和 C++;一種支持函數抽象的,如 Lisp 或 ML;一種支持語義抽象的,如 Lisp;一種支援聲明規范的,如 Prolog 或 C++ 模板;還有一種支援協程的,如 Icon 或 Scheme,一種支持并發的,如 Sisal。
其實,精通一門編程語言和掌握多門編程語言,是不沖突的。我建議所有開發者都能有一到兩門精通的主語言,并且可以掌握一些其他的語言,就像 Peter Norvig 說的,最好的就是每種類型的語言都可以掌握一門。
所以,對 Java 開發者來說,學習并掌握 Go 語言是一個很不錯的選擇。目前 Go 語言已經被大規模使用,單就我知道那些的來說,目前 Go 主要應用于這些系統:
1. 服務器編程,以前你使用 C 或者 C++ 做的那些事情,用 Go 來做很合適,例如處理日志、數據打包、虛擬機處理、文件系統等。
2. 分布式系統、數據庫代理器等,例如 Etcd。
3. 網絡編程,這一塊目前應用最廣,包括 Web 應用、API 應用、下載應用,而且 Go 內置的 net/http 包基本上把我們平常用到的網絡功能都實現了。
4. 數據庫,前一段時間Google開發的Groupcache,Couchbase的部分組建,Tidb,Cockroachdb,Influxdb 等。
5. 云平臺,目前國外很多云平臺用 Go 開發,CloudFoundy 的部分組建,前 VMare 的技術總監自己出來搞的 Apcera 云平臺等。