Spring框架和微服務(wù)體系結(jié)構(gòu)實(shí)際上已經(jīng)成為Java世界中的標(biāo)準(zhǔn)。但是,不斷發(fā)展的行業(yè)要求軟件工程師在掌握現(xiàn)有Java技能的基礎(chǔ)上,還要開發(fā)新的Java技能。
Java作為一門長(zhǎng)青的編程語(yǔ)言,在比較長(zhǎng)的發(fā)展時(shí)間里,時(shí)常會(huì)有唱衰的聲音。但Java一直在不斷向前發(fā)展,受歡迎程度也一直很高,TIOBE榜單常年保持在Top2,未來(lái)Java將如何發(fā)展呢?本文搜集了一些開發(fā)者和相關(guān)從業(yè)人員的看法。
Hot的Java應(yīng)用場(chǎng)景
在紛繁復(fù)雜的編程語(yǔ)言中,Java一直是深受開發(fā)者和企業(yè)歡迎的編程語(yǔ)言。從2001年起,Java在TIOBE榜單中幾乎排在首位,偶爾排在第二位。受歡迎程度如此高、使用廣泛的編程語(yǔ)言肯定會(huì)有一些需要掌握的特定技能。
CVCompiler從AngelList,StackOverflow,LinkedIn等網(wǎng)站收集了300個(gè)Java招聘需求,并從這300個(gè)招聘需求中統(tǒng)計(jì)出了企業(yè)想要Java程序員掌握的技能。
除了需要掌握的技能,哪些Java使用場(chǎng)景受歡迎呢?
用于Web編程
大多數(shù)企業(yè)都喜歡使用SpringMVC構(gòu)建Web應(yīng)用程序的后端,使用Angular或React.js前端框架來(lái)構(gòu)建應(yīng)用程序的前端。這意味著,Java程序員雖然不需要完全掌握J(rèn)avaScript前端框架的知識(shí),但是需要了解Java代碼如何與前端框架進(jìn)行交互。
受歡迎的Java后端框架是ApacheStruts。與Spring一樣,ApacheStruts自5年前發(fā)布以來(lái),一直在跟隨Java的更新步伐,不同的是,SpringMVC只是復(fù)雜解決方案的一部分,而ApacheStruts可以處理應(yīng)用程序的多個(gè)方面,例如測(cè)試或數(shù)據(jù)訪問(wèn)。
數(shù)據(jù)處理
很多人都認(rèn)為大數(shù)據(jù)并不是Java擅長(zhǎng)的應(yīng)用場(chǎng)景,但是CVCompiler的調(diào)查結(jié)果顯示Java在大數(shù)據(jù)方面的應(yīng)用正在崛起,甚至CVCompiler認(rèn)為在數(shù)據(jù)科學(xué)的市場(chǎng),Java可能會(huì)與Python相提并論。
很多企業(yè)招聘人員都希望Java應(yīng)聘者能夠熟悉ApacheKafka、Hadoop、Azure以及Spark等與大數(shù)據(jù)相關(guān)的解決方案。
微服務(wù)
很多經(jīng)驗(yàn)豐富的開發(fā)人員都認(rèn)為Java是微服務(wù)開發(fā)的佳編程語(yǔ)言,Java本身也在積極支持微服務(wù),例如2019年,JakartaEE社區(qū)的優(yōu)先級(jí)就是支持微服務(wù)。
Java微服務(wù)框架也經(jīng)歷了大洗牌,SpringBoot和SpringCloud進(jìn)入晚期大眾階段,它們已經(jīng)成為企業(yè)信任的Java微服務(wù)開發(fā)框架。Helidon和Microprofile進(jìn)入早期采用者階段,不過(guò)vert.x可能會(huì)因?yàn)橄鄬?duì)利基的市場(chǎng)無(wú)法跨過(guò)早期采用者階段。
數(shù)據(jù)庫(kù)和Web服務(wù)器
提到Java在數(shù)據(jù)庫(kù)方面的使用場(chǎng)景,相信很多人都會(huì)想到目前比較流行的NoSQL數(shù)據(jù)庫(kù)Cassandra和MongoDB。而在Web服務(wù)器方面,Tomcat和Apache也絕譵是領(lǐng)導(dǎo)的角色。
國(guó)外開發(fā)者如何看待Java的發(fā)展趨勢(shì)
從上文中我們可以看到,時(shí)至今日,Java仍然在眾多使用場(chǎng)景中占據(jù)著舉足輕重的位置。那么,Java未來(lái)將如何發(fā)展呢?我們搜集了一些國(guó)外開發(fā)者對(duì)Java的趨勢(shì)判斷,以及他們認(rèn)為現(xiàn)階段需要掌握的Java相關(guān)技能。
Red Monk創(chuàng)始人James Governor
在不久的將來(lái),我們可能會(huì)看到Quarkus(KubernetesNativeJava框架)等Java框架及其相關(guān)技術(shù)會(huì)越來(lái)越受到關(guān)注。例如,它可能是Vert.x,因?yàn)镴ava正在積極響應(yīng)和參與容器革命。
Java Champion,JavaOne Rockstar Consultant Adam Bien
有一個(gè)現(xiàn)象有點(diǎn)讓我驚訝,那就是與 Spring 相比,Spring Boot 的受歡迎程度居然較低。另外,JPA (Java Persistence API),Java EE API 之一,被列為獨(dú)立項(xiàng)目,加上對(duì) SQL 技能的強(qiáng)烈需求,都表明了 Java 市場(chǎng)對(duì)關(guān)系數(shù)據(jù)庫(kù)的持續(xù)興趣。
另外,Maven 作為領(lǐng)跣的構(gòu)建工具,市場(chǎng)體現(xiàn)出了對(duì) Maven 技能的強(qiáng)烈需求,而 Apache Kafka 雖然非常流行,但是并不是適用于所有項(xiàng)目的通用架構(gòu),所以市場(chǎng)需求反響不是很強(qiáng)烈。
作為一名 Java EE 開發(fā)人員,如果想要在市場(chǎng)中具備強(qiáng)勁的競(jìng)爭(zhēng)力,那么他需要掌握以下技能,JPA、SQL、JMS (Kafka 也是一種 JMS 實(shí)現(xiàn))、JAX-RS (REST)、Maven (Java EE 中的缺省值)、Git(事實(shí)上的標(biāo)準(zhǔn))。
Netflix 的高級(jí)軟件工程師 Alex Borysov
如今,Spring 框架和微服務(wù)體系結(jié)構(gòu)實(shí)際上已經(jīng)成為 Java 世界中的標(biāo)準(zhǔn)。但是,不斷發(fā)展的行業(yè)要求軟件工程師在掌握現(xiàn)有 Java 技能的基礎(chǔ)上,還要開發(fā)新的 Java 技能。Service Mesh 和 service proxy 正在改變微服務(wù)的開發(fā)方式,所以 Java 程序員也要積極學(xué)習(xí) Istio、Linkerd2 或 Envoy。另外,隨著越來(lái)越多的公司轉(zhuǎn)向公有云和混合云,擁有亞馬遜 AWS、谷歌云平臺(tái)或微軟 Azure 的經(jīng)驗(yàn)非常重要。
Java 領(lǐng)域中,反應(yīng)式編程處于上升趨勢(shì),雖然我認(rèn)為它不會(huì)取代傳統(tǒng)的命令式編程,但是我們需要了解什么是反應(yīng)式編程,反應(yīng)式編程如何改變 Java 生態(tài),以及一些反應(yīng)式框架,例如 Project Reactor、RxJava、Spring WebFlux 等。
在數(shù)據(jù)存儲(chǔ)方面,NoSQL 和多語(yǔ)言持久性是當(dāng)今工程師必備的 Java 技能。NewSQL 的發(fā)展同樣值得期待,例如 Google Spanner 就是作為服務(wù)在生產(chǎn)環(huán)境中應(yīng)用的一個(gè)佳案例。
Java Champion,Sebastian Daschner
在企業(yè) Java 項(xiàng)目中,我已經(jīng)不太看得到 SOA 的需求,而 Spring 和 Spring Boot 在實(shí)際應(yīng)用中經(jīng)常同時(shí)使用,所以這時(shí)探究?jī)烧叩膮^(qū)別就不是特別有意義了。另外,我看到大家對(duì)各種云原生技術(shù)的興趣越來(lái)越大,如果這種趨勢(shì)繼續(xù)發(fā)展下去,相信未來(lái)幾年,Java 也會(huì)變得更加有趣。
除了以上開發(fā)者,InfoQ 首席編輯 Charles Humble 也針對(duì) Java 的未來(lái)發(fā)展趨勢(shì)發(fā)表了自己的看法,他認(rèn)為:
Java 模塊化系統(tǒng)采用也是一個(gè)很有趣的話題。我敢肯定 OSGI 擁護(hù)者對(duì)于將它放在創(chuàng)新者階段會(huì)有意見,但這樣做可能是對(duì)的。
我想可以將 Clojure 移到晚期大眾階段。當(dāng)然,人們還在用它,但我感覺到它的使用量在下降,而且它本身面向的就是利基市場(chǎng)。
我會(huì)將 Ceylon 移掉。它一直以來(lái)都沒(méi)有獲得太多關(guān)注,而且我不認(rèn)為進(jìn)入 Eclipse 會(huì)給它帶來(lái)多大幫助。這個(gè)項(xiàng)目的活躍度很低,過(guò)去 6 個(gè)月只有 10 個(gè)代碼提交。
測(cè)試框架的趨勢(shì)看起來(lái)相當(dāng)穩(wěn)定。我們要把它移掉嗎?從采用率來(lái)看,我給它們排個(gè)順序:JUnit、TestNG/Cucumber、Spock,但似乎變化不大?
SmartBear 近收購(gòu)了 Cucumber,可能會(huì)促進(jìn)它的發(fā)展,但即使是這樣,我仍然傾向于把它們移掉。
人們似乎對(duì) JVM 上的 Node 不感興趣?我想可以把它移掉。
我很想把 Kotlin 移到早期大眾階段,它是我近來(lái)經(jīng)常聽到的一門 JVM 編程語(yǔ)言,這要得益于 Android 開發(fā)的流行??梢哉f(shuō),它已經(jīng)越過(guò)了鴻溝,但仍然落后于其他編程語(yǔ)言,比如 Groovy、Swift 或 Go 語(yǔ)言。
我覺得 Scala 可以留在晚期大眾階段,人們會(huì)逐步棄用它。