一、軟體開發技術
1)伺服器端
在最近5年內,Java還是主流,不光是因為當前的普及程度和遺留系統問題,而且除Microsoft幾乎所有大公司都投資到Java上面的原因,此外開源也是一股無法忽略的力量:除了Java方面的開源架構在推動Java,也有Linux在帶動java公司專屬應用程式在普及(別忘記dotnet只能在 Windows Server上面運行)
dotnet有自己的優勢,但是在五年內無法和Java取得均勢,不光是因為Java普及帶來的優勢,也不光因為開源界對java的推動,也不光因為其他大公司在java上面的投資,而是很多公司的行業性質決定了dotnet的出局,例如電信行業,金融行業,電子政務行業等等,是根本沒有可能採用 dotnet的。
Python和Ruby算不上後起,但是很有競爭實力,不過基於上面的原因,仍然不能成為主流。
在Java伺服器端技術中,清晰的分為兩條路線:高端的商業路線,這條路線是EJB3,J2EE5.0;低端的開源路線,這條路線是Hibernate, Spring。這兩條路線也有重疊的地方,例如開源的Struts幾乎成為J2EE Web層的標準,開源的Hibernate奠定了EJB3的基礎。但是劃分路線不是基於技術上的區別,而是基於商業運作上的區別。注重支援人員和商務服務的公司會選擇前者,注重成本控制和選擇自由的公司會選擇後者。
商業路線的技術方案是:EJB3+Struts;
開源路線的技術方案是:Spring+Hibernate+Struts/Webwork
Struts是一個很成功的開源架構,它的地位短期內還無法動搖,JavaEye有一項使命,就是動搖Struts在Java Web領域的地位,把它趕下王座,把Webwork扶上位!
商業的Web層技術,JSTL算是一個不錯的東西,但是和靈活的範本語言如FreeMarker相比,卻有很大的差距。JSF基本上是一個沒有前途的東西。商業Web層技術因為一直沒有出現好的應用,這樣也導致了Struts的上位。
伺服器端業務層和持久層架構,我非常看好EJB3,原因也不用多談了,從商業上來說,需要這樣一個東西,跨國公司們也需要這樣一個產品來賣,來取代糟糕的 EJB2。開源的方案裡面,Spring+Hibenrate是一個很好的商業方案的開源替代,他們不存在很直接的競爭,而是一個互補的關係。這裡比較尷尬的反而是JDO:JDO是商業產品(目前沒有好的開源實現),造成開源應用不會對它感興趣,JDO沒有一個像EJB容器那樣的脫管環境,造成商業方案對它不感興趣。不過有了JDO,我覺得是對EJB3,對Hibernate形成一個良好的競爭環境,這一點是非常有利的。
2)用戶端技術
準確的說是RIA應用。雖然我前面對XAML進行了正面的評價,但是我認為我前面有些結論給錯了。經過這段時間,我覺得,XAML即時在多年之後,也未必能夠成為一個非常成功的解決方案。道理很二:
1、XAML會帶來比ActiveX更嚴重的安全性問題。
XAML本質上就是一個本地應用程式,雖然號稱可以在IE瀏覽器裡面運行,但IE就是一個皮而已,XAML應用具備對本地資源完全的訪問能力(就算IE限制也沒有用,IE限制就喪失功能,那樣的話,功能並不會比Javascript來得更多;不限制的話,就為所欲為了),因此只要IE具備了運行XAML的能力,駭客將可以非常輕易的通過IE進行入侵,這僅僅需要引導使用者在不知不覺中訪問一個惡意的網頁就搞定了!使用者必須面臨選擇:要麼禁止IE對XAML的運行能力,要麼接受隨時被攻擊的危險。
2、XAML應用本質上也是RIA應用,因此必須進行大量的RPC調用
當前XAML採用XML Web Services進行通訊,這是一種低效的RPC。當前的XAML案例中並沒有注意到RPC領域,實際上根據我現在做RIA的體驗來說,RPC絕對不是一個簡單的事情,要考慮的問題非常多,而且需要你在用戶端和伺服器端進行通盤的考慮,特別是伺服器端的領域物件模型的設計,而我們知道dotnet在O/R Mapping方面還沒有起步。
從當前的階段來說,最實際可用的方案有兩個:
1、AJAX
實際上就是基於XMLHTTP的JS非同步互動,這個東西已經出現很多年了,最近隨著Google應用和Sun Blueprint的推出開始火熱。我原來對這個東西持否定態度,但是後來轉變了。我原來否定態度的一個前提就是:XMLHTTP缺乏成熟的組件庫!但是沒有想到的是,現在XMLHTTP從去年下半年開始,如雨後春筍般冒出來。AJAX應用最大的好處就是充分利用現有資源,我認為應成為RIA應用的首選。
2、Flash
Flash的優勢也很明顯,強大的AS支援,強大的組件可視化設計,強大的互動能力和很炫的使用者體驗,並且Flash Remoting也已經非常成熟了。Flash的缺點就是Flash雖然嵌入網頁,但是和網頁沒有資料互動能力,Flash另一個缺點就是不適合處理大量常值內容(HTML最適合)。現在有些人開始濫用Flash了。
因此比較好的方式可能是兩種混用,一般不過度複雜的互動交給AJAX,非常複雜,甚至需要托拽操作的,交給Flash。
總結一下:
軟體開發領網域服務器端技術Java是主流,兩個技術路線,一個是EJB3,一個是Spring+Hibernate,此外iBATIS也有一席之地;用戶端技術就是AJAX和Flash。
二、資料庫技術
基本上格局不會發生多大變化,Oracle還是高高在上,SQL Server進一步蠶食NT平台其他資料庫的領地。開源方面,MySQL將一枝獨秀,但是開來源資料庫在很多方面還是和商務資料庫有無法拉近的巨大差距。這也使得商務資料庫的地位不可替代。我會比較關注Oracle,MySQL這兩個資料庫。物件導向資料庫仍然不會有什麼起色。
三、案頭編程技術
我還是相信一點,對於案頭應用來說,本地代碼的位置永遠無法被取代,所以我總覺得XAML那樣的東西效率實在很成問題。Longhorn要像成熟,也不是第一個版本就可以達到的。當前案頭應用開發技術,還是首推Delphi,不過我覺得Python是後起之秀,非常有可能在未來取代Delphi。