久久久久这里只有精品网,久久一本大到香蕉精品,日本道免费一区日韩精品,日本乱偷中文字幕

<td id="b1usn"></td>
<td id="b1usn"><li id="b1usn"></li></td>
  • 趣招生合作機構(gòu) > 學校機構(gòu) > 廣州源碼時代歡迎您!

    咨詢熱線 400-168-8684

    廣州為什么總有開發(fā)者說討厭Java

    發(fā)布時間:2023-03-07 09:18:27
    點擊查看大圖

    Java入門體驗

    作為一個擁有超過15年Java開發(fā)經(jīng)驗的開發(fā)者,我對Java生態(tài)系統(tǒng)了如指掌。所以我知道我可以安裝哪種JDK、如何去管理多個JDK版本、有哪些IDE、構(gòu)建工具、常用庫等等。

    但是對于剛開始接觸Java的新手而言,他們更多的是這樣來入門的:

    我不確定Oracle JDK是免費使用的還是需要付費的商業(yè)版本,就自身而言,我想使用免費并且開源的版本。

    經(jīng)過進一步搜索,我了解到Oracle JDK有一些免費的替代品,如OpenJDK、AdoptOpenJDK、Amazon Correto Microsoft、 OpenJDK、Zulu、Temurin。但我不知道它們之間有什么區(qū)別,于是我隨便選擇了一個(OpenJDK)。

    安裝了OpenJDK,設(shè)置了JAVA_HOME,并將JAVA_HOME/bin添加到PATH中,我就可以開始使用了。

    打開VS代碼,創(chuàng)建了一個.java文件,復(fù)制粘貼HelloWorld程序,然后做了javac HelloWorld.java nad java HelloWorld 準備寫一個測試。谷歌建議我使用JUnit。

    如何使用JUnit庫?再次在谷歌上搜索,大多數(shù)文章都顯示將JUnit與Maven或Gradle一起使用。

    什么是Maven/Gradle?好吧,它們是構(gòu)建工具。于是我又安裝了Maven/Gradle,搞定…

    如何創(chuàng)建一個Maven/Gradle項目?大多數(shù)教程都展示了使用Eclipse或IntelliJ IDEA創(chuàng)建項目。所以現(xiàn)在我需要安裝一個IDE。

    從IDE創(chuàng)建Maven/Gradle項目后,我發(fā)現(xiàn)為了構(gòu)建HelloWorld項目,我已經(jīng)使用了一半的流量…好吧,沒關(guān)系,我的流量充足。

    雖然這個過程看起來沒那么容易,但是也沒那么可怕。而且,很多任務(wù)都是一次性設(shè)置的。但是,無形之中也給入門級小白一種印象:Java需要復(fù)雜的設(shè)置,沒有繁瑣的IDE設(shè)置就無法使用Java。

    核心標準庫不夠用

    通過調(diào)研,我們還發(fā)現(xiàn)了以下一些問題:

    一個常見的問題是Java的核心標準庫不夠用,許多任務(wù)需要一些外部庫,這也是事實。

    沒有內(nèi)置的測試庫、JSON(取消)編組支持,等等。

    雖然Java NIO是一個很大的進步,但與其他語言相比,Java中的文件I/O仍然是復(fù)雜而冗長的。

    沒有內(nèi)置的(類似Kotlin)對不可變數(shù)據(jù)結(jié)構(gòu)的支持。

    Java有很好的標準庫,如Collections、Streams、Java NIO等。

    使用文件I/O、JDBC等仍然感覺非常低級和冗長。

    有很好的第三方庫,如commons-lang、commons-io、Jackson、Gson、Vavr、Eclipse Collections來執(zhí)行這些任務(wù)。

    在我看來,添加第三方庫并不是一個大問題。

    挑戰(zhàn)在于,當有太多的選擇時,新手們會感到困惑,不知道該選哪一個。


    Java是最啰嗦的語言,這是對Java最常見的評論。 (這只是表明你還沒有使用過Go語言)

    我的觀點:

    人們討厭setters、getters等,但我不認為這有什么不好。因為可以用Lombok和Records來避免編寫模板。通過使用正確的庫,可以編寫出不那么冗長的Java代碼。

    事實上,我認為Java在冗長和簡潔之間取得了適當?shù)钠胶。通常,基于Java的企業(yè)應(yīng)用程序會被維護很多年,而被認為冗長的東西實際上會幫助人們理解它。


    十年前,我在EJB 2中使用EAR打包,我知道處理ClassLoader的問題是多么令人沮喪。另外,我在JBoss/WildFly等應(yīng)用服務(wù)器中部署Spring應(yīng)用時,也有處理類加載器問題的經(jīng)驗。

    幸運的是,在過去的7、8年里,我沒有再使用EJB、OSGI、JMX、應(yīng)用服務(wù)器。在現(xiàn)代的Java世界中,應(yīng)用程序被構(gòu)建成fat jars,而框架則負責做AOP、ByteWeaving、動態(tài)代理等。

    除非你還在開發(fā)傳統(tǒng)的應(yīng)用程序,否則我認為你不會用現(xiàn)代Java技術(shù)棧來處理這些問題。


    雖然現(xiàn)代框架使專業(yè)開發(fā)者很容易構(gòu)建應(yīng)用程序,但對于新手來說卻變得很困難。大多數(shù)的框架都是非常抽象的。當他們試圖多了解一些東西的時候,就像剝洋蔥一樣,發(fā)現(xiàn)需要了解的東西無窮無盡。

    雖然從Java 8開始,Java增加了一些函數(shù)式編程支持,但Java絕對不是作為函數(shù)式編程語言設(shè)計的核心。有些人提到他們可以用FP構(gòu)建軟件,比用OOP好用得多。你也可以在Java中應(yīng)用一些FP的概念,如純函數(shù)、不變性,但不會像Clojure或Haskell等FP語言那樣自然。

    我之所以問 "為什么你認為Java很復(fù)雜?"是為了了解別人的觀點。雖然我不同意一些觀點,而且有些事情對我來說不是什么大問題,但這有助于我理解其他人的想法。

    在我看來,任何語言、框架和庫都是為了解決一個主要問題而創(chuàng)建的,在這個過程中,它可能也會有一些非主要的功能。Java被設(shè)計成面向?qū)ο蟮恼Z言,如果你想讓它成為一種功能編程語言,它就沒有Clojure或Haskell那么好。每種編程語言都有它的利基領(lǐng)域,比如Python用于機器學習,Go和Rust用于系統(tǒng)編程,Java和Node.js用于企業(yè)應(yīng)用開發(fā)等等。

    Java的優(yōu)勢在于建立大型企業(yè)應(yīng)用程序,而不是在控制臺中打印 “Hello World”!!!。Java生態(tài)系統(tǒng)的發(fā)展是為了滿足企業(yè)的需求,并提高開發(fā)人員的生產(chǎn)力。

    在一個典型的企業(yè)商業(yè)應(yīng)用中,你需要通過與其他幾個外部系統(tǒng)的集成來構(gòu)建復(fù)雜的業(yè)務(wù)流程,以及與關(guān)系型數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫、消息傳遞系統(tǒng)、緩存提供商、云服務(wù)等進行交互。

    是的,你需要學習和了解大量的東西,才能有效利用這種快速應(yīng)用開發(fā)平臺。這是為了實現(xiàn)這種生產(chǎn)力可能需要付出的代價。

    不要因為互聯(lián)網(wǎng)上有 "語言X很復(fù)雜 "的調(diào)侃就簡單地拋棄任何編程語言或者平臺。不要因為聽信別人根據(jù)他們2004年的經(jīng)驗說 "X語言很復(fù)雜 ",就一直重復(fù)這個說法。