22 歲,對于一個技術人來說可謂正當壯年。但對于一門編程語言來說,情況可能又有不同。各類編程語言橫空出世,紛戰不休,然而 TIOBE 的語言排行榜上,Java 卻露出了明顯的頹勢。這個老牌的語言,未來會是怎樣?青鳥作為專業的IT培訓機構,我們負責教人編程,也負責教人“熱門的”編程語言,學員們來學習就想要學習最實用的編程語言,所以我們密切注視著各類編程咨詢,*時間告訴你學什么才最有用,學什么才能讓你更搶手,今天我們就來說說JAVA!
從 1995 年*個版本發布到現在,Java 語言已經在跌宕起伏中走過了 22 年,*的 Java 版本也已經迭代到 Java 9。當年 Java 語言的跨平臺優勢如今看來也只不過是家常小菜,Go、Rust 等語言橫空出世,進一步拓寬了編程語言的邊界。當年發明 Java 語言的 Sun 公司早已被Oracle 收購,Oracle 現在也正處于水深火熱的云計算浪潮當中,甚至連 Java 之父 James Gosling 也加入了當今世界*的云計算公司 AWS。
Java 語言發展的這 20 年也正是全球互聯網迅猛發展的 20 年,Java 語言同時也見證了電商浪潮、移動互聯網浪潮、大數據浪潮、云計算浪潮,所以在現今各大互聯網公司身上都能看到 Java 的身影。
縱看 Java 語言的發展,不禁讓人聯想到辛棄疾的一首詞:
千古江山,英雄無覓,孫仲謀處。舞榭歌臺,風流總被雨打風吹去。斜陽草樹,尋常巷陌,人道寄奴曾住。想當年,金戈鐵馬,氣吞萬里如虎。元嘉草草,封狼居胥,贏得倉皇北顧。四十三年,望中猶記,烽火揚州路。可堪回首,佛貍祠下,一片神雅社鼓。憑誰問,廉頗老矣,尚能飯否?
TIOBE 的語言排行榜顯示,自 2016 年初 Java 語言就出現了明顯的下頹趨勢,開發者社區也出現了一些唱衰 Java 語言的論調,編者心中也有些許疑問:Java 老矣,尚能『飯』否?
與其他語言的對比,Java 的優勢
Java 是*的語言么?不是,因為在每個領域都有更合適的編程語言。
C 語言無疑是現代計算機軟件編程語言的王者,幾乎所有的操作系統都是 C 語言寫成的。C++ 是面向對象的C 語言,一直在不斷的改進。
JavaScript 是能運行在瀏覽器中的語言,豐富的前端界面離不開 Javascript 的功勞。近年來的 Node.js 又在后端占有一席之地。Python 用于系統管理,并通過高性能預編譯的庫,提供 API 來進行科學計算,文本處理等,是 Linux 必選的解釋性語言。
Ruby 強于 DSL(領域特定語言),程序員可以定義豐富的語義來充分表達自己的思想。Erlang 就是為分布式計算設計的,能保證在大規模并發訪問的情況下,保持強壯和穩定性。Go 語言內置了并發能力,可以編譯成本地代碼。當前新的網絡相關項目,很大比例是由 Go 語言編寫的,如 Docker、Kubernetes 等。
編寫網頁用 PHP,函數式編程有 Lisp,編寫 iOS 程序有 Swift/ObjectiveC。
一句話概括,能留在排行榜之上的語言,都是好的語言,在其所在的領域能做到*。
那么,Java 語言到底有什么優勢可以占據排行榜*的位置呢?
其一,語法比較簡單,學過計算機編程的開發者都能快速上手。
其二,在若干了領域都有很強的競爭力,比如服務端編程,高性能網絡程序,企業軟件事務處理,分布式計算,Android 移動終端應用開發等等。
最重要的一點是符合工程學的需求,我們知道現代軟件都是協同開發,那么代碼可維護性,編譯時檢查,較為高效的運行效率,跨平臺能力,豐富的 IDE,測試,項目管理工具配合。都使得 Java 成為企業軟件公司的*,也得到很多互聯網公司的青睞。
沒有短板,容易從市場上找到 Java 軟件工程師,軟件公司選擇Java 作為主要開發語言,再在特定的領域使用其他語言協作編程,這樣的組合選擇,肯定是不會有大的問題。
所以綜合而言,Java 語言全能方面是*的。
Java 未來方向的展望
如今的 Java,已經在功能上相當豐富了,Java 8 加入 Lambda 特性,Java 9 加入模塊化特性之后,重要的語言特性似乎已經都納入進來。如果要說值得考慮的一些功能,我覺得有以下幾點:
模塊化改造完畢之后,可能會出現更多專業的 JDK 發行軟件商,提供在功能方面,比如針對于分布式計算,機器學習,圖形計算等,納入相關的功能庫作為文件。這樣專業行業客戶可以選擇經過充分優化后的 JDK 版本。
Java 語義上對“模式匹配”有更強的支持,如今的 switch 語句能力還是比較欠缺,可以向 Erlang, Scala 等語言借鑒。
多線程并發處理,Java 做的已經很好了。不過我個人覺得可以在多進程多線程配合,以及語言級別數據管道表示上,可以進行改造和優化。
JDK9 會有 HTTP/2 client 端的能力,但毫無疑問會有更多更好的三方庫出現,JDK 可以和這些三方庫通力合作,提供一個更好 API 界面和 SPI 參考實現。
目前 Java 在云計算方面遇到的*問題還是占用內存過大。我個人認為從兩個方面來看:
1. 如果該應用的確是長時間運行的服務,可以考慮結構清晰的單體結構,算下來總的內存消耗并不會比多個微服務進程占用的更多。
2. 微服務應用,未來可以采用編譯成本地代碼的方式,并使用優化過的三方庫,甚至本地 so 文件,減少單個進程的過多內存占用。
3. 安全框架更加清晰,SPI 可以允許三方庫提供更強大更高效的安全功能。
4. JavaEE 方向則有更多的改進的地方:
5. EJB 重構目前的 Corba 分布通信基礎,參考 gRPC 進行遠程系統調用。
6. 分解 EJB 規范,把JVM 進程相關的特性,如注入 / 加強 / 事務 / 安全都統一到 CDI 規范中;對EJB 進行裁剪,保留遠程訪問特性和作為獨立執行主體分布式對象能力。
7. 加強 JMS 和 MDB,媲美 Akka 目前的能力。
8. JaxRS 適度優化,不必要依賴 Servlet,或者適度調整,來提供更大的能力。
9. JPA 借鑒 JDO,以及融入一部分特性,做到對 NoSQL 更良好的支持。
一些個人的心得和經驗分享
軟件業有個 Hype Cycle 模型,有很多技術受到市場的追捧而成為明星,也有些身不逢時而備受冷漠。
EJB 是一個廣泛被誤解的技術,在企業應用分布式計算方面,EJB 給出了非常完備的技術體系。只是目前所有的應用服務器都實現的不夠好。對于目前打算轉型微服務設計的架構師,EJB 也是一個非常值得學習借鑒的技術。
Java 的慢是相對的,有些是當前實現的不夠好。比如原來有人對 Java 的網絡 IO 性能提出質疑,然而穩定的 Netty 框架出現后,就沒有人再懷疑 Java 處理網絡 IO 的能力了,甚至在 JDK8 中自身的 NIO 也相當出色。要知道 Java 為了實現跨平臺能力,采用的是各個操作系統的一個公共能力子集,而且其設計哲學就是給出 API 框架,實現是可以自行實現和加載服務的。
Java 在處理界面方面,Swing 和 Swt 表現可圈可點(Idea和 Eclipse 分別采用的圖形基礎庫),JavaFX 已經運用到很多的行業軟件上。在瀏覽器界面表現上,SpringMVC 在模板渲染頁面方面使用者最多;GWT 似乎使用者不多,但基于 GWT 的 Vaddin 在國外企業中用戶眾多,而且很多服務器管理軟件也用 GWT 寫成;JSF 也在企業軟件中得到廣泛使用,狀態信息直接在后端進行管理,配合 js 前端框架,可以充分發揮各種技術的優勢。
CDI 規范和 SpringFramework 在服務器程序中作用類似,Spring 是一套設計優良,完備的框架,CDI 具有更強的可擴展性。通過對注解的語義定義,一家公司可以維護一套自己的組件描述語言,來做到產品和項目之間的軟件快速復用。CDI 是定義軟件組件內部模型的*方式,只可惜了解的軟件工程師實在太少。
微服務架構在互聯網應用,快速開發運維管理方面,配合容器技術使用,有很強的優勢。但并不是所有的應用場景都適合微服務:強事務應用系統,采用單體結構的軟件體系設計,更容易從整體方面維護,也能獲得更優的性能。Java 語言無論在微服務還是單體結構,都有成熟穩定的軟件架構供選擇使用。所以關于JAVA“尚能飯否?”你一定有了自己的了解了吧!那么你想要學習JAVA了,要怎樣才能夠更高效率的學習呢?來青鳥,告訴你如何6個月0基礎學習JAVA,而且還包就業哦!