新聞中心
本文來自知乎吳濤的回答

創(chuàng)新互聯(lián)是一家專業(yè)提供閩侯企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為閩侯眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
今天的 Java 是編程領(lǐng)域的 lingua franca:作為一門語言,它比 C / C++ 學(xué)起來更容易,比 Perl / Lisp 讀起來更正常,比 VB / PHP 用起來更專業(yè)。幾乎沒有人看不懂 Java,所以講解個(gè)什么概念,用 Java 寫出來大家都能明白。
而作為平臺(tái)的 Java,有無所不包的類庫,極度優(yōu)化的虛擬機(jī),根深蒂固的開源項(xiàng)目,結(jié)果就是,無論你想做任何事情,理論上——乃至 99% 的實(shí)際上——都可以用 Java 實(shí)現(xiàn)。
我寫下這些文字的片刻,就又有幾萬行 Java 代碼在世界上誕生了,所以如果以「不再有任何人使用」為一種技術(shù)的死亡界限,那 Java 顯然活著,并且活得還不錯(cuò);如果以「能找得到工作」作為一種技術(shù)的死亡界限,那 Java 更是生龍活虎,國內(nèi)的狀況我不清楚,但在歐美任何一個(gè)求職網(wǎng)站上以 Java 為關(guān)鍵字搜索職位,都可以很容易地看出它拳打 C++、腳踢 PHP 的霸主地位。
沒有人質(zhì)疑它為什么活著,我們 take for granted 它活著,就像我從來不質(zhì)疑明天去上班時(shí)還有沒有活干一樣,granted。
但如此一來,倒不如就說 Java 已獲永生算了。因?yàn)?,如果你按照上面的兩個(gè)定義巡視一遍 TIOBE,就會(huì)發(fā)現(xiàn)沒有什么稍微有點(diǎn)名氣的編程語言(及其背后的技術(shù))真的死去了。Visual Basic 還活著,Delphi 還活著,COBOL 活著,F(xiàn)ortran 活著,甚至連 FoxPro 都活著。
至于比這些更小眾的例子,你們聽過 IBM AS/400 系統(tǒng)么?我的上個(gè)東家還在用,維護(hù)它的程序員剛?cè)肼毜男剿透叩秒x譜,因?yàn)檎麄€(gè)公司二十年核心業(yè)務(wù)邏輯都在里面,一損俱損。AS/400 也活著。
所以當(dāng)我說「Java 去死 / 已死」的時(shí)候,「死」意味著什么呢?很簡(jiǎn)單:沒人愛了。
本版同文那篇改寫尼莫拉詩句的答案是對(duì) Paul Graham 那句「of all the great programmers I can think of, I know of only one who would voluntarily program in Java」的完美呼應(yīng):十個(gè)寫 Java 的人里面有九個(gè)是「因?yàn)楣ぷ餍枰埂O乱粋€(gè)是因?yàn)椴粫?huì)別的。在所有我能想像到的寫程序的動(dòng)機(jī)里面,「因?yàn)楣ぷ餍枰故亲盍钊诵娜缢阑业囊粋€(gè)。
犧牲著前列腺和脊椎的健康久坐在屏幕前忍受著用 Java 寫程序只為混口飯吃,反正我覺得沒意思。如果你還能笑出來,good for you。
而只要你不是剛從一九九五年穿越過來,就應(yīng)該能看到現(xiàn)在的 Java 也的確并不可愛。
語言特性方面,與其說它沒有什么太大的問題,倒不如說它的那些問題已經(jīng)有了很多成熟的 workaround,比如無法被 override 的靜態(tài)方法,畫蛇添足的 checked exceptions,還有半屁股的泛型。而真正令人難受的是那些它缺失的特性——我可以說 C# 里面的 struct、delegate、async / await、event handler、accessor、operator overloading 支持(好吧這個(gè)不一定是好事)乃至 type inference 之類都是 Java 所缺失(或者只有靠隔靴搔癢的第三方庫才能實(shí)現(xiàn))的,當(dāng)然還有真正的運(yùn)行時(shí)泛型。分開來看每一點(diǎn)你都會(huì)覺得沒什么,但是當(dāng)所有這些積累起來時(shí),C# 就比 Java 可愛得多。
這些功能有朝一日也許終歸會(huì)在 Java 中出現(xiàn),就像 Java 7 終于有了 switch on string 和 try with resource、Java 8 終于有了 lambda 一樣,但是它們出現(xiàn)之前,你就得忍著,連同 Java EE 那堆臃腫龐雜、詰屈聱牙的技術(shù)迷宮一起忍著。而且感謝 Oracle,你還不知道要忍多久——作為一個(gè)參照值,Java 8 大概相當(dāng)于 .NET Framework 3.0,而 .NET Framework 3.0 是二〇〇六年的事情,那時(shí)候手機(jī)市場(chǎng)的第一巨頭是諾基亞。
Oracle 以任何標(biāo)準(zhǔn)衡量都不是一個(gè)會(huì)為開發(fā)者著想去改進(jìn)工具的公司,比 Microsoft 更令開發(fā)者厭惡,后者至少有組織良好、行文詳盡的 MSDN 資料庫,有雖然平庸但不斷改善的 CodePlex 開源平臺(tái),還有個(gè)禿頂胖子汗?jié)窳艘r衫站在講臺(tái)上大喊過 developers developers developers。
而 Oracle 做過什么?把 MySQL 留在路邊喂狗。把 OpenOffice 的開發(fā)社群趕出家門。無厘頭地起訴 Android。
所以 James Gosling 在 Sun 被 Oracle 收購的同時(shí)辭職,就叫做先見之明。
也難怪大家會(huì)競(jìng)相在 JVM 上發(fā)明新語言,并且將其他語言移植到 JVM 上,只是這些嘗試努力的方向太過分散,沒有誰能夠一統(tǒng)江湖讓 Java 社群看到希望。
我們的現(xiàn)狀是,二〇〇七年之后已經(jīng)不再有人寫 Java ME;Java SE 除去幾個(gè) IDE 項(xiàng)目之外最著名的程序只有 Minecraft;Java EE 和 Android 就是 Java 唯二仍舊還算 alive and kicking 的部分。Dalvik 那是另立門戶沒什么可說的,那么 *nix 上的 JVM,其實(shí)是作為平臺(tái)的 Java 所僅剩的基石。以前它從來沒有過一個(gè)像樣的競(jìng)爭(zhēng)對(duì)手——要么太嫩,要么太虛,這種狀況一直持續(xù)到二〇一四年十一月十二日為止。
而這就是你問題的答案:那個(gè)十多年前總裁說過「Linux 是一種癌癥」的微軟,從今天起官方支持其核心價(jià)值觀輸出平臺(tái)跑在 Linux 上面了,還開源免費(fèi)。
全世界所有能賣給你一臺(tái)虛擬主機(jī)跑 Linux 的服務(wù)商一夜之間都變成 .NET 主機(jī)服務(wù)商,不愛 Java 的人忽然有了一個(gè)新的選擇,文檔詳盡,支持良好,路線清晰,社群強(qiáng)大,工具易用,有企業(yè)級(jí)的可靠程度,而且最爽的一點(diǎn)是,之前寫 Java 的經(jīng)驗(yàn),九成都可以無縫移植。
我從沒有說過這件事的成效立等可取,不過想想 Java 曾經(jīng)是如此無孔不入的東西——它甚至跑在你的 SIM 卡里面,直到今天——卻也許能在我的有生之年變成一九七三年的 COBOL,就會(huì)覺得世事無常。我相信現(xiàn)有 Java 系統(tǒng)會(huì)漸漸成為 legacy code,人們繼續(xù)維護(hù)它們,只是因?yàn)樗鼈儽仨毐焕^續(xù)維護(hù)下去。
新的掙扎仍舊會(huì)出現(xiàn),畢竟瘦死的駱駝比馬大,一群老鼠啃駱駝的尸體也能啃上一段時(shí)間——為了減輕你的柔弱心靈讀到剛才這句話所遭受的痛楚,我承認(rèn)我也只是啃食 Java 的老鼠身上的一只跳蚤(嗯?其實(shí)你根本不痛苦?你看,連你也不愛 Java)——這無疑會(huì)是個(gè)漫長(zhǎng)的過程,所以如果你是個(gè)剛?cè)胄械?Java 程序員,大可不必?fù)?dān)心自己的事業(yè)發(fā)展,只要人類不發(fā)明永生技術(shù),你就活不到因?yàn)橹欢?Java 而找不到工作的那一天。
退一萬步而言,你若真的能把自己逼到那樣的絕境里,還是趁早去做管理吧。
最后,我并沒有「喊」Java 去死,因?yàn)檫@并不是一種宣告,更不是什么詛咒,只是陳述在觀察現(xiàn)狀之后得出的結(jié)論而已。當(dāng)然,「去死」很難不帶感情色彩地解讀,就好比我輸入 kill -9 時(shí)很難不讓人覺得我不痛恨那個(gè)進(jìn)程一樣。雖然我真的并不痛恨它。要痛恨也只有那么一下下而已。
又,所謂「大牛只選擇最適于解決問題的工具,而不去爭(zhēng)論誰好誰壞」之類的論調(diào),前半句不假,后半句完全是迷思。不是每個(gè)人都是 pragmatist,爭(zhēng)論工具好壞的大牛多了去了,說這話的人閱讀量太少。
利益申明暨 disclaimer:
我目前是個(gè) Java 程序員。準(zhǔn)確來說,我從事正職的時(shí)間里如果在寫代碼,有六成是寫 Java,包括 EJB、JPA、JSF,Swing,甚至還有 GWT,而我上次正經(jīng)寫超過十行 C# 是在八年以前。我開始寫這個(gè)答案是因?yàn)榈蕊w機(jī)無聊,能寫這么長(zhǎng)我也沒想到。我沒想說服誰,所以如果你不同意,good for you。
標(biāo)題名稱:為什么.NET一開源一跨平臺(tái),一些人就在喊Java去死?
URL分享:http://fisionsoft.com.cn/article/djespgc.html


咨詢
建站咨詢
