我曾撰寫的文章《從Java到Ruby:所有管理者需要知道的事情》并非是為程序開發(fā)者所寫,而是寫給技術(shù)選用的決策者看的。在理解Ruby難點(diǎn)以及使用Rails框架方面,Ruby擁護(hù)者們?yōu)閯偲鸩降拈_發(fā)者做出了大量值得稱贊的工作,但是對(duì)于管理者和執(zhí)行人員來說,并沒有足夠的信息幫助他們?cè)诒姸嗉夹g(shù)之間做出選擇。在這個(gè)系列的上一篇文章中,我們探討了在Java在線商店中建立向?qū)ы?xiàng)目的策略。在這篇文章中,我們將要探討Java與Ruby語言遷移時(shí)風(fēng)險(xiǎn)預(yù)測(cè)方面的問題。
通常來說,“使用Ruby具有風(fēng)險(xiǎn)”是一種普遍的看法,這存在一定的原因。因?yàn)槭褂眯碌恼Z言天生是有風(fēng)險(xiǎn)的。隨著Ruby on Rails逐步進(jìn)入到主流的開發(fā)領(lǐng)域中,這樣的風(fēng)險(xiǎn)將會(huì)隨時(shí)間逐漸降低,因?yàn)橛兄鸩皆鲩L(zhǎng)的開發(fā)者群、組件(或稱作gems和plug-ins)相關(guān)的書籍、以及業(yè)務(wù)合作伙伴與你溝通交流。但同時(shí)你也可以聽到主流的觀點(diǎn)指出“使用Java是安全的”。對(duì)于這種的觀點(diǎn),我持有強(qiáng)烈的反對(duì)意見。隨著語言的膨脹,這樣的風(fēng)險(xiǎn)通常也會(huì)增長(zhǎng)。為了便于理解在目前在這些觀點(diǎn)上正發(fā)生什么變化,投入點(diǎn)精力去研究Java最初的應(yīng)用情況是值得的。
新技術(shù)采用概況
許多分析家擁有技術(shù)應(yīng)用所需的描述模型。其中最為流行的模型是定義在Ruby的Web開發(fā)框架Iowa中,用來描述農(nóng)產(chǎn)品的應(yīng)用,稍后在一本由Geoffrey A. Moore寫作的名為《跨越鴻溝》(Crossing the Chasm)的書中,被用來描述技術(shù)內(nèi)容。在書中,Moore分析了技術(shù)應(yīng)用周期中存在著的五個(gè)截然不同的群體:
- 技術(shù)專家。這個(gè)群體傾向于采用新的技術(shù)。任何一種有前途的技術(shù)都會(huì)引起這個(gè)群體的注意。
- 先行采納者。不管這項(xiàng)技術(shù)是否在主流技術(shù)中取得成功,這個(gè)群體都將會(huì)采用新的技術(shù)來提升競(jìng)爭(zhēng)優(yōu)勢(shì)。
- 實(shí)用主義者。一旦新的技術(shù)進(jìn)入主流應(yīng)用,或是有足夠陡峭的增長(zhǎng)曲線來保證技術(shù)將得到廣泛采用,那么實(shí)用主義者就會(huì)積極采用新的技術(shù)。
- 保守派。只有新技術(shù)成為必須的時(shí)候,他們才會(huì)考慮采用新的技術(shù)。
- 懷疑論者。這個(gè)群體可能很晚才會(huì)采用新的技術(shù),或者也可能永遠(yuǎn)只使用某一特定技術(shù)。
Moore指出,技術(shù)應(yīng)用的關(guān)鍵之處在于團(tuán)隊(duì)中是否存在實(shí)用主義者。因?yàn)閷?shí)用主義者需要新技術(shù)大規(guī)模的應(yīng)用,這個(gè)中間群體希望看到其他務(wù)實(shí)派在團(tuán)隊(duì)做出承諾之前就使用新的技術(shù)。這是一個(gè)類似于《第二十二條軍規(guī)》書中所描述的現(xiàn)象,因?yàn)閯?wù)實(shí)派們都會(huì)相互依賴的存在。出于這樣的原因,在先行采納者排列在技術(shù)專家之后和務(wù)實(shí)派之前,你會(huì)經(jīng)常在市場(chǎng)接受度曲線中看到一種下降的趨勢(shì)。Moore將這種下降稱之為鴻溝傾向,并且這種想法應(yīng)出于圍繞任何新技術(shù)的風(fēng)險(xiǎn)討論的中心。
Moore解決方法是,把重點(diǎn)放在跨越鴻溝的過程中。通常來說,你很難通過一個(gè)巨大的飛躍跨過鴻溝。你需要有一個(gè)目標(biāo)明確的細(xì)分市場(chǎng)。Java技術(shù)首先通過Applet程序進(jìn)入網(wǎng)絡(luò)客戶端,之后轉(zhuǎn)向服務(wù)端的計(jì)算、移動(dòng)終端、以及其他類似于移動(dòng)計(jì)算以及企業(yè)架構(gòu)的應(yīng)用,最終為網(wǎng)絡(luò)帶來強(qiáng)大沖擊。
在《超越Java》一書中,我認(rèn)為存在于程序設(shè)計(jì)語言之間的鴻溝特別嚴(yán)重。我們大多數(shù)人都認(rèn)識(shí)到在Lisp語言上投入精力將大幅提高生產(chǎn)率,但是同時(shí)也會(huì)導(dǎo)致更難找到合適的程序開發(fā)人員、教學(xué)資源、類庫以及組件等。同時(shí)我們還將不得不付出更多的花費(fèi)來進(jìn)行一些必要的整合工作。出于這個(gè)原因,大眾市場(chǎng)只會(huì)以大約每十年的時(shí)間周期更換主流的編程語言。在服務(wù)端編程語言方面,可以清晰看到這種趨勢(shì)的存在。COBOL和Fortran語言出現(xiàn)于1954年到1961年之間。C語言則誕生在上世紀(jì)70年代初期,C++是出現(xiàn)在上世紀(jì)80年代中期,Java語言則出現(xiàn)在1996年。我應(yīng)當(dāng)把C#語言算做整合高效的Java語言克隆版本,雖然這樣的說法可能會(huì)引發(fā)一些爭(zhēng)辯。許多其他的語言在此階段中誕生,但是上述語言仍舊沒有一個(gè)能夠占據(jù)統(tǒng)治地位。伴隨的風(fēng)險(xiǎn)是阻礙新編程語言被廣泛采用的最重要原因。
Java的風(fēng)險(xiǎn)概況
使用Java語言曾經(jīng)需要克服很大的風(fēng)險(xiǎn)。當(dāng)時(shí),大多數(shù)服務(wù)端的編程都在使用C++語言。C++是一門高效的操作系統(tǒng)語言,非常適用于應(yīng)用程序開發(fā)。C語言家族在這方面的表現(xiàn)相當(dāng)出色,因?yàn)榭蛻魴C(jī)/服務(wù)器端編程以及用戶界面開發(fā)需要程序性能與適應(yīng)性良好地結(jié)合在一起,在當(dāng)時(shí)其他的編程語言都無法符合這樣的要求。為了克服伴隨采用新編程語言而來的風(fēng)險(xiǎn),Java需要以下的三個(gè)條件均成立:
- C++開發(fā)者不得不經(jīng)歷一番辛苦的學(xué)習(xí)過程。指針的存在(由于缺少編譯時(shí)的安全性)導(dǎo)致各種各樣難以消除的缺陷。內(nèi)存管理使得內(nèi)存泄漏成為家常便飯。C++對(duì)于大多數(shù)程序開發(fā)者來說,顯得過于復(fù)雜。這些問題增加了針對(duì)于C++語言的風(fēng)險(xiǎn)評(píng)估。
- Java需要解決一些C++語言無法處理的工作。Java語言所具有簡(jiǎn)潔、靈活的特性以及眾多C++所不包括的類庫支持。這些要素減少了針對(duì)于Java語言的風(fēng)險(xiǎn)評(píng)估,并可以保持開發(fā)團(tuán)隊(duì)小型化最終從根本上提高生產(chǎn)力。
- Java需要一個(gè)催化劑。隨著網(wǎng)絡(luò)爆炸,Applet應(yīng)用普遍被嵌入在NetScape瀏覽器中,使得C語言開發(fā)者不得不轉(zhuǎn)向去開始使用Java語言。C++因?yàn)楹蚃ava語法的類似,可以簡(jiǎn)單地進(jìn)行過渡。Java得以迅速獲得數(shù)量龐大的用戶群,并且在同微軟的競(jìng)爭(zhēng)中逐步提升這樣的過渡。
Java的膨脹要比我們以前所見的任何一次技術(shù)浪潮都要迅速,同時(shí)也可能比我一生所見的任何技術(shù)都要龐大,然而Java的發(fā)展藍(lán)圖卻一直保持清晰。為了建立新的語言,原有的語言已不適應(yīng)開發(fā)者的需求,新的語言必須要克服原有語言的缺陷,并最終以某些催化效應(yīng)迅速聚集起數(shù)量龐大的用戶群。
Java作為Internet應(yīng)用語言在客戶端迅速得到立足。借助于靈巧的Applet應(yīng)用程序,由于Java提供了對(duì)于應(yīng)用開發(fā)者極有幫助的特性,使得Java快速轉(zhuǎn)移到服務(wù)器端開發(fā),這些特性包含有:
- 內(nèi)存管理
- 干凈的繼承模型
- 更好的面向?qū)ο蠊δ?
- 便攜性
- Internet類庫
- 安全
……以及其他許多特性。在我看來,Java一直以來都是最為成功的編程語言。隨著Java不斷的改進(jìn),使用Java語言變得越來越安全,并最終在Internet應(yīng)用中統(tǒng)領(lǐng)著服務(wù)端開發(fā)的市場(chǎng)。商業(yè)投資,開發(fā)者社區(qū),各種教育培訓(xùn),開放源代碼的框架,以及各種各樣的信息發(fā)布都使得使用Java開發(fā)的風(fēng)險(xiǎn)降低。上述幾點(diǎn)清晰地解釋了Java取得成功的原因。
一旦新的程序開發(fā)語言跨越鴻溝,開發(fā)語言相關(guān)的風(fēng)險(xiǎn)則會(huì)隨著市場(chǎng)占有率的提升顯著減少。
Java則擁有一個(gè)令人贊嘆的成功過程。但是程序設(shè)計(jì)語言沒有仍舊停留在不確定的技術(shù)發(fā)展水平之上。所有成功語言都會(huì)產(chǎn)生技術(shù)膨脹,因?yàn)樗鼈儽仨毴ミm應(yīng)使用者不斷變化的需求。成功的編程語言無法像其他的語言一樣快速的適應(yīng)變化,他們必須保持一定程度上的向后兼容,來滿足逐步增長(zhǎng)的用戶基本需求。隨著技術(shù)滯后與語言膨脹的產(chǎn)生,另一種形式的風(fēng)險(xiǎn)預(yù)測(cè)逐步形成。為了新的風(fēng)險(xiǎn)預(yù)測(cè),由于風(fēng)險(xiǎn)與程序開發(fā)者高效完成工作的能力相關(guān),使得風(fēng)險(xiǎn)與市場(chǎng)占有率的降低有必然的聯(lián)系。
到目前為止,我已經(jīng)開始關(guān)注于新生技術(shù)的市場(chǎng)風(fēng)險(xiǎn)。在Java誕生十周年之際,另一種形式的風(fēng)險(xiǎn)評(píng)估成為必須。就像《人月神話》、《死亡之旅》和《人件》等許多有影響力的書籍中鼓吹的那些風(fēng)險(xiǎn)一樣:
- 低下的生產(chǎn)力將導(dǎo)致更龐大的團(tuán)隊(duì)規(guī)模和更長(zhǎng)的時(shí)間周期
- 風(fēng)險(xiǎn)隨著項(xiàng)目的規(guī)模而增加
- 風(fēng)險(xiǎn)隨著團(tuán)隊(duì)規(guī)模的擴(kuò)張而增加
- 質(zhì)量風(fēng)險(xiǎn),以Bug的數(shù)量來衡量,隨著代碼行數(shù)的增加而增長(zhǎng)
- 成本的增長(zhǎng)導(dǎo)致風(fēng)險(xiǎn)的增加
- 綜合成本隨著復(fù)雜性的提高而增加
隨著程序設(shè)計(jì)語言或者編程范例的使用有了積累,相對(duì)于技術(shù)發(fā)展水平,語言將會(huì)與生產(chǎn)力相關(guān)聯(lián)。項(xiàng)目團(tuán)隊(duì)需要增加規(guī)模,開發(fā)者需要編寫更多的代碼來解決相同的問題。所有這些因素本身就會(huì)增加風(fēng)險(xiǎn)。所有的因素將會(huì)導(dǎo)致必然的結(jié)論。
由于市場(chǎng)主宰地位的終止,相對(duì)于技術(shù)發(fā)展水平來說,生產(chǎn)力風(fēng)險(xiǎn)與開發(fā)語言相關(guān)性將會(huì)增加。
在Java語言的范疇中,這些情況是否以及如何發(fā)生是一個(gè)將會(huì)引起激烈爭(zhēng)論的話題。當(dāng)然,Java仍然是解決整個(gè)一系列企業(yè)問題的最佳語言,比方說非常大型的項(xiàng)目,或是比如雙相提交或核心對(duì)象關(guān)系映射等具備特定需求的問題。針對(duì)于Java的商業(yè)投資從來沒有這么強(qiáng)過,并且Java社區(qū)一直是保持持續(xù)高漲。但是根基中的缺陷逐漸開始顯現(xiàn)出來。
Java的企業(yè)級(jí)JavaBean框架,WS-*風(fēng)格的網(wǎng)絡(luò)服務(wù),以及JavaEE的復(fù)雜性和寬松度已受到越來越多的批評(píng)。James Duncan Davidson,servlet的創(chuàng)始人之一,曾表示Java不再像從前那樣方便易用。目前很難給一個(gè)普通的Java開發(fā)者,講明白如何解決最一般的編程問題:比如有后臺(tái)數(shù)據(jù)庫支撐的網(wǎng)絡(luò)應(yīng)用。出現(xiàn)的相關(guān)證據(jù)是,已經(jīng)出現(xiàn)了很多使用其他語言的開發(fā)框架,最為出名的就是Ruby on Rails,在處理小規(guī)模問題時(shí)具備極高的生產(chǎn)力。資深Java開發(fā)者James Duncan Davidson,Mike Clark,Justin Gehtland,Stuart Halloway以及其他許多開發(fā)者都證明,在關(guān)鍵的小型項(xiàng)目中使用了Rails之后,獲得了非常高的生產(chǎn)效率:具備后臺(tái)數(shù)據(jù)庫支撐的綠色網(wǎng)絡(luò)應(yīng)用。當(dāng)然,我的個(gè)人經(jīng)驗(yàn)也是可以輕松地使用Ruby on Rails構(gòu)造、部署并維護(hù)這樣的應(yīng)用。
這些報(bào)告將會(huì)引起廣泛的爭(zhēng)論,就像是早期關(guān)于Java生產(chǎn)力的那些報(bào)告一樣。還記得,在Java開發(fā)廣泛普及之前,Java首次出現(xiàn)在各式的小型應(yīng)用中。開發(fā)人員的生產(chǎn)力是驅(qū)動(dòng)Java早先增長(zhǎng)期的重要標(biāo)準(zhǔn)。請(qǐng)謹(jǐn)記Moore關(guān)于新技術(shù)出現(xiàn)的理論。跨越鴻溝最好的方式不是通過一次大的跳躍,而是每次只前進(jìn)一個(gè)小的階段。
我堅(jiān)信復(fù)雜性和松散的開發(fā)效率是使得Java目前正在經(jīng)歷風(fēng)險(xiǎn)的原因。
Ruby與生俱來的風(fēng)險(xiǎn)
比起其他新生的開發(fā)語言來,Ruby并沒有什么特別之處。缺少商業(yè)投資,有限的開發(fā)資源,還缺少開發(fā)經(jīng)驗(yàn),這都為新生的程序設(shè)計(jì)語言帶來了風(fēng)險(xiǎn)。下面是一些我遭遇到的較大的風(fēng)險(xiǎn)。
- 人才的缺乏。很難找到熟練的Ruby開發(fā)人員。根據(jù)Java的發(fā)展情況來看,這樣的現(xiàn)狀將會(huì)很快有所改觀,但是就目前來說,如果你計(jì)劃在很短的時(shí)間內(nèi)組織一個(gè)人數(shù)較多的Ruby開發(fā)團(tuán)隊(duì),其困難程度遠(yuǎn)比組建相同的Java團(tuán)隊(duì)要大得多。
- 缺少經(jīng)驗(yàn)。許多LAMP相關(guān)的語言已經(jīng)建立了記錄跟蹤機(jī)制。Google使用Python;許多主流的.COM公司使用Perl或C語言。目前仍沒有使用Ruby打造的旗艦級(jí)應(yīng)用,來展示Ruby語言強(qiáng)健的可拓展性,或是復(fù)雜的企業(yè)級(jí)集成。我們只是不知道Ruby是否可以解決某些特定類型的問題。
- 部署和配置策略。Ruby on Rails已經(jīng)出現(xiàn)將近一年的時(shí)間,所以在部署和配置方面的經(jīng)驗(yàn)還不如競(jìng)爭(zhēng)語言那樣豐富。
- 缺少類庫支持。Ruby遠(yuǎn)不如Java語言擁有這么多豐富的類庫支持。
- 缺少商業(yè)投資。你需要花費(fèi)很大的力氣才能找到Ruby的咨詢、培訓(xùn)或承包的機(jī)會(huì),并且這些大多數(shù)還并不存在。
還有其他許多類似的風(fēng)險(xiǎn)。然而,你可以有效地降低使用Ruby語言的風(fēng)險(xiǎn),比如采取績(jī)效掛鉤的風(fēng)險(xiǎn)預(yù)測(cè)。雖然開發(fā)和部署大型Ruby應(yīng)用的相關(guān)知識(shí)積累仍然十分有限,但是你可以在適當(dāng)?shù)闹埸c(diǎn)不斷學(xué)習(xí)新的知識(shí)。對(duì)于PHP、Perl和Python等LAMP相關(guān)語言,業(yè)界有著非常豐富的知識(shí)積累。在應(yīng)用部署機(jī)制、Web服務(wù)器以及非共享可拓展策略等方面都是一致的。
在考慮參與開發(fā)的人手時(shí),不要低估你通過對(duì)員工進(jìn)行內(nèi)部培訓(xùn)來建立高效團(tuán)隊(duì)的能力。對(duì)于使用Spring、Eclipse、Hibernate和WebWork進(jìn)行Java開發(fā)的新手,我的訓(xùn)練計(jì)劃常常是為Ruby on Rails開發(fā)者指定培訓(xùn)計(jì)劃的五倍。如果你開始使用具有類似于Ruby特性的開發(fā)語言,比方說Perl,Python或Smalltalk,它們可以幫助你很好地起步。如果你打算從零開始培養(yǎng)一個(gè)程序員的話,培養(yǎng)一個(gè)使用Ruby的開發(fā)者,遠(yuǎn)比培訓(xùn)Java開發(fā)者使用最新的一大堆各種框架要合算的多。
想一想那些眾多的函數(shù)類庫,有多少是你真正需要的?如果你需要分布式處理,雙相提交,那么就使用Java編程。如果您需要與Microsoft Office的宏完美地整合,那么就使用.NET。但如果你想編寫操作系統(tǒng)整合腳本,或編寫基于數(shù)據(jù)庫的綠色Web應(yīng)用,那么Ruby則正是你所需要的。并且你可以經(jīng)常編寫要用到但手邊沒有的任何程序。我曾協(xié)助一家公司工作,他們?cè)趦蓚€(gè)星期內(nèi)編寫了自己的數(shù)據(jù)庫驅(qū)動(dòng)程序,但仍然比完成項(xiàng)目其他工作所用的時(shí)間要多。我還認(rèn)識(shí)一個(gè)使用Ruby在四小時(shí)內(nèi)修補(bǔ)現(xiàn)有代碼,為程序拓展Oracle支持的開發(fā)者。Thoughtworks在很短的開發(fā)周期內(nèi)就發(fā)布了RBatis,即Ruby版本的實(shí)體關(guān)系映射工具iBATIS。
所以當(dāng)你站在全局考慮時(shí),會(huì)感覺到使用Ruby的風(fēng)險(xiǎn)往往被夸大了,尤其是在Java并沒有帶給你一切所需資源的時(shí)候。自己真正去嘗試使用Ruby語言,是把這些風(fēng)險(xiǎn)納入控制范圍之內(nèi)的最好方法。使用Rails開發(fā)一些實(shí)際的應(yīng)用,并站在實(shí)踐的角度上發(fā)言。而不要盲目迷信別人的說法。
神話 vs 事實(shí)
Rails是銀彈。
人們?cè)?jīng)在Rails項(xiàng)目上失敗過,并且還將會(huì)有更多失敗的教訓(xùn)。如果你在沒有具備必須技能的情況下使用它,你也將可能面臨失敗的命運(yùn)。
與之類似的說明是,如果Java語言不是導(dǎo)致失敗的問題根源,那么Ruby將同樣不會(huì)是你的答案。大多數(shù)軟件開發(fā)問題的出現(xiàn)是與特定技術(shù)無關(guān)的。如果你正在遭受打擊,Ruby on Rails的采用只能加快你遭受打擊的速度。
選擇Ruby頗具風(fēng)險(xiǎn),因?yàn)槟銦o法預(yù)測(cè)到錯(cuò)誤。
采用任何新的語言,最主要的風(fēng)險(xiǎn)是你將預(yù)測(cè)到錯(cuò)誤,并且錯(cuò)誤停滯在使用的類庫之中。這的確是一項(xiàng)相當(dāng)重大的風(fēng)險(xiǎn),但是這個(gè)問題決不僅局限于Ruby語言之中。在Java語言里,你需要就主要類庫的使用做出決定,其中任何一個(gè)都可能帶給你復(fù)雜臃腫的代碼。你是否會(huì)為聲明事物選擇Spring或EJB 3等技術(shù)?Java的持久層架構(gòu)是不是一個(gè)正確的選擇,或者Hibernate就是最終的解決方案?關(guān)于Web MVC分層的正確選擇是什么,是逐步衰落的Struts框架,還是其他更易用的框架?
在Ruby語言之中,選擇Web開發(fā)框架則相對(duì)簡(jiǎn)單許多。你將很可能與Rails一起工作。語言動(dòng)態(tài)的特性同樣各層之間的結(jié)構(gòu)更為簡(jiǎn)化,通過特定的約定來使得開發(fā)配置比Java實(shí)現(xiàn)更為明晰。
為Java項(xiàng)目招募人手總是更為容易。
Java擁有數(shù)量龐大的開發(fā)者群體,但是開發(fā)社區(qū)之間有著巨大的分歧。如果你想使用一個(gè)綜合的Java工具集,你的選擇是十分有限的。即使你選擇了像Spring這樣的流行框架,你的團(tuán)隊(duì)必須還要學(xué)會(huì)使用針對(duì)給定項(xiàng)目所需的各種類庫。在這種情況下,Java的核心力量,過多的函數(shù)類庫,將會(huì)給項(xiàng)目帶來副作用。相反,大部分的Ruby開發(fā)者都知道Rails框架。此外,你通常需要更多的Java開發(fā)者去處理類似的任務(wù)。有時(shí),招募Java的開發(fā)人員要容易得多。但有時(shí),情況也并不是這樣。
Rails無法拓展。
Ruby on Rails其實(shí)有很好的延展性。它的緩存模型非常強(qiáng)大,并且非共享的架構(gòu)在LAMP社區(qū)中多次被證明是非常有效的。實(shí)際上,我們知道Ruby on Rails完全可以適應(yīng)較大型應(yīng)用的要求。我們不知道Ruby on Rails是否可以承受大規(guī)模的應(yīng)用部署。沒有固有的架構(gòu)使我相信這是一條死胡同。對(duì)于典型的應(yīng)用,總之錯(cuò)誤的潛伏期是存在于數(shù)據(jù)庫端。
Rails的整合選項(xiàng)十分有限。
Rails對(duì)于基于ReST的Web服務(wù)有著良好的支持。Ruby同樣通過JRuby項(xiàng)目提供對(duì)于JVM的支持,以及提供對(duì)于微軟的CLR運(yùn)行時(shí)的支持。同時(shí)Ruby也提供了良好的消息傳輸支持。最后,為項(xiàng)目選擇最好的工具將會(huì)幫助你始終處于良好的狀態(tài)。優(yōu)秀的開發(fā)團(tuán)隊(duì)可以在Java和Ruby項(xiàng)目上同時(shí)獲得成功。
總結(jié):你可以承擔(dān)什么樣的角色?
如果你正在考慮使用Ruby,那么在你身邊將會(huì)有很多有用的信息。與其他同時(shí)在有效使用Java和Ruby的開發(fā)者交流。閱讀關(guān)于開發(fā)框架的資料。查找從Java到Ruby的遷移資料。如果你并不想放棄Java,只是想尋找輕量級(jí)的開發(fā)體驗(yàn),那么去了解一下那些可以為你帶來更多相關(guān)體驗(yàn)的項(xiàng)目,比如說RIFE、JMatter或Wicket項(xiàng)目。如果你認(rèn)為Ruby可能是一個(gè)好的選擇,那么要留心以下的建議:
- 為項(xiàng)目選擇合適的工具。Ruby on Rails并不是銀彈,ROR是一個(gè)針對(duì)以數(shù)據(jù)庫為后臺(tái)的高度精簡(jiǎn)的Web應(yīng)用開發(fā)環(huán)境。與新的數(shù)據(jù)庫模式配合較好,或者你可以通過變更來適應(yīng)Rails的各種固有優(yōu)點(diǎn)。
- 細(xì)心計(jì)劃開發(fā)團(tuán)隊(duì)的熱身階段。你不需要在Monster.com站點(diǎn)投放廣告并在三日之內(nèi)為項(xiàng)目招募齊全開發(fā)人員。但你可能需要考慮培訓(xùn)你部分或全部的開發(fā)者,并且招募幾個(gè)頂尖的Rails開發(fā)者,或是請(qǐng)求某些項(xiàng)目咨詢來幫助你把項(xiàng)目啟動(dòng)。
- 了解你使用傳統(tǒng)方式的結(jié)合點(diǎn)。通常,項(xiàng)目中最頭疼的部分是定義與外部系統(tǒng)的交互。你最初證明概念的工作需要與某些接觸點(diǎn)交互,至少是要明確你在何處對(duì)項(xiàng)目感覺到滿意。
如果你還是不確定,那么做一個(gè)先行者,或是遵從保守派的觀點(diǎn)。緩解風(fēng)險(xiǎn)最佳的方法總是優(yōu)秀的判斷能力。
關(guān)于作者
Bruce Tate居住在德克薩斯州的奧斯丁,是一位山地自行車和橡皮艇愛好者,同時(shí)也是兩個(gè)孩子的父親。Bruce已經(jīng)撰寫了9本編程方面的書籍,其中包含兩本Ruby的書籍以及五本Java相關(guān)的書籍。Bruce還是RapidRed公司的創(chuàng)始人,公司專注于包含Ruby和Rails在內(nèi)的輕量級(jí)開發(fā)技術(shù),并提供開發(fā)、資訊和培訓(xùn)等業(yè)務(wù)。Bruce是一位世界范圍內(nèi)廣受稱贊的優(yōu)秀演說家、程序員、培訓(xùn)師以及技術(shù)顧問。
查看英文原文:From Java to Ruby: Risk