在孟巖老師11月21日的blog(http://blog.csdn.net/myan/archive/2006/11/21/1402346.aspx)中說(shuō)他驚艷于微軟公司新近推出的界面研發(fā)工具Expression,并且預(yù)言基于Web標(biāo)準(zhǔn)(通常即XHTML+CSS+JavaScript)的界面研發(fā)技術(shù)非常快就會(huì)沒(méi)落。孟巖預(yù)測(cè):“最遲不超過(guò)2008年,在WPF、Flash(Apollo)等RIA技術(shù)的夾攻之下,越來(lái)越多的Web應(yīng)用將同時(shí)部署傳統(tǒng)Web頁(yè)面和新的RIA UI。”
對(duì)于這個(gè)預(yù)測(cè),我和一些朋友認(rèn)為孟巖老師過(guò)于樂(lè)觀了。我預(yù)測(cè)至少到2010年,基于Web標(biāo)準(zhǔn)的界面研發(fā)技術(shù)仍然將是Web界面研發(fā)的主流技術(shù),而這些技術(shù)的集大成者就是Ajax。Ajax技術(shù)在最近兩年中取得了非常大的發(fā)展,并且仍然在迅速發(fā)展的過(guò)程中,目前就斷言Ajax技術(shù)即將沒(méi)落還為時(shí)尚早。
誠(chéng)然,從純技術(shù)的角度來(lái)看,我們也早就認(rèn)為XUL/XAML一類使用XML來(lái)描述界面組件和布局的技術(shù)肯定是Web界面研發(fā)技術(shù)的發(fā)展趨勢(shì)。W3C今年成立了一個(gè)工作組,希望將XUL、XAML、MXML等幾種界面描述語(yǔ)言統(tǒng)一為一種標(biāo)準(zhǔn)的格式(http://www.w3.org/2006/appformats/)。所以我們認(rèn)為孟巖老師所看到的趨勢(shì)是沒(méi)有大問(wèn)題的。從純技術(shù)的角度來(lái)看,將來(lái)的Web界面研發(fā)肯定會(huì)發(fā)展到這種技術(shù)。
然而,能看到趨勢(shì)當(dāng)然非常重要,不過(guò)我們還是需要解決非常多現(xiàn)實(shí)的問(wèn)題。我在這里提出幾個(gè)問(wèn)題來(lái)和大家探討。
第一個(gè)問(wèn)題是:這種趨勢(shì)將會(huì)以多快的速度成為現(xiàn)實(shí)?
技術(shù)的發(fā)展和演進(jìn)往往都是個(gè)長(zhǎng)期的過(guò)程。面向?qū)ο笱邪l(fā)取代面向過(guò)程研發(fā)、Java取代C++、Ruby逐漸取代Java都是個(gè)長(zhǎng)期的過(guò)程。孟巖老師所預(yù)測(cè)的2年和我所預(yù)測(cè)的4年似乎相差不大,不過(guò)對(duì)于我們現(xiàn)階段所要采取的行動(dòng)其實(shí)影響非常大。
即使正如孟巖老師所預(yù)言的,這確實(shí)是技術(shù)發(fā)展的趨勢(shì)又能怎樣?我們是否一定要在今天為明天和后天發(fā)生的事情而買單。過(guò)早為將來(lái)發(fā)生的事情買單,非常可能會(huì)代價(jià)高昂。這跟炒股差不多,有經(jīng)驗(yàn)的玩家會(huì)在最適當(dāng)?shù)臅r(shí)機(jī)入手。過(guò)早入手、過(guò)晚入手,都會(huì)蒙受損失。在這種趨勢(shì)成為現(xiàn)實(shí)之前,我們是否坐等共產(chǎn)主義的實(shí)現(xiàn)?我認(rèn)為等待并不是一種積極的態(tài)度。
第二個(gè)問(wèn)題是:Ajax有何好處?
我認(rèn)為孟巖老師并沒(méi)有充分地看到Ajax的好處。孟巖說(shuō):“昨天我還在說(shuō)Ajax是過(guò)渡技術(shù),沒(méi)想到幾個(gè)小時(shí)之后就得到印證。” 其實(shí)嚴(yán)格說(shuō)來(lái),所有的技術(shù)都能稱為是過(guò)渡技術(shù),不過(guò)這并不會(huì)妨礙使用這種技術(shù)來(lái)為用戶創(chuàng)造價(jià)值。孟巖只看到了使用基于Web標(biāo)準(zhǔn)的界面研發(fā)技術(shù)研發(fā)效率低下的一面。不過(guò)目前國(guó)內(nèi)做界面研發(fā)的研發(fā)者有多少人真正理解了Web標(biāo)準(zhǔn)呢?根據(jù)筆者的經(jīng)驗(yàn),采用完全的CSS布局,將頁(yè)面的結(jié)構(gòu)、表現(xiàn)、行為三部分分離開,注重頁(yè)面各部分的重用。經(jīng)過(guò)一段時(shí)間的積累之后,基于Web標(biāo)準(zhǔn)的界面研發(fā)完萬(wàn)能達(dá)到比較最佳的研發(fā)效率。而配合使用Dojo、Scriptaculous、YUI等成熟的Ajax組件庫(kù),還能更進(jìn)一步提高界面的研發(fā)效率。在筆者看來(lái),影響研發(fā)效率的問(wèn)題主要有兩個(gè)方面:
1 Web界面研發(fā)者沒(méi)有充分理解Web標(biāo)準(zhǔn)。
2 Web界面研發(fā)者沒(méi)有嘗試過(guò)組件化的研發(fā)方式。
相對(duì)于其他技術(shù)而言,Ajax最大的好處有這三點(diǎn):
1 Ajax是完全基于Web標(biāo)準(zhǔn)的技術(shù),Ajax所用到的所有的技術(shù)都是真正的Web標(biāo)準(zhǔn)。
2 Ajax應(yīng)用能毫無(wú)障礙地部署到幾乎所有的桌面計(jì)算機(jī)上。
3 Ajax應(yīng)用的研發(fā)和部署成本非常低。
對(duì)于第一個(gè)好處,有人可能會(huì)爭(zhēng)論說(shuō),標(biāo)準(zhǔn)其實(shí)并不重要。例如EJB 2.x是標(biāo)準(zhǔn)又怎么,目前不是也相同被拋棄了嗎?不過(guò)這兩種標(biāo)準(zhǔn)是不可相提并論的。EJB的標(biāo)準(zhǔn)在推出之時(shí),完全沒(méi)有經(jīng)過(guò)研發(fā)實(shí)踐的檢驗(yàn),和研發(fā)實(shí)踐嚴(yán)重脫節(jié)。然而Web標(biāo)準(zhǔn)卻是從研發(fā)實(shí)踐中積累而來(lái)的。Ajax所基于的這些Web標(biāo)準(zhǔn)都是先有了非常成熟的應(yīng)用和成功的商業(yè)案例之后才會(huì)形成標(biāo)準(zhǔn)。Web標(biāo)準(zhǔn)之所以成為了今天這個(gè)樣子,是經(jīng)得起歷史考驗(yàn)的。如同TCP/IP標(biāo)準(zhǔn)相同,他仍然會(huì)長(zhǎng)期沿用下去。
第二個(gè)好處其實(shí)是第一個(gè)好處所派生的。上世紀(jì)90年代末,在Web標(biāo)準(zhǔn)組織和W3C的不懈努力下,結(jié)束了瀏覽器大戰(zhàn),各種瀏覽器都承諾支持真正的Web標(biāo)準(zhǔn)。今天這種支持到了開花結(jié)果的時(shí)候,結(jié)出的果實(shí)就是誕生了一種稱作Ajax的新技術(shù)。正是因?yàn)榻裉焖兄髁鞯臑g覽器都已能夠非常好地支持Web標(biāo)準(zhǔn)(通常即XHTML+CSS+JavaScript),而幾乎所有桌面計(jì)算機(jī)上都安裝了某種主流的瀏覽器(IE、Firefox/Mozilla、Opera、Safari、etc.),因此Ajax應(yīng)用能無(wú)痛地部署到幾乎所有的桌面計(jì)算機(jī)上。盡管今天不同的瀏覽器對(duì)于Web標(biāo)準(zhǔn)某些部分的理解還略有歧義,實(shí)現(xiàn)上略有差異。不過(guò)只要基于成熟的組件庫(kù)來(lái)做研發(fā),這些差異能被最小化,已不會(huì)成為研發(fā)的障礙。
如果我在這兩三年內(nèi)想建立一個(gè)電子商務(wù)網(wǎng)站,卻只能部署到幾百萬(wàn)個(gè)安裝了XAML render引擎的用戶機(jī)器上(而不是像Ajax那樣幾乎所有的桌面計(jì)算機(jī))。除非我的腦子壞掉了,我不會(huì)做出這樣的選擇。對(duì)于面向互連網(wǎng)的應(yīng)用而言,基于真正Web標(biāo)準(zhǔn)來(lái)做研發(fā),并且隨著Web標(biāo)準(zhǔn)及其瀏覽器實(shí)現(xiàn)的發(fā)展而演進(jìn),是實(shí)現(xiàn)最大商業(yè)利益的必然選擇。
Ajax應(yīng)用能被部署到幾乎所有桌面計(jì)算機(jī)上這個(gè)事實(shí)是其他所有技術(shù)多年來(lái)夢(mèng)寐以求而不可達(dá)的最佳國(guó)。另外一種現(xiàn)實(shí)的選擇是Flash UI,F(xiàn)lash的部署范圍也已達(dá)到了足以大規(guī)模應(yīng)用的程度。出于現(xiàn)實(shí)的商業(yè)考慮,我在幾年之內(nèi)都不會(huì)選擇基于XAML建造我們的應(yīng)用,除非他的部署范圍達(dá)到了某個(gè)臨界值,并且有朝一日成為真正的Web標(biāo)準(zhǔn)。
第三個(gè)好處是因?yàn)椋邪l(fā)Ajax應(yīng)用所需要的工具幾乎全部都是開源軟件,能免費(fèi)獲得,因此不必花錢去購(gòu)買昂貴的研發(fā)工具。其實(shí)研發(fā)簡(jiǎn)單的Ajax應(yīng)用,一個(gè)主流的瀏覽器,再加上一個(gè)文本編輯器就已足夠了。只要你所研發(fā)的代碼質(zhì)量足夠高,Ajax應(yīng)用的部署能達(dá)到完全的零成本。
第三個(gè)問(wèn)題是:基于瀏覽器和Web標(biāo)準(zhǔn)的研發(fā)技術(shù)是否一定會(huì)沒(méi)落?
我和孟巖老師的一個(gè)主要的分歧在于,我并不認(rèn)為基于瀏覽器和Web標(biāo)準(zhǔn)的研發(fā)技術(shù)一定會(huì)沒(méi)落。其實(shí)早在3年之前,當(dāng)我嘗試基于XMLHttpRequest來(lái)設(shè)計(jì)我們的架構(gòu)和研發(fā)我們的應(yīng)用時(shí),當(dāng)時(shí)已有非常多人預(yù)言基于HTML(或XHTML)+JavaScript的研發(fā)方式必然會(huì)非常快沒(méi)落,對(duì)于我對(duì)JavaScript如此熱衷非常不理解。不過(guò)幾年過(guò)去了,這種研發(fā)技術(shù)非但沒(méi)有沒(méi)落,反而煥發(fā)出了勃勃的生機(jī)。這是在其沒(méi)落或滅亡之前的回光返照嗎?至少在我看來(lái)并不是這樣,而是有其內(nèi)在的規(guī)律。正是因?yàn)樯厦嫖宜f(shuō)到的這種研發(fā)技術(shù)的好處,今天幾乎所有的Web用戶都在使用這種技術(shù)。有龐大用戶量廣泛使用的技術(shù)必然會(huì)不斷發(fā)展,而不可能非常快沒(méi)落。其實(shí)XAML最終是否會(huì)取代Ajax,這并不是個(gè)純技術(shù)的考量,而是涉及到整個(gè)Web應(yīng)用生態(tài)系統(tǒng)的遷移。今天90%以上(我的保守估計(jì))的Web應(yīng)用都建立在基于Web標(biāo)準(zhǔn)的界面研發(fā)技術(shù)之上,輕言這種技術(shù)在兩年之內(nèi)必然會(huì)沒(méi)落是不嚴(yán)肅的。單靠微軟等幾個(gè)大公司想要扭轉(zhuǎn)這種長(zhǎng)期以來(lái)自然形成的狀況,談何容易?我認(rèn)為不大可能。
所以在我看來(lái),這種研發(fā)技術(shù)仍然會(huì)不斷地發(fā)展和進(jìn)步,自然地演化到一些新的Web標(biāo)準(zhǔn)(例如XHTML 2.0、CSS 3.0、JavaScript 2.0)。他的生命力會(huì)歷久彌新,我敢和所有人打這個(gè)賭,至少到2010年,這種技術(shù)仍然將會(huì)是Web研發(fā)技術(shù)的主流。當(dāng)然到了那個(gè)時(shí)候,XAML也可能會(huì)發(fā)展為Web研發(fā)技術(shù)的主流,因此會(huì)出現(xiàn)一種百花齊放的狀況。這并不是一場(chǎng)零和的游戲,只會(huì)出現(xiàn)一個(gè)贏家,其他人都會(huì)輸,贏家通吃的情況我認(rèn)為并不會(huì)出現(xiàn)。
第四個(gè)問(wèn)題是:是否深入學(xué)習(xí)Ajax就無(wú)法得到“這一代Web技術(shù)和體系的理解”?
孟巖老師說(shuō):“我們今天所說(shuō)的Web研發(fā)高手,有多少是把自己的身家性命押寶在對(duì)這一代Web技術(shù)和體系的理解上?”
這句話有非常大的誤導(dǎo)性,似乎深入學(xué)習(xí)Ajax就無(wú)法得到“這一代Web技術(shù)和體系的理解”。至少根據(jù)我的個(gè)人經(jīng)驗(yàn),深入學(xué)習(xí)Ajax能幫助我們更好的獲得“這一代Web技術(shù)和體系的理解”。我今年組織翻譯了《Ajax in Action》、《Ajax Practices and Best Practices》,還將要從臺(tái)灣引進(jìn)《Ajax Design Patterns》。這幾本書使得我對(duì)于國(guó)外的Web研發(fā)高手的水平嘆服不已,并且非常大地加深了我對(duì)于“這一代Web技術(shù)和體系的理解”。
孟巖老師還說(shuō):“且不說(shuō)他們?nèi)粘9ぷ髦写蠖鄶?shù)時(shí)間花在了界面研發(fā)之上,就算是非常多人引以為傲的所謂“大負(fù)載量Web站點(diǎn)架構(gòu)”,也將隨著 RIA的興起而發(fā)生一場(chǎng)巨大變革。大量頁(yè)面狀態(tài)將前移到客戶端,Web服務(wù)端將以全新的觀點(diǎn)重新組織資源,逐漸變成真正意義上的Web Services集合。舊的知識(shí)和經(jīng)驗(yàn)迅速貶值,新的機(jī)會(huì)快速涌現(xiàn),有的人沉下去,有的人飄起來(lái),歷史又要重來(lái)一遍了”
我能肯定孟巖老師并沒(méi)有深入研究過(guò)Ajax應(yīng)用的架構(gòu),因此才會(huì)誤以為“大量頁(yè)面狀態(tài)將前移到客戶端,Web服務(wù)端將以全新的觀點(diǎn)重新組織資源,逐漸變成真正意義上的Web Services集合。”和Ajax是完全矛盾的。和孟巖老師這種大開大合的革命性預(yù)測(cè)不同,我認(rèn)為技術(shù)從來(lái)都不是以這種方式進(jìn)步的。技術(shù)進(jìn)步是個(gè)自然的緩慢演化過(guò)程,面向?qū)ο笾饾u取代面向過(guò)程、Java逐漸取代C++、Ruby逐漸取代Java,都有非常大的傳承關(guān)系在里面。將某種技術(shù)描述為橫空出世的“天生石猴孫悟空”,我認(rèn)為是不嚴(yán)肅的,也是沒(méi)有做深入研究的體現(xiàn)。我并不認(rèn)為以前在傳統(tǒng)Web研發(fā)技術(shù)方面所積累的知識(shí)就會(huì)非常快貶值。只要自己和時(shí)俱進(jìn),不斷補(bǔ)充新的營(yíng)養(yǎng),“大負(fù)載Web站點(diǎn)架構(gòu)”的經(jīng)驗(yàn)永遠(yuǎn)都是非常寶貴的實(shí)踐經(jīng)驗(yàn)。Ajax技術(shù),正是目前絕大多數(shù)傳統(tǒng)的Web研發(fā)團(tuán)隊(duì)向RIA時(shí)代遷移的最自然的選擇路徑。
第五個(gè)問(wèn)題是:程式員做界面研發(fā)是否是不可能的?這是否就是Web應(yīng)用研發(fā)效率的瓶頸所在?
孟巖老師說(shuō):“因?yàn)榻裉霿eb研發(fā)中,設(shè)計(jì)人員基本只是解決頁(yè)面布局和圖片效果的設(shè)計(jì),而大量動(dòng)態(tài)界面效果還需要研發(fā)者來(lái)完成。 Expression + Visual Studio的模型則將“和用戶交互的界面部分”和“后臺(tái)業(yè)務(wù)邏輯”完全分開。設(shè)計(jì)人員憑借類似Flash的方式,就能研發(fā)出類似視頻游戲那樣的用戶界面。”
我是做Java研發(fā)的,如果我作為技術(shù)負(fù)責(zé)人,我的團(tuán)隊(duì)中將會(huì)有這些分工:
1 業(yè)務(wù)邏輯研發(fā)人員,使用Java和Spring等框架做研發(fā)。
2 界面邏輯研發(fā)人員,負(fù)責(zé)View的研發(fā),精通FreeMarker、XHTML、CSS、JavaScript等技術(shù)。
3 美工,負(fù)責(zé)制作圖片,對(duì)于頁(yè)面的樣式和配色提供指導(dǎo),用Photoshop設(shè)計(jì)出頁(yè)面樣式,交給界面邏輯研發(fā)人員來(lái)制作。
由界面邏輯研發(fā)人員來(lái)制作頁(yè)面,制作的頁(yè)面必須達(dá)到我的需求。例如,完全基于CSS的布局,在各種主流瀏覽器上都要正常顯示等等。在我這里,業(yè)務(wù)邏輯研發(fā)人員和界面邏輯研發(fā)人員并不存在誰(shuí)高誰(shuí)低之分,薪水也是基本相同的水平。孟巖認(rèn)為在基于Web標(biāo)準(zhǔn)的研發(fā)過(guò)程中,程式員不應(yīng)該做頁(yè)面,這個(gè)看法是錯(cuò)誤的。程式員是否做頁(yè)面也并不是研發(fā)效率的瓶頸。如果某個(gè)程式員精通了上述這些技術(shù),他完萬(wàn)能迅速研發(fā)出美觀的頁(yè)面。特別是在注重頁(yè)面中XHTML/CSS/JavaScript各部分的重用的情況下,積累上一年之后,要研發(fā)的非常多東西都是相似的。孟巖老師認(rèn)為完全的分工能達(dá)到最大的研發(fā)效率,這是一種幻想。為什么Web研發(fā)從J2EE非常清晰的分層又變成了在RoR中不是非常清晰的分層?軟件研發(fā)并不是流水線式生產(chǎn)。分工應(yīng)該適當(dāng),分工太細(xì),不同層次之間溝通的成本就會(huì)迅速上升。這又回到了《人月神話》中的命題:主要的成本在于溝通的成本。依靠細(xì)致的分工降低對(duì)研發(fā)人員素質(zhì)的需求,實(shí)現(xiàn)流水線式生產(chǎn),創(chuàng)造大批軟件藍(lán)領(lǐng),這本身就是個(gè)幻想。Ruby解決問(wèn)題的思路和此是不同的,Ruby的思路是提高抽象的層次,使得一個(gè)研發(fā)人員有能力承擔(dān)更多功能的研發(fā)。
|
新聞熱點(diǎn)
疑難解答
圖片精選