Java——生於憂患,死於安樂

  近日,在CSDN首頁上看到這樣一則新聞:從容面對五大挑戰 問誰敢說“Java已死”?文中提到“許多作者都對Java進行口誅筆伐,一些人甚至似乎認爲Java就此“落魄了”,而原本那些“狂熱的支持者們”也銷聲匿跡了。”由於一直忙於工作,對這些口水戰沒有太多關注,也沒有耳聞太多的事情。但就Java而言,我的確有些自己的反面聲音;但首先表明我的觀點,我個人不喜口水戰,只是想以一個喜好技術的人的角度對Java表示一下惋惜,並非“口誅筆伐”。

  從起源上來講,Java並非“系出名門”。儘管它的締造者是大名鼎鼎的Sun Microsystem,儘管它的語法是“類C/C++”的,但這並不能說明Java就是名門子弟。衆所周知Java最初只是爲了開發動態網頁而產生的一種腳本語言,而並非專門作爲一種軟件開發語言而設計的,這就導致其語法存在固有的缺陷。過分簡化的語法使得語言喪失了很多原本非常強大的功能。Java鼓吹“純面向對象”,真正面向對象的系統的主導機制是封裝、繼承和多態,這一點Java做到了,而且做得不錯;並且將接口作爲一種顯式的語言構造提出,爲實現大型系統提供了保障。然而,繼承、封裝和多態都是通過“類”這種特殊的語言構造來實現的,而且“類”也是面向對象體系中重要的概念和實體。並且,在面向對象世界中,一個類應該具有這樣一些成員:域(字段、成員變量)——用於存放於一個對象相關的狀態和數據;方法(成員函數)——表示一個類或一個對象所具有的行爲;屬性——表示一個類的特徵的數據;以及事件——一種表示某種事件發生的語言實體。而Java中類的成員只有域(字段、成員變量)和方法(成員函數),這就導致了Java語言根本無法精確地描述一個面向對象的世界。屬性需要靠方法來模擬,事件則必須通過接口和方法一起模擬。

  於是,設計模式誕生了。什麼是設計模式呢?在Smalltalk、C++這樣沒有接口和事件的語言中,大部分設計模式其實就是告訴我們如何用現有的語法實現和使用接口、模擬發送和接收事件。Java有接口,但沒有事件,因此,傳統設計模式依然存在。目前有一項很有意思的課題,就是研究GoF所提出的23種傳統設計模式(參見《設計模式》)中,到了Java時代,應該取消那些模式。我也有個很有意思的答案:與接口相關的都應該取消,因爲Java有接口;與事件相關的和其他大部分都應該保留。

  然而,是什麼導致Java風靡世界呢?無外乎這兩點:虛擬執行系統和垃圾收集。

  虛擬執行系統的確是一個很新鮮的創意,雖然不是由Sun最先發明的,但的確是Java令虛擬執行的概念深入人心的。但Java由於一直以簡單、安全爲其目標,因此虛擬執行系統的設計非常之不完善。另外,由於採用的是虛擬機的概念,所有bytecode有虛擬機來執行,效率偏低。(.NET CLR沒有采用虛擬機,而是通過JIT編譯器將IL編譯成Native Code,然後交給CPU執行,效率略好一些。)

  同時,JVM不允許並行版本,也就是說,如果安裝了5.0,原來的1.4就不能用了。這是個很嚴重的問題,這極大地限制了語言的升級,因爲每一次升級,就必須考慮到向後兼容的問題。這個問題在Java5時代已經凸現出來,那就是對泛型的支持上。Java5貌似支持泛型,然而實際上,這只是一種“語法糖”,編譯器在編譯過程中,就將泛型類型替換爲了object類,這幾乎完全喪失了泛型所帶來的效率優勢,最關鍵的是,在轉換爲object類型後,丟失了很多類型信息,這直接影響到安全。

  那麼,爲什麼Java如此成功呢?這首先是因爲Sun最先將虛擬執行系統和垃圾收集的概念帶出實驗室,帶入人們的生產活動中;這導致很多大廠商比較早地接受了這種思路,並對其提供支持。從而使得Java擁有了軟件開發領域中最大的市場。

  我們可親可敬的James老爺爺,雖然我是微軟技術陣營的人,但我大學時代的牀頭曾掛着兩幅頭像,一是Bjarne Stroustrup、另一個就是Java之父James Gosling。因爲他們的人品和技術都是值得尊重的。然而,最近幾年,James不知怎麼了,瘋狂地在媒體露面,從Java5發佈會開始。前一個月還到中國來溜達了一圈,還來了CSDN。雖然這樣能夠貼近一線開發者、能夠拉攏人氣,但您老如果不踏踏實實在實驗室裏研究,怎麼能讓您一手締造的Java再上一個臺階?語言有缺陷可以改進,但如果放任自流,其必將走上不歸之路……(我儘量避免拿Java和.NET對比,但這裏我不得不提,雖然微軟也近乎瘋狂地爲其.NET大肆造勢,但.NET幕後真正的主使——Anders Hejlsberg卻一直悄然藏於微軟總部,踏踏實實地進行着研發,除了很少幾次接受MSDN Show的採訪外。)

  Java生於憂患,在一個傳統編程技術繼續被突破的年代,在一個大多數C++開發者在徘徊的年代,Java革命性地將虛擬執行系統和垃圾收集機制引入軟件研發、生產活動,建立了一個也可堪稱“帝國”的社羣。然而,打江山容易坐江山難,這樣貌似龐大的一片基業,如果不通過再繼續努力地研發,極有可能就喪生於安樂。誠然,Java市場擁有率仍高居榜首;但看看它的發展曲線呢?是不是每年都有增長呢?如果是的話,再看看增長速率,也就是所謂的加速度,是否仍然是正值呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章