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