對(duì)Ruby VS Java誤區(qū)的深度剖析
Relevance咨詢公司的Stuart Halloway最近編寫(xiě)了一個(gè)關(guān)于“Ruby vs. Java之怪談”的系列博客文章。這個(gè)系列文章的靈感,源自他最近從一個(gè)從零起步、沒(méi)有先前約束的Ruby項(xiàng)目轉(zhuǎn)回一個(gè)成熟完備的Java項(xiàng)目后的心得體會(huì)。在這個(gè)歷時(shí)多日的項(xiàng)目過(guò)程中,Halloway對(duì)以下幾個(gè)“誤區(qū)”進(jìn)行了探索:
誤區(qū)之一:Ruby適合小型項(xiàng)目,而Java更適用于大型的、復(fù)雜的項(xiàng)目。
概括起來(lái),Halloway主張,對(duì)于小型項(xiàng)目來(lái)說(shuō),諸如未知因素一類的問(wèn)題可能會(huì)使進(jìn)度表大幅度改動(dòng),而如果找到一個(gè)成熟完善的代碼庫(kù)則可以使得開(kāi)發(fā)人員幾乎不用編寫(xiě)多少代碼。在 Java方面,這些因素是很大的一個(gè)優(yōu)勢(shì),因?yàn)樗澈笥幸粋€(gè)成熟強(qiáng)大的社區(qū)和一群非常有經(jīng)驗(yàn)的開(kāi)發(fā)人員所支持。對(duì)于大型項(xiàng)目,Halloway則稱,諸如語(yǔ)言的生產(chǎn)效率之類的因素會(huì)比代碼庫(kù)更為緊要,這也把天平上優(yōu)勢(shì)的砝碼放在了Ruby一端。他指出,目前事實(shí)已經(jīng)發(fā)生逆轉(zhuǎn),并解釋說(shuō):
| 以下是引用片段: 當(dāng)前Ruby異常適合的一種小型項(xiàng)目是:由數(shù)據(jù)庫(kù)所支撐的Web應(yīng)用,因?yàn)镽uby on Rails抵消掉了所有Ruby在小型項(xiàng)目方面的不利因素。 |
誤區(qū)之二:Ruby的某某特性使得代碼難以維護(hù)
針對(duì)這個(gè)認(rèn)識(shí)誤區(qū),Halloway的結(jié)論是:如果使用得當(dāng),Ruby的語(yǔ)言特性會(huì)使用其編寫(xiě)的代碼更加易于維護(hù)。對(duì)于“易于維護(hù)的代碼”的概念,他給出以下定義:
1. 理解應(yīng)用程序或者模塊的總體設(shè)計(jì)思路
2. 找到你所需要的代碼
3. 閱讀代碼
4. 對(duì)代碼進(jìn)行變更
5. 檢查變更是否正常運(yùn)行
下面是兩種語(yǔ)言的優(yōu)勢(shì)對(duì)比:
理解應(yīng)用程序或者模塊的總體設(shè)計(jì)思路:無(wú)一勝出
| 以下是引用片段: [...]我的經(jīng)驗(yàn)表明,在這個(gè)方面沒(méi)有哪個(gè)語(yǔ)言能幫上很多忙,但良好的抽象概念會(huì)有所幫助。Java和Ruby包含很多相同的抽象概念:實(shí)現(xiàn)繼承、類、多態(tài)和封裝等等。 |
查看你所需要的代碼:Java勝出
由于IDE的有效支持,Java在這個(gè)方面勝出。
閱讀代碼:Ruby勝出
結(jié)論:Ruby代碼更容易保持DRY原則,因此更容易閱讀。
對(duì)代碼進(jìn)行變更:Ruby勝出
結(jié)論:在動(dòng)態(tài)語(yǔ)言中進(jìn)行代碼變更更為容易。
檢查變更是否正常運(yùn)行:不相伯仲
Ruby和Java都提供了對(duì)單元測(cè)試、驗(yàn)收測(cè)試和持續(xù)集成等方面的良好支持。
誤區(qū)之三:Ruby太難了
有些人,比如Cedric Beust主張說(shuō),對(duì)于普通開(kāi)發(fā)人員Ruby的難度太大。Halloway反駁到,總的來(lái)說(shuō),編程就不是一件容易的事情。盡管有些叢書(shū)以“21天學(xué)會(huì)編程”的旗號(hào)為噱頭,但這是不可能的。因此,使用Java和Ruby編程都不是一件容易的事情。他主張說(shuō):
| 以下是引用片段: [...]你不能通過(guò)限制語(yǔ)言的特性這種方式來(lái)降低難度[...] |
誤區(qū)之四:要抄襲Rails的創(chuàng)意很容易
Halloway提出,這個(gè)誤區(qū)需要慎重看待,因?yàn)樗f(shuō)的確實(shí)有一部分是真的。Rails的許多創(chuàng)意是可以被抄襲到其它任何語(yǔ)言上去的。但是,對(duì)于這個(gè)觀點(diǎn)的反駁也存在:
| 以下是引用片段: [...]另外一些創(chuàng)意則取決于特定的Ruby語(yǔ)言特性。Rails使用了open class,使得我們可以寫(xiě)出更好的、可讀性更強(qiáng)的對(duì)象模型。舉例而言,你可以寫(xiě)出x.blank?這樣的代碼,而不是這樣:StringUtilities.isBlank(x)。單獨(dú)來(lái)說(shuō),這樣的區(qū)別并不會(huì)產(chǎn)生很大的意義,但是隨著它們積少成多了以后,代碼的可讀性就會(huì)得到顯著的提升。[...] |
誤區(qū)之五:這是一場(chǎng)沒(méi)有贏家的游戲
最后是系列文章的總結(jié)陳詞:作為一門語(yǔ)言,Ruby勝出;但作為一個(gè)平臺(tái),Java勝出——
| 以下是引用片段: 那么,我們所有人難道不能和睦相處么?我多希望在我所生活的世界中,對(duì)語(yǔ)言的偏好并不會(huì)給一名程序員貼上什么標(biāo)簽。我們可以用Ruby、Scheme、Scala或者Erlang來(lái)編寫(xiě)代碼,而且任何地方的JVM都是我們所可以生存的和諧社會(huì)。 |
為了讓這樣的和諧氛圍得以延續(xù),Halloway對(duì)應(yīng)當(dāng)采取的行動(dòng)給出了以下建議:為JRuby項(xiàng)目貢獻(xiàn)代碼,并在今后的Java應(yīng)用中使用Rake而不是Ant來(lái)管理。
【編輯推薦】






















