Kotlin 喧囂過後,談談 Java 程式設計師未來的出路

發表於2017-06-11

自從谷歌 I/O 2017宣佈將支援 Kotlin 作為 Android 開發的 First-Class 語言,各種 Kotlin 能否取代 Java 的文章、爭論層出不窮。 作為一名老 Java 程式設計師,雖然類似場面見過不少,但心態是比較複雜的。

早在 2009 年,就有了 Scala 是否是 Java 後繼者的爭論。2009年7月 InfoQ 發表的一篇文章:「Roundup: Scala as the long term replacement for Java」,還談到了 Java 之父 James Gosling 也偏愛 Scala 。(參考下圖)

Kotlin 喧囂過後,談談 Java 程式設計師未來的出路

儘管 Scala 在業界的口碑不錯,還受到不少自命極客的程式猿的擁躉。在 Java 程式設計師當中,也掀起了一陣學習 Scala 的風潮。但時至今日,取代 Java,還遠遠談不上。

Java 從誕生到現在,已有22年的歷史。Java 在業界的霸主地位,雖然這些年一直受到 C/C++ 、Node.js 、GO 、Python 等語言的挑戰,但一直穩如泰山。在眾多領域的普及率、Java 不是榜首,也是名列前茅。下圖是 2017年5月 最新的 TIOBE 程式語言排行榜

Kotlin 喧囂過後,談談 Java 程式設計師未來的出路

Java 依然是遙遙領先,不過相比較去年同期,Java 下降了 6.32% 。Java 的普及率從 2016年年初以來一直呈下降趨勢,Java 程式設計師的未來之路該如何走,還是值得思考一下。

懂得居安思危、未雨綢繆,未來的運氣才不會太差。

Java 生態圈

Java 的生態環境開放、自由,在Sun/Oracle、Google、Apache、Eclipse基金會等各大廠商,還有技術大牛的共同努力下,Java 的生態圈異常繁榮,各種優秀的開源框架層出不窮。

Spring Boot

Spring Boot 是 Pivotal 團隊推出的一個支援快速開發的框架,伴隨 Spring4.0 而生,繼承了 Spring 的優秀特質,簡化了使用 Spring 編碼、配置、部署的過程,使專案的開發變得簡單、敏捷。

Spring Cloud

Spring Cloud 是基於 Spring Boot 的一整套分散式系統下的微服務構建框架,包含了眾多的子專案,如 Spring Cloud Config 、Spring Cloud Stream 等。

具體可參考:http://projects.spring.io/spring-cloud/

Hadoop/Spark

Hadoop 是首個獲得極大應用的大資料框架,是大資料領域標誌性的解決方案。

Spark 通過完善的記憶體計算和處理優化,極大的提升了速度,是具備流處理能力的下一代批處理框架。

Spark 體系還包括一系列附加庫,如Spark Streaming 、Spark MLlib、Spark GraphX、SparkNet、CaffeOnSpark等。

Kafka

Kafka 是 LinkedIn 使用 Scala 開發的一個分散式訊息中介軟體,可以實現不同應用之間的鬆耦合,由於其可擴充套件、高吞吐、低延遲、高可靠等特性而被廣泛使用。

具體可參考:https://kafka.apache.org/intro

ElasticSearch

ElasticSearch 是基於 Lucene 的實時分散式搜尋引擎,由於其搜尋穩定、可靠,速度快、安裝方便等特點,是使用最廣泛的開源搜尋引擎之一。

具體可參考《Elasticsearch: 權威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

Nutch

Nutch 是 Apache 旗下的高度可擴充套件、可伸縮、可插拔的開源網路爬蟲框架,功能完整。

當然爬出框架還有很多:Heritrix、Crawler4j、WebCollector、WebMagic、SeimiCrawler、HtmlUnit 等,可根據實際專案需要選擇。

在爬蟲領域,Python 可能使用的更多一些,入門也簡單。

爬蟲的難點不在於語言的選擇,無論 Java 、Python 都可以勝任,關鍵還是反反爬策略的制定,以及各種實戰的積累。

ethereumj

ethereumj 是以太坊協議的純 Java 實現。不過在區塊鏈領域,Go 語言的使用率可能更高一些。開發人員可以酌情選擇。

程式碼可參考:https://github.com/ethereum/ethereumj

Deeplearning4J

DeepLearning4J(DL4J)是基於Java語言的分散式深度學習框架,在機器學習領域應用廣泛。

入門可以參考《DL4J快速入門》:https://deeplearning4j.org/cn/quickstart

不過由於谷歌的 TensorFlow 提供的 java API 也會日趨完善,目前不少 java 程式設計師也會選擇 TensorFlow 作為機器學習的首選框架。

以上只是個人正在使用或練手,並且比較看好的一些開源框架。如果想了解更多,可以去 Github 上搜尋。

譬如,在 GitHub 的 Search 框,輸入 java stars:>10000,可以搜尋到星數最多、最熱門的一些 Java 開源框架,如圖:

Kotlin 喧囂過後,談談 Java 程式設計師未來的出路

如果想發掘 Java 前沿的開源專案,可以選擇 Explore,點選 Trending 按鈕,就可以看到近期熱門的一些開源專案。

可以選擇 today「當天熱門」、this week「一週熱門」和 this month「一月熱門」,還可以在右側選擇語言來檢視,比如選擇 Java 語言,如圖:

Kotlin 喧囂過後,談談 Java 程式設計師未來的出路

注:覺得好的,記得點選 star,大神貢獻程式碼也需要鼓勵  :)

可以看到,得益於最近被谷歌欽點為 Android 的官方語言,JetBrains 的 Kotlin 這一週成了最大的熱門。

Java 的生態圈如此繁盛,Java 離隕落還尚需時日吧。

普通的 Java 程式設計師能更多的學習、使用這些優秀的框架,有能力的還可貢獻一些程式碼,融入這個繁榮的生態,在我看來是上上策。

JVM 語系

Java 功能強大、生態豐富,已無需多言。但型別、語法與程式設計正規化方面,存在一些侷限性,也長期為人所詬病。

所以,有不少開發人員試圖去尋求其他語言,既可以突破 Java 的這些侷限,又可以與 Java 和諧共處。

Java 的祖師爺們也是非常明智,一開始就將程式語言 Java 與執行時環境 JVM 分離。

JVM 負責與作業系統的互動,遮蔽了具體作業系統的細節,制訂了一整套生成位元組碼的規範,使得前面這一構想得以順利實施。

如今有眾多語言執行在 JVM 上,Groovy、Scala、Kotlin、Clojure 可能算得上是其中的佼佼者。

Groovy

Groovy 是類似 Ruby 的動態語言,適合編寫指令碼、外掛、測試例,DSL (領域特定語言)等。知名的自動化建構工具 Gradle 主要就基於 Groovy 。

Scala

Scala 的設計初衷,就是在 JVM 上整合物件導向與函數語言程式設計的各種特性。

大名鼎鼎的大資料處理框架 Spark、訊息中介軟體 Kafka、用於構建可容錯,可擴充套件、高併發應用的Akka,都是基於 Scala 語言編寫。

Kotlin

前幾日剛升級為 Android 官方開發語言的 Kotlin ,近期是一個熱門。從前面講到的 Github 上的 star 指數也可窺見一斑。

基於 Kotlin 的庫和框架、官方工具的支援、教學視訊、文件等,也肯定會層出不窮。

Clojure

Clojure 被認為是基於 JVM 的 Lisp 方言,是函數語言程式設計的鐵桿。知名的大資料處理框架 Storm 主要就是由 Clojure 語言編寫而成。

Ceylon

Ceylon 是面向企業級應用設計開發的強靜態型別程式語言,支援 Java 和 JavaScript 虛擬機器。

具體可參考:https://ceylon-lang.org/documentation/current/

下圖是 2017 年的 JVM 語言使用率調查:

Kotlin 喧囂過後,談談 Java 程式設計師未來的出路

來源:Baeldung,連結:http://www.baeldung.com/java-in-2017

注:Groovy 達到了將近40%的份額,有點出乎我的意料。另外,得益於谷歌這麼推一把,Kotlin 後續的比例有望來個大躍進。

2008 年開始,Oracle主辦的 JVM 語言峰會,為 JVM 語系的架構師、設計師、工程師,提供了非常好的開放式合作的機遇。

順便說一下,今年的 JVM 語言峰會,時間:7月31日~8月2日,地點:Oracle Santa Clara Campus,有興趣的童鞋可以關注一下。

作為一名 Java 程式設計師,如果要選擇第二門程式語言、或想來個多語言程式設計的話,選擇 JVM 系的語言顯然是一個非常不錯的選擇。

選擇 JVM 系語言的一大優勢是,前期可以使用熟悉的 Java 搭架子,區域性功能優先嚐試一下新語言,如此風險最小,與 Java 可以實現無縫切換。

至於具體如何選擇,就要看你在功能性、實用性、舒適性、有趣性之間,如何取捨了。

結語

Java 自身在效能、語法、程式設計正規化等方面,也是在不斷地提高改進。

譬如 Java 8 引入了 Lambda 表示式、Optional、Streams、Date/Time API 等,Java 9 帶來了 Jigsaw(模組化)等。

Java 程式設計師可以適時的與時俱進。

不過,谷歌等其他廠商由於對 Java 不具備掌控力,還有吃官司的風險,尋求 Java 的替代方案,動機是存在的。

所以,作為 Java 程式設計師,過於依賴 Java,也是比較有風險的。

適時的主動去改變,不要讓自己哪天陷於被動。

除了學習第二、第三程式語言,程式設計師可以把更多的重心,放在演算法上。

以後的生活無處不演算法,從娛樂影視推薦、新聞資訊過濾,到出行購物、住宿交友等等,我們都離不開演算法。

儘管許多優秀的演算法,包括最前沿的深度學習學法,都會有大牛奉獻開源實現,但只有其中的原理深刻理解了,才能掌握、並利用好這些演算法。

後記

技術的更迭,有時候會來的很突然,很猛烈。但系統的更迭,往往會慢得多。

譬如 Cobol 語言,儘管語言本身隕落已超過 20 年,依然能在銀行、證券、保險、電信等行業領域裡見到 Cobol 的身影。

即使幾年之後,Java 因各種陰差陽錯、機緣巧合,開始走向隕落,Java 程式設計師們再混個 20 年,也是毫無壓力。

因為 Java 常年佔據程式語言前列(榜首),目前有太多的平臺使用 Java 了。

Amazon、Google、eBay、阿里、京東、銀行、證券、醫療、移動、電信、ERP等等。

各個領域,各行各業,Java 程式設計師吃老本也能再吃個 20 年……

當然,這只是 Java 抽中了下下籤,您又恰巧選擇了下下策。但願不會如此。

最後,推薦一幅比較全面、而又有趣的 JVM 語系的海盜圖:Pirates of the JVM

連結:https://jaxenter.com/wp-content/uploads/2017/03/Pirates-of-the-JVM-JAXenter-768×4245.png

 

相關文章