作者 Werner Schuster譯者 鄭柯 發(fā)布于 2007年10月10日 上午1時42分
最近有一篇關(guān)于基于Rails的失敗項目的博客文章,引發(fā)了一場激烈的辯論。可以預(yù)測,將賭注押在與Rails相競爭的技術(shù)上,將此作為Rails即將消逝的標(biāo)志——特別是當(dāng)這篇文章詳細說明考慮重新使用php技術(shù)之后。不過,有些人仔細分析了文章中所說的內(nèi)容。Austin Ziegler指出其實是一些非技術(shù)方面的問題導(dǎo)致了項目的失敗:他沒有意識到現(xiàn)有的專家并不了解這門新技術(shù)。他和他的雇員們沒有對Ruby有清醒的認識,也許出于這個原因,他們不能深入掌握如何使用Ruby。這種情形下,并不是專家來判斷某項技術(shù)是否合適,而是由管理層來考慮這項技術(shù)能否合用(很抱歉Derek,也許你現(xiàn)在還在親自寫代碼,但你更應(yīng)該適應(yīng)管理者的角色)。
上面的話指出了這樣的事實:該公司的軟件都是基于PHP的,所有的開發(fā)人員都從事PHP開發(fā)。一個完全仰仗PHP開發(fā)的軟件公司,使用Ruby on Rails重寫軟件,產(chǎn)生問題是必然的。更特別要指出的是,原博客文章中明確寫道,公司只有一個全職Rails開發(fā)人員,此外再加上博客文章的作者;而且作者明確表明他更喜歡使用PHP工作,并且公司的其他開發(fā)人員以及公司的軟件都是基于PHP的。
Austin指出的另外一個問題是:這個項目是針對現(xiàn)有軟件進行重新開發(fā)。
Derek執(zhí)行這個項目的方式,是希望自下而上、整體上全部重新開發(fā),并且一次部署完成,而不是考慮將其劃分為幾個階段來進行。實際上在絕大多數(shù)情況下,每次只在系統(tǒng)中尋找一個切入點,替換掉出現(xiàn)問題的部分,這樣做總是可行的。(譯者注:此處表明的意思是,像Derek那樣希望一步到位的做法,成功的幾率很低。)到最后,這也會是Rails專家將會告訴你的:一次只替換一個模塊,每次都使用不同的代碼庫。以REST-ful服務(wù)的方式置入新的部分。不要讓所有的系統(tǒng)代碼都構(gòu)建在單一的數(shù)據(jù)庫架構(gòu)(database schema)之上。
很多人都已經(jīng)表達過類似的看法。David Heinemeier Hansson點明Chad Fowler的系列文章“The Big Rewrite”中也說明了重新開發(fā)項目的細節(jié)問題。
在這次爭論中,宣傳周期(hype cycle)的問題也被大家提了出來。宣傳周期描述的是產(chǎn)品或技術(shù)在市場中引起轟動的過程。Rails的迅速興起表明,宣傳是它如此快就獲得現(xiàn)在這樣的普及和知名度的一個重要因素。其他許多技術(shù)也經(jīng)歷了類似的途徑,比如Java、XML以及AJAX技術(shù)。
在宣傳周期中,某項技術(shù)在引起人們熱切期待之后,隨之而來的就是“幻覺破滅期(Trough of Disillusionment)”。此時對技術(shù)的實際應(yīng)用,會發(fā)現(xiàn)一些問題,并抹去這門技術(shù)上的神秘面紗。它也會跟在“期望膨脹期(Peak of Inflated Expectations)”之后出現(xiàn),在“期望膨脹期”中,一些使用者可能會將這門技術(shù)視為銀彈,能夠解決所有的問題。抱有過高的期望也許能夠解釋為什么一個僅使用PHP的工作室會考慮用Rails重新開發(fā)他們的軟件。
雖然有些人認為這樣的文章對Ruby會產(chǎn)生不良影響,歷史卻告訴我們其他的技術(shù)也經(jīng)歷過類似的發(fā)展階段。Java即是一例。在上世紀(jì)90年代后期,一些諸如Corel Office for Java這樣的大型公開項目的失敗,或是Netscape的Javagator項目(Netscape Navigator的Java重寫版本)的終止,使得Java技術(shù)也走過了這樣的發(fā)展時期。
有人將此次爭論視為Ruby的反彈,雖然這看起來有些遲。今年早些時候,一個規(guī)模更大的、更加公開的基于Ruby的項目,似乎將以失敗而告終。Twitter,一個搭建于Ruby之上信息發(fā)布系統(tǒng),曾遇到嚴重的性能問題。有評論指出可能是Ruby解釋器的性能導(dǎo)致了問題的發(fā)生,這也掀起了波瀾,并引起對Ruby的關(guān)注。
現(xiàn)在,6個月之后,事情看起來有些不一樣了。譬如:Twitter仍然處于在線運營當(dāng)中,并且已經(jīng)解決了性能問題,目前仍以Ruby實現(xiàn)。問題的解決方案記錄在案,并且所有的人都能通過網(wǎng)絡(luò)訪問,比如與“提升Twitter的可伸縮性”或“淺析如何擴大規(guī)模”這兩個談話相關(guān)的在線演示??傮w上看,問題實際上是由于架構(gòu)方面的不完善引起的。
看英文原文:Ruby and the hype cycle