前言 象許多在不斷發展的平台/語言一樣
Java讓很多程序員又愛又恨
當然
當然這不包括那些狂熱的Java愛好者
對於他們來說Java比
Net
LAMP或任何其他語言或平台都要好
但是
我們還是不得不面對復雜的Swing
龐大的EJB規范等對硬件的額外要求以及J
ME的變化多端的實現方式等等等等
拋開以上這些Java的弱點
我們可以說Java是一個完美的技術平台
那麼Java到底有沒有成為一個完美的技術平台的潛力呢?這篇文章將從兩個方面討論這一主題
開始
我會詳細的告訴你什麼是完美的技術平台以及為什麼Java平台能夠成為完美的技術平台
之後我會偏重於具體的解決方案
如何通過設計的優化避免Java平台的弱點
基礎 首先
你為什麼會關心Java是否是一個完美的沉下平台?它現在不是也很好嗎?不
不是的
我相信在文章結束的時候
我將向你展示一些列Java中可修正的缺點
解決這些缺點會加快Java平台的發展
提高整個開發平台的性能
簡而言之
它將使Java不管在工業還是商業領域都成為一個實際上的技術標准
成為程序員的一個超級語言
什麼才是完美的技術平台?在我作進一步說明之前
我應該先定義一下我認為的完美的技術標准是什麼
簡單的講
我認為完美的技術平台應該是這樣一個軟件系統
它可以讓新手或高級開發人員都能使用
能夠編寫簡單的程序也可以編寫高級的應用
它應該能夠運行在所有的硬件平台或操作系統平台上
並且應該是本地化的操作或接近本地化的操作
定義這篇文章討論的范圍 類似這篇文章的主題
事先定義一個范圍是很重要的
首先
我們不討論任何非Java的技術平台
你也許會認為這有些太狹隘了
我不這麼想
這篇文章是要單獨的討論Java平台的各個方面
並不是要和其他的語言平台進行比較
我的興趣在於那些為了完善Java平台提出的具有建設性意義的觀點
如果可能
我希望其他技術平台的支持者能夠發表類似的文章提出他們認為最完美的技術平台
另外
我在這裡還假設Java語言已經是各種技術平台中最佳程序語言
並且我也不會討論最新的Java
平台J
SE
盡管在J
SE
中我可以感覺到其中的一些變化比如標有
keeping up with the Joneses
的是把矛頭指向了C#語言
一個語言的穩定與否至少需要將近
年的不斷驗證才能證明它的最初設計是否是健壯的
參數化集合的實用行在JDK
中是顯而易見的
其中的一些新特性比如autoboxing
enumerations和 static imports引起了開發人員的廣泛關注
Java繼承了來自C和C++的健壯行
它一開始就被設計為一個面向對象的語言
我認為這是一個成為核心語言和優秀平台的關鍵所在
當然這並不算什麼先進的思想因為從最早的Eiffel到Smalltalk都是面向對象的語言
那麼Java和他們之間有什麼根本的不同嗎?Java和那些比如功能性編程語言象LISP
Haskell或象SQL這樣的可以通過語義來執行的語言又有什麼不同嗎?因為我們學習這些語言只需要一本手冊就可以了
但別高興的太早
如果一個市場上主要的廠商比如SUN
HP或微軟想要把這些語言中的一種拿出來
並圍繞它開發他們的下一代技術平台
你會發現這個語言的不會再進一步更新
我喜歡把Java作為一個平台來看待
實際上Java作為一種語言來說在Java平台中只是較少的一部分
也因此我會在下面介紹作為一個完美的技術平台的重要特征
什麼才是完美的平台 比較起來
對於這個主題來說可以講的很詳細也可以講的很簡短概括
我選擇了後者
對此有興趣的讀者可能會注意到有關這個主題的詳細討論很多詞匯後面都會有一個
ility
作為結尾
也明白它是ility矩陣(matrix)
在我看來作為一個完美的技術平台應該具備這些條件
便於開發
而且提供多路訪問(詳見下面的討論)
穩定性
這體現它應該便於客戶平台的部署
還應該是本地化模式的部署操作
必須具備可靠的性能和可測試性
基於開放的標准
Java符合這些標准嗎? 到現在我已經定義了一系列符合完美技術平台的標准和特征
讓我們看看Java的成長過程是否符合上述的特征
我不得不痛苦的承認
開發Java程序並不容易
相對簡單的項目還好
但如果項目不斷增長以至於變得越來越復雜就會不斷出現越來越多的問題
比如J
EE應用就是這樣
因此在項目的開發中我程序員需要花更多的時間來跟蹤底層的問題
比如類引導(classloading)問題而不是解決實際的業務邏輯問題
還有令很多程序院頭疼的EJB(查看我過去的文章To EJB
Or Not To EJB?)通常情況下他們都是在清除一系列的警告信息
EJB也許想把負責的問題簡單花
但是它並沒有更貼近於現實中的持久化問題或業務邏輯的解決方案
這還與Java開發工具的不足有關
坦率的說
微軟的Visual Studio在這方面比Java作的要好
Java需要學習
我曾經提出過一個多層次訪問的想法
它允許開發人員或者用戶可以工作在Java中的不同層次
比如核心開發人員可能使用emacs/vi的方式來以命令行調試器的方式開發和部署以Java為基礎的系統
而業務分析師或最終用戶應該能通過使用WYSIWYG這樣的工具來訪問和修改這個系統
Java在這兩方面的開發並不是很容易
當然applet和JavaWeb Start技術在這方面提供了一定的幫助
當這兩種技術也有自己的不足
運行他們必須在客戶端安裝配置JRE
Java平台是想當穩定的
我已經不記得上一次應為Java本身的bug而給我帶來麻煩是什麼時候了
所以如果要作一個企業級應用的話我寧願選擇J
EE而不是
Net
Java在服務器端的應用是足夠穩定和健壯的
Swing客戶端的應用表現也不錯但在執行速度方面比起本地的應用要差一些
由於對資源限制的原因比如移動電話(或智能終端)
在這裡使用Java而不是用本地化的開發工具從實用性角度來說就顯得有些奢侈了
附加額外的MIDP比起直接調用本地的應用造成了運行時的性能損失
很明顯
Java有來自業界的主要軟件廠商的廣泛支持(除了微軟)
比如IBM
HP
Oracle已經把他們自己的技術整合到了Java平台上
這對關心Java的人來說是個好消息
還有更多的組織和團體化大量的精力不斷的晚上Java
他們希望看到Java在移動設備
PC
服務器等各個領域不斷的成長
進步
優點
Java的優勢在哪裡? 平台支持
J
SDK已經可以運行在任何的操作系統和硬件平台上
從金融機構到娛樂設施
從科學研究到家用電腦都可以使用Java
Java語言規范和Java運行時規范的明確區分允許研究人員可以通過運行一個編譯器來產生程序語言的映射
而不必非要使用Java來編譯二進制碼――也就是說它可以運行在任何的虛擬機(VM)上
這一點在我後面要提到的Java戰略的改變非常重要
Java是當今企業級計算和應用中相當成熟和穩定的平台
微軟仍然在不斷的改進他們的
Net
而且可能最後會象Java一樣好或者比Java好要好(但這只局限在Windows平台上)
但現在還作不到
另外
還有另一個競爭激烈的領域
那就是移動設備
盡管在前面我們提到過Java在節省設備資源方面相對較差
但是不可否認在這個領域它也占據著領導地位
Java在學術界也獲得了強有力的支持
如果你在大學學習你會發現Java已經成為多數科學研究和計算使用的首選語言
在大學中有越來越多的人在使用Java語言
越來越多的尖端學術研究完全使用Java語言
各個行業的公司都有很多的Java程序員在開發他們的項目
缺點 現在我們來看看Java的缺點
一個開發組織創建新的框架和組件庫幾乎總是在存在優點的同時也存在著不足
一個優秀的組件技術總是在不同的開發人員和組織間相互競爭和促進中成長起來的
但是在這一過程中
卻使得用戶(這裡特指開發人員)非常困惑
盡管Sun一直在忙於應付
但是就到底是使用JDO還是EJB更好一直存在著爭論
的確
我們必須確定把哪一個繼續發展下去
現在我們能作的就是把這一個想法簡單的提交到JCP組織
比如
如果你是一個J
EE設計師
你能
%確定當前哪一種才是完美的解決方案嗎?我不能
但我的觀點是
注重實際的方案就是完美的方案
現在有一種觀點認為Java過於復雜
有誰能完全了解Java從服務器到PDA各個方面的所有知識嗎?作為一個博大精深的語言
Java在人們生活的不同領域都無處不在
這不可避免的帶來了它的復雜性
但同時這也更值得開發人員在其平台上使用Java來開發不同的應用
Sun的一句明言就是
嘿
我們已經給了你一個非常棒的核心技術
現在你可以用它來創建任何開發工具或健壯的產品
其中非常活躍的Jini/JavaSpaces就是一個例子
Sun自己把這一技術作為一個學術研究的工具
它幾乎沒有什麼技術缺陷
實際上
基於JavaSpaces的編程模型也許是最簡單最強大的技術之一
Windows 家族集成了很多繁瑣的分布式客戶端平台
除非與Java捆綁否則Windows技術永遠無法避免這些缺點
當然
隨著
Net的崛起
Java 在客戶端編程(thick
client)方面將失去了很多優勢
我不認為Sun為Java投入了足夠的財力
這給Java帶來了潛在的隱患
那麼為什麼Sun應該繼續對Java平台投資呢?我更樂意看到Sun通過大量的財力扮演一個
善意的獨裁者
它將通過與象BEA
IBM
HP等這樣的公司而不是和開發人員或最終用戶一起合作來指導Java的未來
我擔心來自Sun對Java的動搖
Sun公司的健壯穩定的發展預示著Java的不斷完善
如果Sun出了問題那麼Java的發展和完善也將受到影響
下面的圖示顯示了影響Java技術平台的幾個方面
圖
顯示了高層的理想化的Java技術平台
其中
由Sun及其合作伙伴控制的技術顯示為橙色
其他不屬於Sun的為綠色
Java有哪些缺點
無疑
我承認Java平台是有缺陷的
這必須指出
下面幾節將詳細講述這些問題和戰略及戰術上的建議
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25369.html