究竟什麼語言會是未來的第一編程語言?是Java嗎?

推薦閱讀:面試阿里(P8)竟被MySQL難倒,奮發圖強二次面試斬獲阿里offer

                  前阿里P7架構師,分享多年工作心得and面試經驗,祝你圓大廠夢

                  爲面阿里P8,我肝了一份651個技術分支的腦圖,要麼?(限時領)

一、前言

Java語言長期以來一直霸佔多數熱門編程語言榜單的榜首,可見這是一個備受程序員熱捧的編程語言。Java語言具有什麼魅力?想必這都是已經爲大多數人們所熟知的了,不值得過多贅述。而Java語言發展至今,面對發展勢頭迅猛又十分簡單易學的python,以及各種層出不窮的高級語言,Java程序員的份額已經逐步下降,那它是否還能在未來保持領先的優勢呢?本文就主要從Java語言所不擅長的領域,以及它在自己的領土內受到的對手入手,聊一聊Java語言在未來所面臨的挑戰。

二、Java帝國的今天

2.1 依然霸佔TIOBE熱門編程語言的榜首

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

這是來自權威開發語言排行榜TIOBE的最新數據(截止到2020年4月),可以看到Java語言依然在語言排行榜霸佔第一的位置!雖然下面Python小老弟近幾年搭上大數據的熱潮,發展實爲迅猛,在其他一些排行榜上面甚至超越大哥,但是在TIOBE這樣權威的排行榜上面,Python依舊是小老弟!

2.2 曾經想扼殺Java的微軟宣佈加入OpenJDK

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

這又是一個IT界的真香現場,Sun 公司曾以“歧視使用 Java 軟件”爲由起訴微軟。而微軟在2001年推出新版操作系統 Windows XP 時,故意不安裝 Java 軟件,並且推出高仿 Java 的語言 C# 和 .net 框架。在現在,微軟卻宣佈加入OpenJDK,擁抱Java技術。微軟的宇宙第一 IDE Visual Studio也開始支持Java開發(通過VS的 Visual Studio Live Share ,可以關聯到VS code上面的Java項目,協同編程,間接地支持了Java開發)。

2.3 Oracle發佈開源全棧虛擬機GraalVM

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

這是大名鼎鼎的Oracle公司搞出來的開源產品,從官網“Run Programs Faster Anywhere”這句口號和產品的命名GraalVM就可以看出,GraalVM是升級版的JVM。在GraalVM上面執行Java程序的效率更高(得益於其中的JIT編譯器技術)。最牛逼的地方在於,GraalVM支持多語言應用!在GraalVM裏面,多種不同的語言可以互相傳遞數據,支持Java、Python、Ruby、R、Scala、Kotlin,JavaScript等多種語言。

三、Java帝國受到的挑戰

3.1 後端服務器開發

J2EE作爲Java平臺的重要組成部分,現在廣泛應用於Web後臺服務器開發領域,在這個領域,Java擁有很多好朋友,比如Spring框架,Mybatis和Hibernate等,使得開發者可以快速構建Web應用程序。這是Java帝國一塊重要的領土,但也有很多挑戰。下面就是幾個強大的競爭者。

3.1.1 Python 的競爭

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

Python語言和Java相比,具有下面這些優點:

  • 語法簡單直觀,這意味着開發速度快
  • 第三方庫強大,可以寫複雜的邏輯

當然Python和Java相比執行效率上肯定是更低了,因此主要應用於小型的網站後臺,像阿里這樣的大廠就是擁抱Java後臺的了。

3.1.2 C++ 的競爭

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

C++語言和Java相比,具有以下優點:

  • 執行效率高
  • 對內存管理自由,而Java由GC來管理

C++適合大型高性能的服務器開發。騰訊更多的就是使用C++進行開發,這點和阿里不同。當然C++相比Java,學習和開發的難度更高。

3.1.3 node.js 的競爭

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

node.js的出現大概是前端程序員最高興的事情了,因爲node.js可以讓他們寫的JavaScript代碼運行在服務端,這樣就可以使得前端不用學Java也能自己寫後臺,擺脫後臺爸爸的束縛(誤)。得益於node.js的事件驅動機制,node.js具有很高的併發性能,可以應對大規模的http請求。但也有缺點,因爲js只支持單核,因此沒法充分利用服務器的性能,它不適合CPU密集型應用。

3.1.4 Go 的競爭

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

Go語言是最近很火的開發語言,適合用於開發高性能分佈式系統。這是一個十分強大的競爭對手,被認爲是未來的服務端語言。它具有下面這些優點:

  • 學習難度低,容易上手,易於維護
  • 得益於協程,併發性能優越
  • 編譯型語言,執行效率高

 

3.1.5 小結

可以看到,在後端服務器開發領域,Java在不同方面受到多種語言的競爭,輕量小型的服務器,人們可以選擇Python,node.js或者PHP。而大型高性能服務器,人們可以選擇C++。Go語言就更強大,兼具了比Java更簡單的語法和更高的併發性能,背後又是Google爸爸。因此,在這一領域,Java面臨巨大的競爭壓力。

 

3.2 安卓系統應用開發

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

Java用於安卓應用程序開發已經是很成熟的方案了,目前絕大多數的安卓應用都是用Java寫的。很多安卓程序員也都是學Java過來的。但是隨着新語言不斷推出,和安卓應用開發方式的演變,Java慢慢不再是安卓開發的首選。比如下面這些語言,就是比較熱門的選擇。

3.2.1 Kotlin 成爲 Android 開發的首選語言

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

在2019年的Google I/O 大會上,Google 官方正式宣佈,Kotlin 編程語言現在是 Android 應用程序開發人員的首選語言。Java 佔據 Android 開發絕對統治的時代一去不復返了。Kotlin 可以編譯成Java字節碼,可以在JVM上面運行,也可以編譯成JavaScript,在沒有JVM的機器上運行。Kotlin語言比Java更安全,更簡潔,隨着谷歌爸爸推崇,將來的發展前景可期。

 

3.2.2 Flutter 框架和 Dart 語言

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

這兩個都是谷歌最近推出的東西,Flutter是一款用於幫助開發者在iOS和Android兩個平臺構建高質量原生應用的全新移動UI框架,Dart是由Google開發的一門全新的計算機編程語言,而Flutter使用Dart語言開發。Fuchsia是谷歌開發的一款全新的操作系統,Flutter 是 Fuchsia 的開發框架。Flutter編寫的代碼可以同時生成IOS和Android兩個平臺下的應用程序,因此Flutter框架逐漸熱門。

 

3.2.3 大前端時代下的H5應用

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

隨着時代發展,現在的前端不再只是寫web網頁,而是逐漸發展爲大前端,web,Android,IOS通喫,H5應用的流行就是一個例子,大家應該都發現,手機上開始出現快應用,小程序這些使用前端語言進行開發的app,這些應用使用HTML,JS和CSS進行開發,無需使用Java。相比之下,H5應用輕量級,啓動快,跨平臺,用戶體驗方面也逐漸開始接近原生應用的流暢度。因此大有流行的趨勢。

 

3.2.4 小結

這一小節介紹了安卓開發的現狀,Java作爲曾經的安卓開發第一首選語言,正在面臨諸如Kotlin語言,Flutter和Dart語言等新的開發語言的挑戰,同時,隨着安卓應用開發逐漸出現H5應用的趨勢,前端語言也逐漸開始來到Java的地盤。

四、Java不擅長的領域

4.1 前後端分離和JSP的沒落

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

JSP是一度火爆的技術,Java曾對其寄予厚望,希望通過JSP技術佔領web應用程序領域。然而,隨着網頁開發越來越複雜,用JSP開發網頁變得很麻煩,前端和後端混雜在一起,開發效率很低。因此前後端開始分離,而JSP這種運行於服務器端的網頁程序也就慢慢退出了舞臺。

 

4.2 C#和.NET搶佔桌面程序地盤

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

Java曾經也被廣泛用於開發桌面客戶端,其中Swing框架就是一個有名的GUI框架。然而,曾經想要扼殺Java的微軟,開發了C#語言。C#成爲Java的競爭對手,C#編寫運行於Windows系統的桌面應用程序上具有優勢,Java寫的桌面應用,雖然可以跨平臺到處運行,這對於程序員當然是好事,但是對於用戶來說,在Windows上運行個Java程序還得安裝JRE,顯得十分麻煩。而且,Java桌面程序運行起來比C#程序慢。因此,C#和.NET逐漸佔領了桌面應用程序的市場。

 

4.3 C/C++活躍的嵌入式系統領域

究竟什麼語言會是未來的第一編程語言?是Java嗎?

 

Java曾經是爲了嵌入式系統開發而設計的。然而,Java程序員並不能直接操作硬件,並且,Java是相對較重的語言,對內存等硬件資源不友好,執行效率也相對較低。而在嵌入式系統中,往往只有很少的內存空間,卻對運行效率有很高的要求。因此,在嵌入式領域,更多的是C語言和C++甚至是彙編語言的天下。

 

4.4 小結

這一小節主要針對Java所不擅長的領域來討論。可以看到,Java最爲有名的特性“Write once, run anywhere”,也成了它最大的缺陷:在執行效率上做不到卓越。因此,在桌面應用程序和嵌入式系統兩個領域Java不是王者。而隨着時代發展,前後端分離,JSP也被時代所拋棄。

五、總結

綜上所述,相信大家對於Java語言有了更全面的瞭解,看到了Java背後的芸芸衆生,各種層出不窮的高級語言和新技術,和Java相愛相殺。Java作爲現在世界上最熱門的編程語言,依然在各個不同的領域具有重要的地位 ,Java的強大之處在於,它十分全能,幾乎沒有什麼是Java不能做的,但它並不都是做得最好的,我們也可以看到許許多多的競爭者在不同方面比Java語言更加優越。

但是,我寫這篇文章的目的,不在於比較各個語言的優劣,各種語言都有自己的優點和缺點,我們也不必因爲某種語言更好就着急轉語言。總而言之,語言只是工具,各種語言之間,語法的差別都不是特別大,背後的原理也是大同小異,往往只是多了幾個新特性,而語言背後的編程思維纔是最重要的。

 

六、參考資料

  • TIOBE Index for April 2020
  • 十分鐘帶你瞭解 Oracle 最新的 JVM 技術——GraalVM
  • 初識Node.js之Node與java作爲後臺服務器的對比
  • 使用HTML5開發App
  • Java 失寵,谷歌宣佈 Kotlin 現在是 Android 開發的首選語言
  • Flutter開發之Dart語言基礎
  • 曾經風光無限的jsp技術,爲什麼現在很少有人用了呢?
  • 10個使用Java最廣泛的現實領域
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章