有不少同學在剛接觸Java時會崩潰,如Java糟糕的入門體驗、核心標準庫不夠用、最啰嗦的語言Java、復雜的 “企業級”產品、庫作者處理的問題越來越復雜、太多的抽象性、非本地的FP支持等等原因。
今天我們一起來看一下,覺得Java技術難學的原因:
1、Java糟糕的入門體驗
作為一個擁有超過15年Java開發經驗的開發者,我對Java生態系統了如指掌。所以我知道我可以安裝哪種JDK、如何去管理多個JDK版本、有哪些IDE、構建工具、常用庫等。
很多任務都是一次性設置的,但無形之中也給入門級小白一種印象:Java需要復雜的設置,沒有繁瑣的IDE設置就無法使用Java。
2、核心標準庫不夠用
通過調研還發現了以下一些問題:一個常見的問題是Java的核心標準庫不夠用,許多任務需要一些外部庫,這也是事實。沒有內置的測試庫、JSON(取消)編組支持等。雖然Java NIO是一個很大的進步,但與其他語言相比Java中的文件I/O仍然是復雜而冗長的。沒有內置的(類似Kotlin)對不可變數據結構的支持。
我的觀點:Java有很好的標準庫,如Collections、Streams、Java NIO等。使用文件I/O、JDBC等仍然感覺非常低級和冗長。有很好的第三方庫,如commons-lang、commons-io、Jackson、Gson、Vavr、Eclipse Collections來執行這些任務。添加第三方庫并不是一個大問題。挑戰在于當有太多的選擇時,新手們會感到困惑不知道該選哪一個。
3、 復雜的 企業級產品
另一個常見的話題是關于復雜的企業級產品,如ClassLoaders、JNDI、OSGI、JMX、Reflection、AOP、ByteWeaving、Dynamic Proxies、應用服務器等。
我的觀點:十年前,在EJB 2中使用EAR打包,處理ClassLoader的問題是多么令人沮喪。另外,在JBoss/WildFly等應用服務器中部署Spring應用時也有處理類加載器問題的經驗。
在過去的7、8年里,我沒有再使用EJB、OSGI、JMX、應用服務器。在現代的Java世界中應用程序被構建成fat jars,而框架則負責做AOP、ByteWeaving、動態代理等。除非你還在開發傳統的應用程序,否則我認為你不會用現代Java技術棧來處理這些問題。
4、庫作者處理的問題越來越復雜
與典型的商業應用開發者相比,高級用戶、庫作者要處理的復雜性達到了全新的高度。一些高級用戶提到關于Java的挑戰是:類的加載、類型擦除、功能性接口的異常語義、反射、原理、空值、默認可變性、多線程、通用平等。
因為沒有建立過任何復雜的庫,所以沒有太多的話語權。除此以外還有一些問題:微服務的高內存占用率、Streaming arch分層在一個老化的生態系統上,其后果不甚明了。
5、太多的抽象性
雖然現代框架使專業開發者很容易構建應用程序,但對于新手來說卻變得很困難。大多數的框架都是非常抽象的。當他們試圖多了解一些東西的時候,就像剝洋蔥一樣,發現需要了解的東西無窮無盡。
6、非本地的FP支持
雖然從Java 8開始,Java增加了一些函數式編程支持,但Java絕對不是作為函數式編程語言設計的核心。有些人提到他們可以用FP構建軟件,比用OOP好用得多。你也可以在Java中應用一些FP的概念,如純函數、不變性,但不會像Clojure或Haskell等FP語言那樣自然。
7、其他原因
使用舊版應用程序的幾率更高;糟糕的面試經歷。
8、x語言很復雜不可信
之所以問 “為什么你認為Java很復雜?”是為了了解別人的觀點。雖然我不同意一些觀點,而且有些事情對我來說不是什么大問題,但這有助于我理解其他人的想法。
任何語言、框架和庫都是為了解決一個主要問題而創建的,在這個過程中,它可能也會有一些非主要的功能。Java被設計成面向對象的語言,如果你想讓它成為一種功能編程語言,它就沒有Clojure或Haskell那么好。每種編程語言都有它的利基領域,比如Python用于機器學習,Go和Rust用于系統編程,Java和Node.js用于企業應用開發等等。
Java的優勢在于建立大型企業應用程序,而不是在控制臺中打印 “Hello World”!!!。Java生態系統的發展是為了滿足企業的需求,并提高開發人員的生產力。在一個典型的企業商業應java用中,你需要通過與其他幾個外部系統的集成來構建復雜的業務流程,以及與關系型數據庫、NoSQL數據庫、消息傳遞系統、緩存提供商、云服務等進行交互。
java培訓可以選擇云和數據,云和數據以高品質教學質量贏得好口碑,為企業輸送大批優質IT人才,致力于培養高級軟件工程師;現開設iava培訓班,還有產品經理、HTML&JS+前端、大數據、UIUE設計、軟件測試等9個精品學科,19所直營分校遍布全國;引大廠技術人才,成立研究院和培訓院,致力于使課程研發和師資培訓精細化、品質化、專業化。