對(duì)java編成語(yǔ)言的淺解
對(duì)于Java技術(shù)專家而言廉邑,他們會(huì)采取非常簡(jiǎn)單的方法,譬如使用SDKMAN慨畸。
SDKMAN還支持安裝其他各種工具莱坎,如Maven、Gradle寸士、JBang等型奥。如果你想以學(xué)習(xí)為目的使用Java,我建議你使用JBang碉京。
以上內(nèi)容部分由小紅書(shū)(www.xiaohongshutuiguang.cn)轉(zhuǎn)載提供
雖然大多數(shù)的Java開(kāi)發(fā)者都使用功能全面且強(qiáng)大的IDE厢汹,如Intellij IDEA、Eclipse或NetBeans谐宙,但你也可以用VS Code來(lái)開(kāi)發(fā)Java程序烫葬。
核心標(biāo)準(zhǔn)庫(kù)不夠用
通過(guò)調(diào)研,我們還發(fā)現(xiàn)了以下一些問(wèn)題:
一個(gè)常見(jiàn)的問(wèn)題是Java的核心標(biāo)準(zhǔn)庫(kù)不夠用凡蜻,許多任務(wù)需要一些外部庫(kù)搭综,這也是事實(shí)。
沒(méi)有內(nèi)置的測(cè)試庫(kù)划栓、JSON(取消)編組支持兑巾,等等。
雖然Java NIO是一個(gè)很大的進(jìn)步忠荞,但與其他語(yǔ)言相比蒋歌,Java中的文件I/O仍然是復(fù)雜而冗長(zhǎng)的。
沒(méi)有內(nèi)置的(類似Kotlin)對(duì)不可變數(shù)據(jù)結(jié)構(gòu)的支持委煤。
我的觀點(diǎn)
Java有很好的標(biāo)準(zhǔn)庫(kù)堂油,如Collections、Streams碧绞、Java NIO等府框。
使用文件I/O、JDBC等仍然感覺(jué)非常低級(jí)和冗長(zhǎng)讥邻。
有很好的第三方庫(kù)迫靖,如commons-lang、commons-io兴使、Jackson系宜、Gson、Vavr鲫惶、Eclipse Collections來(lái)執(zhí)行這些任務(wù)蜈首。
在我看來(lái)实抡,添加第三方庫(kù)并不是一個(gè)大問(wèn)題欠母。
挑戰(zhàn)在于欢策,當(dāng)有太多的選擇時(shí),新手們會(huì)感到困惑赏淌,不知道該選哪一個(gè)踩寇。
最啰嗦的語(yǔ)言Java
Java是最啰嗦的語(yǔ)言,這是對(duì)Java最常見(jiàn)的評(píng)論六水。
(這只是表明你還沒(méi)有使用過(guò)Go語(yǔ)言)
我的觀點(diǎn)
人們討厭setters俺孙、getters等,但我不認(rèn)為這有什么不好掷贾。因?yàn)榭梢杂肔ombok和Records來(lái)避免編寫模板睛榄。通過(guò)使用正確的庫(kù),可以編寫出不那么冗長(zhǎng)的Java代碼想帅。
事實(shí)上场靴,我認(rèn)為Java在冗長(zhǎng)和簡(jiǎn)潔之間取得了適當(dāng)?shù)钠胶狻Mǔ8圩迹贘ava的企業(yè)應(yīng)用程序會(huì)被維護(hù)很多年旨剥,而被認(rèn)為冗長(zhǎng)的東西實(shí)際上會(huì)幫助人們理解它。
其中一個(gè)回答說(shuō)明了一切浅缸。
任何時(shí)候轨帜,我都會(huì)選擇傳統(tǒng)的Java而不是傳統(tǒng)的Node.js。
復(fù)雜的 "企業(yè)級(jí)"產(chǎn)品
另一個(gè)常見(jiàn)的話題是關(guān)于復(fù)雜的企業(yè)級(jí)產(chǎn)品衩椒,如ClassLoaders蚌父、JNDI、OSGI毛萌、JMX梢什、Reflection、AOP朝聋、ByteWeaving嗡午、Dynamic Proxies、應(yīng)用服務(wù)器等冀痕。
我的觀點(diǎn)
十年前荔睹,我在EJB 2中使用EAR打包,我知道處理ClassLoader的問(wèn)題是多么令人沮喪言蛇。另外僻他,我在JBoss/WildFly等應(yīng)用服務(wù)器中部署Spring應(yīng)用時(shí),也有處理類加載器問(wèn)題的經(jīng)驗(yàn)腊尚。
幸運(yùn)的是吨拗,在過(guò)去的7、8年里,我沒(méi)有再使用EJB劝篷、OSGI哨鸭、JMX、應(yīng)用服務(wù)器娇妓。在現(xiàn)代的Java世界中像鸡,應(yīng)用程序被構(gòu)建成fat jars,而框架則負(fù)責(zé)做AOP哈恰、ByteWeaving只估、動(dòng)態(tài)代理等。
除非你還在開(kāi)發(fā)傳統(tǒng)的應(yīng)用程序着绷,否則我認(rèn)為你不會(huì)用現(xiàn)代Java技術(shù)棧來(lái)處理這些問(wèn)題蛔钙。
庫(kù)作者處理的問(wèn)題越來(lái)越復(fù)雜
與典型的商業(yè)應(yīng)用開(kāi)發(fā)者相比,高級(jí)用戶荠医、庫(kù)作者要處理的復(fù)雜性達(dá)到了全新的高度夸楣。
一些高級(jí)用戶提到關(guān)于Java的挑戰(zhàn)是:
類的加載
類型擦除
功能性接口的異常語(yǔ)義
反射
原理
空值
默認(rèn)可變性
多線程
通用平等
因?yàn)槲覜](méi)有建立過(guò)任何復(fù)雜的庫(kù),所以我沒(méi)有太多的話語(yǔ)權(quán)子漩。
除此以外豫喧,還有一些問(wèn)題。
微服務(wù)的高內(nèi)存占用率
Streaming arch分層在一個(gè)老化的生態(tài)系統(tǒng)上幢泼,其后果不甚明了
太多的抽象性
雖然現(xiàn)代框架使專業(yè)開(kāi)發(fā)者很容易構(gòu)建應(yīng)用程序紧显,但對(duì)于新手來(lái)說(shuō)卻變得很困難。大多數(shù)的框架都是非常抽象的缕棵。當(dāng)他們?cè)噲D多了解一些東西的時(shí)候孵班,就像剝洋蔥一樣,發(fā)現(xiàn)需要了解的東西無(wú)窮無(wú)盡招驴。
非本地的FP支持
雖然從Java 8開(kāi)始篙程,Java增加了一些函數(shù)式編程支持,但Java絕對(duì)不是作為函數(shù)式編程語(yǔ)言設(shè)計(jì)的核心别厘。有些人提到他們可以用FP構(gòu)建軟件虱饿,比用OOP好用得多。你也可以在Java中應(yīng)用一些FP的概念触趴,如純函數(shù)氮发、不變性,但不會(huì)像Clojure或Haskell等FP語(yǔ)言那樣自然冗懦。
以下內(nèi)容由 小紅書(shū)推廣(www.xiaohongshutuiguang.cn)轉(zhuǎn)載提供
其他原因
使用舊版應(yīng)用程序的幾率更高
糟糕的面試經(jīng)歷
“x語(yǔ)言很復(fù)雜”不可信
我之所以問(wèn) "為什么你認(rèn)為Java很復(fù)雜爽冕?"是為了了解別人的觀點(diǎn)。雖然我不同意一些觀點(diǎn)披蕉,而且有些事情對(duì)我來(lái)說(shuō)不是什么大問(wèn)題颈畸,但這有助于我理解其他人的想法乌奇。
在我看來(lái),任何語(yǔ)言眯娱、框架和庫(kù)都是為了解決一個(gè)主要問(wèn)題而創(chuàng)建的礁苗,在這個(gè)過(guò)程中,它可能也會(huì)有一些非主要的功能困乒。Java被設(shè)計(jì)成面向?qū)ο蟮恼Z(yǔ)言寂屏,如果你想讓它成為一種功能編程語(yǔ)言贰谣,它就沒(méi)有Clojure或Haskell那么好娜搂。每種編程語(yǔ)言都有它的利基領(lǐng)域,比如Python用于機(jī)器學(xué)習(xí)吱抚,Go和Rust用于系統(tǒng)編程百宇,Java和Node.js用于企業(yè)應(yīng)用開(kāi)發(fā)等等。
Java的優(yōu)勢(shì)在于建立大型企業(yè)應(yīng)用程序秘豹,而不是在控制臺(tái)中打印 “Hello World”!!!携御。Java生態(tài)系統(tǒng)的發(fā)展是為了滿足企業(yè)的需求,并提高開(kāi)發(fā)人員的生產(chǎn)力既绕。
在一個(gè)典型的企業(yè)商業(yè)應(yīng)用中啄刹,你需要通過(guò)與其他幾個(gè)外部系統(tǒng)的集成來(lái)構(gòu)建復(fù)雜的業(yè)務(wù)流程,以及與關(guān)系型數(shù)據(jù)庫(kù)凄贩、NoSQL數(shù)據(jù)庫(kù)誓军、消息傳遞系統(tǒng)、緩存提供商疲扎、云服務(wù)等進(jìn)行交互昵时。
是的,你需要學(xué)習(xí)和了解大量的東西椒丧,才能有效利用這種快速應(yīng)用開(kāi)發(fā)平臺(tái)壹甥。這是為了實(shí)現(xiàn)這種生產(chǎn)力可能需要付出的代價(jià)。
不要因?yàn)榛ヂ?lián)網(wǎng)上有 "語(yǔ)言X很復(fù)雜 "的調(diào)侃就簡(jiǎn)單地拋棄任何編程語(yǔ)言或者平臺(tái)壶熏。