2015年9月26日 星期六

我看 Java 的過去與未來

        很多人總是拿 Java vs .NET,但這太容易引戰了,所以這邊我不要用兩相比較的方式,單純從『非技術』的『商業觀點』談論我對 Java 的看法。

        我本身以微軟相關技術為主,但偶而也會寫寫 Java,因為程式語言就是工具,合適的時候就拿來用一用,更何況從 C# 轉 Java 遠比 Java 轉 C# 簡單得多,因為 C# 的語言特性較複雜。

        我自己會寫 Java 的幾個機會是:寫 Android App、寫 GAE app、寫公司產品 Java 版本的 SDK,不算是用在很核心的地方。

聲明:以下看法單純從本人過去工作經驗的觀點做分享,難免偏頗絕非全貌,請自行斟酌真實性。

        我對這個語言的看法就是,他在處在一種前途未卜、渾沌未明的狀態,任何事件都有可能改變這個語言的發展趨勢,大概不上不下不明朗,但是七成偏悲觀。

        Java 無疑是 OOP 世界最佳的傳教者,大部份的人都是透過 Java 來認識 OOP,他導入的 ByteCode 、虛擬機、垃圾回收機制,絕對是影響近代語言發展的歷史性推手。

        歌功頌德完畢,還是得看看現實。

        Java 開放的特性,且沒有明顯的商業掛勾(至少剛開始是這樣),使得學術界對此非常友善,無論是學術研究、教育課程安排,都毫不避諱採用 Java,造成企業不太擔心人才斷層,在人力市場可以很安心地挑選需要的人才。

        許多先進的學術研究也多半會以 Java 為主,要玩各種主題可以發現資源非常豐富,幾乎不用擔心沒東西可玩。.NET 大多是等某些東西在 Java 已經紅翻天才移植過去,所以開源的發展總是慢半拍。

        Java 的社群很友善,可以明顯感受到一種無私奉獻的精神在跟你互動,我很喜歡這這種氛圍,兩相比較之下,其他門派的獎勵機制產生的 MVP 社群感受比較功利主義。

        以為 Java 免費資源多,成本低所以企業搶進嗎?

        錯了,Java 的商業 total solution 可是貴翻天是微軟 solution 的倍數起價!

        最早透過 Java 獲得巨大利益的是 IBM,金融業因為大型主機被把持,幾乎都採購 WebSphere 來串 MQSeries,不用授權成本的 Java 成為 IBM 的指定語言。有 IBM 原廠的強力背書和支援,跟我之前談論 .NET 的論點一樣,當時 Java PG 薪資水漲船高,所有金融業都搶著要,IBM 整個賺翻天!

        但金融業也不是天天過好年,近年整個經濟反轉,整併消失的銀行不在少數,那些以前不計較的 IT 投資,現在看到報價單是會心痛的!去 IBM 化的各種行動在金融業陸續展開,那幾年我拜訪許多銀行的 CIO,都知道『減少對 IBM 依賴』是他們被賦予的首要目標。

        想也知道,誰是次於 IBM 卻滿足降低成本,同時可以提供最強大有力技術支援的一線廠商(不要總說 M$ 好貴,跟 IBM 相比,真的便宜太多)?

        這個消長頓時凍結了 Java PG 的需求量和薪資水準,而開始讓另一家敵對的技術做大。

但是於此同時,Java 在學術研究界的聲望仍然高居不墜,很多框架繼續蓬勃發展,是技術人玩樂的天堂。反觀另一家雖然在就業市場開始翻身,但至今始終難以打入學術與教育界。

        在兩家技術各有擅長戰場的情況下,Google 選擇 Java 作為 Android 的官方開發語言,這真是一個奇異點,因為這個事件同時幫 Java 打入強心針、也引發危機。

        先說 Java 在我眼裡,是個發展越來越緩慢,越來越顯老態的語言(我說的是語言特性本身,不是周圍的框架),幾乎快跟 C/C++ 一樣不太會變動了。大家可以參考維基百科裡面的歷史章節,Java6 從 2005 年公開到 2011 年才有新的改變,到了 2014 年才開始納入對手 2008 年就有的語言特性:Lambda。

        IT 界一日數變,隔年如隔朝換代,這種緩慢的變化已經無法因應市場所需。原因當然跟 SUN 自己經營不善無力支持有關,另一點就是 Java 本身的願景成為巨大的包袱:Write Once Run Everywhere。任何異動要牽涉到的多方角力實在太多太廣,主事者又早已自顧不暇。

        而 .NET 卻只要顧好“跨自己家平台”就好,爆發性『瞻前不顧後』的發展速度連自家人都傻眼。

        事實上,Write Once Run Everywhere 早已變成空談,各家利用這免費的語言各自為政,iOS 完全無法執行 Java,PC 上寫的 Java 不能跑在 Android,反之亦然,而 Windows Phone 更想都別想。

        在 mobile first 的當下市場,就算其他裝置支援眾多,最大的行動市場大餅卻根本無法跨平台,真的是優勢盡失。

        反之,.NET 反而三大行動平台全都能跨,Java 的 slogan 在現今特別令人感覺諷刺。

        現在各大 IT 廠商覬覦 Java 的,已經沒人在乎什麼跨平台這件事,看上的是他的開發社群與累積龐大數量的 PG,降低許多推廣自家平台的門檻,所以大家都搶趁著 SUN 無力反擊時吃盡豆腐。 

        要知道創造一個全新的程式語言是非常吃力不討好的事情,推廣和教育訓練的成本都極高。

        前面為何說 Google 選擇 Java 作為 GAE + Android 的指定語言同時是替這語言引爆危機?第一,他造成 Java SDK 分裂讓跨平台這件事徹底崩壞。第二,他讓 Oracle 為了貪圖利益控告了 Google 侵權,要求巨額賠償。

        Oracle 這場官司,不知看在其他 IT 巨頭眼裡,還有多少敢指定 Java 為主要語言?連 Google 為了解套都開始研發屬於自己的新一代程式語言 Go,這對 Java 這個語言本身的發展蒙上非常不好的陰影,甚至連學術界都開始為之擔憂。

        如果你熟悉 Oracle 老闆 Ellison 的狂人個性,就會敬而遠之。Java 恐怕會因此被他玩死。


        目前看不出 Oracle 有打算向微軟一樣把 .NET 當作重要戰略棋子的方式對待 Java,所以目前我對這語言的發展傾向悲觀的看法。


        但這是一個已經累積足夠財富與資源的語言,即便他在我眼裡是正在走下坡,但還是很有利用的價值。

沒有留言:

張貼留言