為什么.NET一開源一跨平臺,一些人就在喊Java去死?

jopen 10年前發布 | 10K 次閱讀 Java

為什么.NET一開源一跨平臺,一些人就在喊Java去死?

        本文來自知乎吳濤的回答

        今天的 Java 是編程領域的 lingua franca:作為一門語言,它比 C / C++ 學起來更容易,比 Perl / Lisp 讀起來更正常,比 VB / PHP 用起來更專業。幾乎沒有人看不懂 Java,所以講解個什么概念,用 Java 寫出來大家都能明白。

        而作為平臺的 Java,有無所不包的類庫,極度優化的虛擬機,根深蒂固的開源項目,結果就是,無論你想做任何事情,理論上——乃至 99% 的實際上——都可以用 Java 實現。

        我寫下這些文字的片刻,就又有幾萬行 Java 代碼在世界上誕生了,所以如果以「不再有任何人使用」為一種技術的死亡界限,那 Java 顯然活著,并且活得還不錯;如果以「能找得到工作」作為一種技術的死亡界限,那 Java 更是生龍活虎,國內的狀況我不清楚,但在歐美任何一個求職網站上以 Java 為關鍵字搜索職位,都可以很容易地看出它拳打 C++、腳踢 PHP 的霸主地位。

        沒有人質疑它為什么活著,我們 take for granted 它活著,就像我從來不質疑明天去上班時還有沒有活干一樣,granted。

        但如此一來,倒不如就說 Java 已獲永生算了。因為,如果你按照上面的兩個定義巡視一遍 TIOBE,就會發現沒有什么稍微有點名氣的編程語言(及其背后的技術)真的死去了。Visual Basic 還活著,Delphi 還活著,COBOL 活著,Fortran 活著,甚至連 FoxPro 都活著。

        至于比這些更小眾的例子,你們聽過 IBM AS/400 系統么?我的上個東家還在用,維護它的程序員剛入職的薪水就高得離譜,因為整個公司二十年核心業務邏輯都在里面,一損俱損。AS/400 也活著。

        所以當我說「Java 去死 / 已死」的時候,「死」意味著什么呢?很簡單:沒人愛了。

        本版同文那篇改寫尼莫拉詩句的答案是對 Paul Graham 那句「of all the great programmers I can think of, I know of only one who would voluntarily program in Java」的完美呼應:十個寫 Java 的人里面有九個是「因為工作需要」——剩下一個是因為不會別的。在所有我能想像到的寫程序的動機里面,「因為工作需要」是最令人心如死灰的一個。

        犧牲著前列腺和脊椎的健康久坐在屏幕前忍受著用 Java 寫程序只為混口飯吃,反正我覺得沒意思。如果你還能笑出來,good for you。

        而只要你不是剛從一九九五年穿越過來,就應該能看到現在的 Java 也的確并不可愛。

        語言特性方面,與其說它沒有什么太大的問題,倒不如說它的那些問題已經有了很多成熟的 workaround,比如無法被 override 的靜態方法,畫蛇添足的 checked exceptions,還有半屁股的泛型。而真正令人難受的是那些它缺失的特性——我可以說 C# 里面的 struct、delegate、async / await、event handler、accessor、operator overloading 支持(好吧這個不一定是好事)乃至 type inference 之類都是 Java 所缺失(或者只有靠隔靴搔癢的第三方庫才能實現)的,當然還有真正的運行時泛型。分開來看每一點你都會覺得沒什么,但是當所有這些積累起來時,C# 就比 Java 可愛得多。

        這些功能有朝一日也許終歸會在 Java 中出現,就像 Java 7 終于有了 switch on string 和 try with resource、Java 8 終于有了 lambda 一樣,但是它們出現之前,你就得忍著,連同 Java EE 那堆臃腫龐雜、詰屈聱牙的技術迷宮一起忍著。而且感謝 Oracle,你還不知道要忍多久——作為一個參照值,Java 8 大概相當于 .NET Framework 3.0,而 .NET Framework 3.0 是二〇〇六年的事情,那時候手機市場的第一巨頭是諾基亞。

        Oracle 以任何標準衡量都不是一個會為開發者著想去改進工具的公司,比 Microsoft 更令開發者厭惡,后者至少有組織良好、行文詳盡的 MSDN 資料庫,有雖然平庸但不斷改善的 CodePlex 開源平臺,還有個禿頂胖子汗濕了襯衫站在講臺上大喊過 developers developers developers。

        而 Oracle 做過什么?把 MySQL 留在路邊喂狗。把 OpenOffice 的開發社群趕出家門。無厘頭地起訴 Android。

        所以 James Gosling 在 Sun 被 Oracle 收購的同時辭職,就叫做先見之明。

        也難怪大家會競相在 JVM 上發明新語言,并且將其他語言移植到 JVM 上,只是這些嘗試努力的方向太過分散,沒有誰能夠一統江湖讓 Java 社群看到希望。

        我們的現狀是,二〇〇七年之后已經不再有人寫 Java ME;Java SE 除去幾個 IDE 項目之外最著名的程序只有 Minecraft;Java EE 和 Android 就是 Java 唯二仍舊還算 alive and kicking 的部分。Dalvik 那是另立門戶沒什么可說的,那么 *nix 上的 JVM,其實是作為平臺的 Java 所僅剩的基石。以前它從來沒有過一個像樣的競爭對手——要么太嫩,要么太虛,這種狀況一直持續到二〇一四年十一月十二日為止。

        而這就是你問題的答案:那個十多年前總裁說過「Linux 是一種癌癥」的微軟,從今天起官方支持其核心價值觀輸出平臺跑在 Linux 上面了,還開源免費。

        全世界所有能賣給你一臺虛擬主機跑 Linux 的服務商一夜之間都變成 .NET 主機服務商,不愛 Java 的人忽然有了一個新的選擇,文檔詳盡,支持良好,路線清晰,社群強大,工具易用,有企業級的可靠程度,而且最爽的一點是,之前寫 Java 的經驗,九成都可以無縫移植。

        我從沒有說過這件事的成效立等可取,不過想想 Java 曾經是如此無孔不入的東西——它甚至跑在你的 SIM 卡里面,直到今天——卻也許能在我的有生之年變成一九七三年的 COBOL,就會覺得世事無常。我相信現有 Java 系統會漸漸成為 legacy code,人們繼續維護它們,只是因為它們必須被繼續維護下去。

        新的掙扎仍舊會出現,畢竟瘦死的駱駝比馬大,一群老鼠啃駱駝的尸體也能啃上一段時間——為了減輕你的柔弱心靈讀到剛才這句話所遭受的痛楚,我承 認我也只是啃食 Java 的老鼠身上的一只跳蚤(嗯?其實你根本不痛苦?你看,連你也不愛 Java)——這無疑會是個漫長的過程,所以如果你是個剛入行的 Java 程序員,大可不必擔心自己的事業發展,只要人類不發明永生技術,你就活不到因為只懂 Java 而找不到工作的那一天。

        退一萬步而言,你若真的能把自己逼到那樣的絕境里,還是趁早去做管理吧。

        最后,我并沒有「喊」Java 去死,因為這并不是一種宣告,更不是什么詛咒,只是陳述在觀察現狀之后得出的結論而已。當然,「去死」很難不帶感情色彩地解讀,就好比我輸入 kill -9 時很難不讓人覺得我不痛恨那個進程一樣。雖然我真的并不痛恨它。要痛恨也只有那么一下下而已。

        又,所謂「大牛只選擇最適于解決問題的工具,而不去爭論誰好誰壞」之類的論調,前半句不假,后半句完全是迷思。不是每個人都是 pragmatist,爭論工具好壞的大牛多了去了,說這話的人閱讀量太少。

        利益申明暨 disclaimer

        我目前是個 Java 程序員。準確來說,我從事正職的時間里如果在寫代碼,有六成是寫 Java,包括 EJB、JPA、JSF,Swing,甚至還有 GWT,而我上次正經寫超過十行 C# 是在八年以前。我開始寫這個答案是因為等飛機無聊,能寫這么長我也沒想到。我沒想說服誰,所以如果你不同意,good for you

來自: www.zhihu.com
                    <span id="shareA4" class="fl">                  
                        </span> 

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!