時到今日,Java已經走過了它輝煌的十幾年。我們邀請了世界各地的開發高手一同回顧Java語言發展的這十幾年,評析她今天所處的位置並預測其今後的發展趨勢。與會者(包括知名IT企業Sun、IBM、BEA及Borland等)反映各異,但有一點是共同的——Java的地位將一如既往舉足輕重。
一、簡介
在過去的10幾年中,Java語言已經變為一個平台,一個社團和一個生態系統。在這些環境下,軟件用戶、開源工程以及個體開發者等茁壯成長。今天,大約有四百五十萬Java開發者和大約1.4億台設備上使用著Java。
我們不空談Java的成功故事。代替的是通過分發調查問卷(每發展一年提問一個問題)來搜集個人的Java使用經驗,這些人大都是精於Java技術的開發者。回答者包括各個層面的人,從咨詢師、作家到BEA、IBM、Sun等大公司的CTO和資深技術人員。
下面是一些我們收到的令人瞠目的回答。
1. 你是如何開始使用Java編程的?
Java吸引了每個人的注意,從程序開發人員到……
"當Java還稱為Oak的時候我就用它進行編程,大約是在1993年的下半年或者是1994年的上半年。當時我在Sun Labs率領一個研究小組。一旦我們使用Java開發,我們就注意到使用Java的最大優點是,它能以一種合理的安全的方式從一個虛擬機遷移到另一台虛擬機。",這是Jim Waldo(SunLabs的傑出工程師)的回答。
Rod Smith,作為IBM軟件開發小組中處理突發技術的副主席,寫道:"我們看到了,Java平台是一種足夠好的技術,它具有在計算機工業界成為一支重大的獨成系列的力量的潛力。我們認為,我們最好要趕上這班時代列車並采納Sun的Java技術而不再依賴於以前的模式-自己開發每一件東西。"
Ed Cobb,BEA Systems公司CTO辦公室架構標准的副主席,寫道:"我們可以選擇其它主流的面向對象語言,但是Java提供了一種更好的組合特點使它適合於團隊環境下的大規模開發。"
"在過去十年中的大部分時間裡,我受雇於Sun。因此,我不得不說,Java"突然來到"我的身邊。如果不是這一突然性的到來,我們也會需要另外一種似Java的東西來叩開業界中正迅速發展的網絡計算環境的大門。"-Rob Gingell,Cassatt Corporation的執行副主席和CTO。
...對那些勤奮的計算機系的大學生們...
Michael Pilone,作為Blueprint TechnologIEs的資深軟件工程師,他的回答是:"當時我盤算著我將來得找一份體面的工作,所以雖然我在大學中所學全部是C++,但是我還是另外自學了Java。"
"在我上碩士期間,我的指導教授讓我用Java工作,結果我用Java 1.0 beta版完成了我所有的功課。"-Raghu Donepudi,環球計算機公司的系統開發領導者。
...對那些熱衷於編程的狂熱者...
"我一畢業即用Java開始工作,我驚喜於Java的WORA的前景和Applets。"-Jack Herrington,作為Code Generation in Action (Manning)的作者和Code Generation Network的編輯。
"我甚至在1.0版本之前就開始學習Java了,因為其開發目標是作為微軟工具(VB和Visual C++)與Pascal語言的可選替代者",Laurent Ploix寫道,他是SunGard-Finance公司的工程總管和技術架構師。
"在1997年,我帶著一本手冊作為度假讀物,在海灘度假的日子裡,我沉浸在Java的優美之中。我轉向了Java,並宣布C++是一種傳統的語言,並發誓一旦選擇了Java,永不回頭。"-Vlad Patryshev,Borland公司Java Business Unit的前任R&D工程師。
2.Java宣稱的"編寫一次,到處運行"效果怎麼樣(WORA)?一直以來,WORA的重要性改變了多少?
"Java虛擬機,至少在概念上,是Java背後最強有力的思想。它的確實現了它許諾的輕便性。"-Bruce Tate,J2Life, LLC(一家Java技術咨詢公司)的主席。
"應用服務器和J2EE應用程序可以在多種平台上良好地遷移。我認為在客戶端上實現WORA還是相當值得懷疑的,也許永遠不會實現。"-Michael Pilone
"它對我簡直是一個不可捉摸的平台。"-Vlad Patryshev
"Java的早期成功根本上在於WORA。與其它可選擇工具相比,Java帶給了(並將進一步帶給)SI(系統集成商),ISV(獨立軟件開發商)和軟件工程師們一個根本不同的經濟環境。"-Rod Smith
"Java在WORA方面的性能:a)比任何它之前的工具要好;b)就目前而言,與另外一些可選工具相比仍然要好得多;c)將作為Java價值的一個關鍵部分繼續保持下去。"-Rob Gingell
"WORA每次都帶給我極大的便利。我總是在Windows平台上進行我的Java開發;但是,我總是毫不費勁地把這些代碼發布到Solaris 或者Linux 環境中去。"-Eric Bruno,一個獨立的咨詢師,擅長於軟件架構,企業Java和C++開發。
"你可以把字節代碼轉換成MSIL(MS中間語言),而且你可以在J#中運行Java程序。這使我們可以針對我們產品的Java和.Net環境只保留一份代碼即可。"-Michael R. Smialek,Knowledge Dynamics的主席和CEO
"我經常跨Windows,Linux和Sun Solaris開發,測試和發布Java代碼,而僅需對XML配置文件作較少的改動。但是,隨著面向服務的結構的出現,WORA的重要性已經減弱了。"-Kyle Gabhart,作家和獨立咨詢師
"象Perl,Ruby和Python等語言一樣輕便。"-Jack Herrington
"一些人認為,由於通用操作系統的數目的下降,WORA將變得不再如以前那麼重要。事實上,即使只有兩種合理的可能的目標平台存在,WORA就一直是重要的。"-Ed Cobb
二、客戶端Java及開發工具選擇
3.你用Java編寫過多少代碼?估計你將來的工作有多少會用Java實現?
幾乎所的的回答者聲稱Java是他們主要的產品編碼工具,大多數人選擇他們的Java使用率超過70%。沒有人認為他們下一步的Java開發使用率會降低。
"去年,我們利用Java 技術開發出了800多個商業產品。幾乎我們所有的中間件都依賴於Java運行時刻庫。"-IBM的Rod Smith
"在我們的顧客中,我們仍看到具有可以預料的潛在需求的大量C/C++功能第一型的應用程序。他們經常願意用Java進行開發,而Java虛擬機技術目前正發展到正好能夠處理這些類型系統的時候。
在Web應用程序開發中,我想,當人們的應用程序變得越來越大且越復雜時,我們將看到針對動態類型語言會出現一點後推力作用。他們將經受運行時刻類型異常--事實上,他們早已認識到,如果采用象Java一樣的強類型語言的話,這是可以避免的。"-BEA公司的Ed Cobb
4.你用Java開發桌面應用和服務器應用的比例為多少?如果你開發過桌面應用程序,你更喜歡用SWT還是Swing,為什麼?
Bruce Tate對這一問題的回答總結了所有其他人的觀點:"服務器端Java正是它應有的位置。"
至於,客戶端Java開發,眾說紛纭...
"Swing太復雜,太不可預測,太難學。SWT則好一些,但一般而言,Java在用戶接口設計上很不成功。"-Tate,《Better, Faster, Lighter Java》和《Bitter Java》的作者
"我認為SWT有更好的方法,它鏈接到本地lib庫文件以達到加快速度和一致性的目的,但是我並不喜歡這些API,因為它們暴露出太多的老式的編碼技術。相比之下,Swing有一個更好些的API,但是其中充滿錯誤、性能低下且設計糟糕。"-Michael Pilone
"我更喜歡SWT...它比Swing更具本地化,Swing而可以說只是粗略地實現了本地化。"-Ed Cobb
"我寫Swing應用程序,然後使用Java Web Start來進行發布。我還沒有出賣過我的SWT型程序,因為它僅有有限的跨平台支持並缺乏可靠的MVC設計。"-Kyle Gabhart
5.你使用的Java開發環境是什麼?
很明顯,當前流行的Eclipse框架和集成開發環境是大多數對這一問題的回答,因為其是Windows和Linux平台的主流環境。只有另外少數的回答者指定了其它幾個選擇:
"我選擇的平台是WinXP Pro。在安裝了Cygwin和另外幾個開發工具後,你就可以得到一個具有硬件支持的非常有用的系統了。"-Michael Pilone
"我特別喜歡J2SE 5。說到IDE,我更喜歡JBuilder,其次是IDEA。IDEA中有一些巧妙的實現,但是良好的經典的Jbuilder具有我需要的任何東西。"-Vlad Patryshev
"我一直使用eMacs開發而用println進行調試。最近我在使用NetBeans,已驚奇於它給我帶來的巨大幫助。"-Jim Waldo
"請不要使用EJB!"-Laurent Ploix
"Visual Café。"-Smialek
"在必要的時候,我都使用vi進行開發。"-Kyle Gabhart
三、開源,JCP和對Java的希望列舉
6.JCP和開源社群誰在Java更新上的貢獻更大?
"到目前為止,應該說是開源的貢獻更大。而JCP在進行實際的開發實踐之前,推崇標准化的作用。EJB,日志以及持久性一直是JCP中的災難。實際上JCP在拋棄著Java的根基。很難的問題在拐彎抹角變得易於解決,而容易的問題反而在變得越來越難於解決了。"-Bruce Tate
"開放源碼的執行領導著開發過程,而JCP僅僅是定義了一些標准。"-Laurent Ploix
"如果說純粹的革新,我將選擇開源。當工程中存在漏洞需要補全時,開源是能夠迅速得到響應的。而JCP目前是一種太慢的方式,以至於根本跟不上工業發展的步伐。"-Michael Pilone
"多數的革新經歷了JCP模式。但是,在過去的幾年中,我們看到了在開源模式中的活動不斷增加的跡象。"-Rod Smith (IBM)
"為使得開源運動進行下去,JCP值得廣泛的信任,它對於Java生態系統的發展起到提供一個群落中心的作用。任何一些非JCP標准的開源工程已經探索了各式各樣的思想-一些是糟糕的,一些卻取得了令人驚喜的成績。JCP可以說是一場偉大的創新運動的火車頭。"-Ed Cobb (BEA)
"JCP本身僅僅是定義了一些標准及相應的說明書,這在已有的工程實現中被得到支持。作為編程者,我們不想根據一段現成的Java編碼來指導我們編程,而要根據一套成熟的說明書進行開發。真正有用的編程最開始往往是零碎的代碼片斷,經常經歷一個先有代碼然後有規范的說明書的過程。"-Rob Gingell
"我找到了開源的主動性,特別是從apache到當前最具創新性的有用的軟件中找到的。"-Eric Bruno
7.Sun應該開放Java的源代碼嗎?
你知道這個問題肯定會出現在問卷之中的。
"這一點並不重要。Java在走自己路的過程中,自身已經建設得足夠強大。"-Bruce Tate
"如果Sun在做這樣一件有益的工作,為什麼要打擾他呢?"-Raghu Donepudi
"不應該。如果它實現開源,那麼我們能夠看到Java的許多技巧,這最終將導致一些問題的出現,例如我們現在使用應用程序服務器時所遇到的問題。"-Rahul Kumar Gupta
"是的。Sun拒絕這樣做的唯一原因就是,Java完全是他們自己的產品,他們使用它來使自己的公司得以維持下去。"-Jack Herrington
"一方面,開源的思想是很有吸引力的,因為它將導致更多的錯誤在很短的時間內就得以修改。另一方面,它可能導致分支分派的不匹配的Java虛擬機的出現。"-Michael Pilone
"不。我不相信一群普普通通的所謂天才人物就能取代那些負責管理極為健全的基本概念的大家們的科學思想-其中的大多數人甚至還不能明白這個問題。"-Vlad Patryshev
"開源社團的加入將會加速創新並推動該平台的競爭性。"-Rod Smith(IBM)
"我們需要一個開源Java的主要原因是確保該平台的生命力。如果將來Sun公司發生什麼事情的話,開源的Java將列入我們的保險計劃中。"-Ed Cobb(BEA)
"我認為是應該的。’開源’Java並不要求Sun做什麼事情,它只是要求另外一些公司或個人做一些事情。’開源’Java是不可避免的。我建議Sun積極地實現這一不可避免並為此帶來的益處做一些工作。"-Rob Gingell
"我對此並不關心"-Kyle Gabhart
8.你希望Java有怎樣的改進?
"從較低層次上,Java需要代碼的模塊化,擴展和一個更具動態化的模型,以及還需要增加很多的功能以使得應用程序開發更為容易,因為你不可能僅僅利用庫來實現一切。"-Bruce Tate
"內省機制(用一個類來分析JavaBean的特性)使用起來太難且過於繁重。"-Laurent Ploix
"需要加入代碼使用許可證機制。"-Greg Magnusson,Cyborg Spiders的Web技術開發的奠基者
"應該提供由開發者來進行內存管理的功能。"-Raghu Donepudi
"應該加入運算符重載功能。"-Jack Herrington
"目前迫切需要在Java中加入Jar版本機制。我記不清有多少次遇到XML分析庫沖突或者日志庫沖突了。"-Michael Pilone
"類對象。十年了,沒有任何改變。有大量的類對象需要加上去。"-Vlad Patryshev
"Java平台目前已經變得過於復雜。我們認為Java社團需要做出更好的工作來滿足獨立的和中小型的商業需要,這也是為了Java繼續發展、繁榮和成功的目的。"-Rod Smith(IBM)
"Java非常需要一個更為強壯的模塊化的系統。當前,我們所擁有的是一些.jar文件,其結果是成了’.jar文件地獄’。但是今天還很難描述一個互有聯系的模塊化的系統。"-Ed Cobb
"我原先希望Java能夠實現的,過去的Java並沒有做到:關於日期和時間問題上有好幾處從一開始就是錯誤的;RMI/IIOP的引入在理論上是正確的但完全沒有必要;它自一開始就是自我封閉的。"-Rob Gingell
"對於類的加載和對象的Java運行時刻類型的關系的處理是一個錯誤,現在我們還在為之付出代價。你不可能真正確定出是否你的程序在編譯時刻是類型安全的。而且,如果你在做適當動態的任何操作,你經常需要對一個給定類的正確加載作出猜測分析。"-Jim Waldo
"垃圾回收簡直是個噩夢。它有可能使得沒有經過良好訓練的,懶散的編程人員進入到這個工業領域中。"
"Java需要增加的另外一些功能有:操作符重載;預編譯指令(#define,等等);把聲明與定義(頭文件和源文件)相分離的能力;唯一的、非本機的機器標志符(用於認證之目的)。"-Michael Smialek
"迫切需要加入Code-Behind(頁面代碼分離)技術!!!ASP.Net和頁面代碼分離技術所帶來的重用性與靈活性是巨大的。我希望JSP 3.0能夠朝這個方向發展。"-Kyle Gabhart
"我更願意使用Java對象來存取操作系統而不是用JNI(Java本機接口),因為大多數的Win32/Linux API都包含在Java中了。"-Alexi Jordanov,OSGi技術公司ProSyst Bulgaria的項目領導者
四、Java帶給人們的最偉大的禮物與Java的未來
9.Java對軟件社群最大的貢獻是什麼?
我們收到的大部分反映結果認為是平台獨立性,Java平台和該語言本身的創建以及他們創建的各種社團。
"有兩點:它使得更廣泛的用戶群可以接受垃圾收集語言;圍繞該語言湧現出了各種集成開發環境。"-Jack Herrington
"Java真正地震撼了許多東西,這包括迫使微軟設計出新的產品,諸如Visual Studio的進一步改進和.Net產品的出現等。由於Netscape選擇了Java,這使得客戶浏覽器能夠執行JavaScript。它使當今世界服務器端開發也邁出了巨大的一步,受此技術影響的站點數以百萬計。"-Michael Pilone
"數百萬的學生不需要學習C++。"-Rob Gingell
"能使多家廠商貫徹實施的標准化API的建立。很多廠家競相提供該標准化接口的最好實現,這給業界創造高質量的解決方案帶來了強大發展動力。"-Kyle Gabhart
".Net"-Michael Smialek
10.Javaa的未來會如何?
"任何一種語言總是存在其有限的技術領先周期,Java也不例外。在某種意義上看,能超過Java技術會是一種非常有趣的事情。"-Bruce Tate
"當桌面和膝上電腦要被手持設備取代時,我們可能需要一種更簡單的更強有力的語言。"-Raghu Donepudi
"C#具有擠垮Java的潛力,它是一種更好的語言。"-Jack Herrington
"微軟在通過.Net以一種令人難以置信的速度發展。由於擁有Windows操作系統的大量客戶端用戶,所以他們比Java具有更大的優勢。"-Michael Pilone
"在一些新技術被編程世界接受之前,至少要經過幾年的時間。例如,看起來不超過5%的Java程序員能掌握Java泛型編程。請問,又有多少人可以掌握Lock/Condition?"-Vladimir Patryshev
"當技術朝著圍繞交互性的結構化(如面向服務的結構化)方向發展的時候,Java語言將繼續作為一種語言在計算機工業發展中占有重要地位。"-Rod Smith
"在某種意義上看,Java 虛擬機體系所要求的限制可能有點太嚴肅了。但是,任何一種新的挑戰者虛擬機登上舞台並用之取代Java平台都是一件很好的事情。"-Ed Cobb
"實際上我們可以開發出許多種不同的語言,其中一些可能與我們熟知的Java根本不同,但是仍舊保持應用程序二進制接口(ABI)。這是為什麼Java將會保持長時期的重要性的原因。"-Rob Gingell
"Java將繼續作為一股巨大的力量存在於IT業中,但是一些瞄准市場的腳本語言將會在某些行業中進一步發展壯大。"-Doug Tillman,Grainger.com站點Java和Python技術的開發者
"任何一個人,只要他在該界業干過多年,都不會相信,存在一種技術會對要推翻自己的更新、更快或者更有效的技術產生免疫力。"-Kyle Gabhart