??? Bruce Tate:一石激起千層浪

??? Bruce Tate并不是作為一個局外者寫就《超越Java》這邊書的。他的顧問公司專注于Java 持久化框架和輕量級開發方法,同時他也是這些流行的Java圖書的作者, Spring: A Developer's Notebook, Better, Faster, Lighter Java, 以及 Bitter Java.

??? 1,在《超越Java》中你花費了大量的時間在Ruby上面,看起來是它像在你說那些將超越Java競爭者中出類拔萃。你覺得是什么使Ruby比 PHP,Python這類語言優越?

??? 這些都是好語言,但是都有一些缺點。對大型應用,PHP和Perl不能連續地產生可讀的代碼。Lisp,Python和Smalltalk這些就缺少了偉大語言好像應該擁有的催化劑。Ruby是一種好語言,和催化劑(Rails)提供了引人注目得新價值(以效率的角度)以及還在飛速地增長。Ruby不一定是最好的語言,但是它將是我所見過最有可能的。Ruby不大可能在委員會那里超過Java.它很有可能首先在一個更小但是卻重要的環境中取得好成績。這個環境也就是一個有web UI大的胖關系數據庫。

??? 2,是否Rails就意味著Ruby?其他語言包括Java難道就不能實現同樣的思想?

??? 如今,Rails就是超過象Netscape之類語言的催化劑,具有Java一樣的功能,可通過網絡實現應用的傳送。但是我認為Rails很有可能僅僅是Ruby元編程框架浪潮的第一波。

??? 3,你的書中很多都基于典型的“將一個web接口連接到數據庫”場景,Ruby的成功案例看上去也僅僅是一兩個開發人員的小項目。但是你也承認了Java的重量級企業框架對一些項目的價值(即大型系統上的大型應用)。什么情況下一個項目對于RoR來說過于大的呢?如果一個RoR在那方面的特性發展緩慢呢?

??? 有Ruby和小團隊你可以做很多事情。基礎代碼幾乎都是一個人寫就的,但卻關乎整個公司的生計。在一些主要的公司開始進行認真的嘗試之前,我們不知道你可以利用ruby或者rails到什么程度。其中一個最吸引我的事情是經濟的規模,更小的規模。萬一生產力的數字是真實的呢?萬一確實可以得到5X的增長?那么你可以在一個部門內劃分工作,將工作劃分給團隊中的一個。交流將很少會成為問題。管理和疏忽也很少會成為問題了。我們都知道對于一間公司增長, tipping points意味著什么。因為增加溝通和管理的級別會產生很多的障礙, 所以一間公司增長要超過1,5,10,40,甚至100倍是很困難的。但是,在這一點上, Ruby on Rails的可擴展性是非常的好。

??? 4,你是否看到Java開發人員轉向Ruby嗎,還是Ruby將會給新一代的開發人員采用?

??? 我覺得兩者都有可能。有開發人員不能容忍學習servlets, Spring, XML, Hibernate, Struts 然后還要學習一些 UI 粘合的框架。在Rails中,他們將會完全給釋放出來。同時也有Java開發人員已經在尋找更加優勢的方法,他們發現了Ruby on Rails.接受了Rails的Java夢想家們的數目是令人驚愕的,他們有Thought Works,James Duncan Davidson,Stuart Halloway 更有 David Geary.

??? 5,難道Java本身就不能做一些事情來維持它的杰出地位?如果過于復雜和膨脹,什么可以阻止開發人員倒退到jdk 1.4?

??? Java將會繼續處于頂峰,并在企業應用上保持良好的表現,但是時間不會停滯不前。在某種意味上它終將會給替代。我們將需要一個更高級別的抽象。我認為我們最好的希望就是在JVM上做充足的投入,更好地支持動態語言, 擁抱新的事物,對于舊有的java代碼,則最好是保留保守的態度。

??? 6,我們應該期望Ruby在其他領域引起轟動?如果對于開發web應用它是如此不錯,假如Ruby有的可以使用的合適的UI框架,會不會在桌面應用也實用呢?

??? 現在說什么還為時過早。如今,盡管Ruby是有催化作用(Rails)的語言,但是它僅僅是一個候選。以后將會發生什么?我想誰也不知道。

??? James Duncan Davidson:嘗試新事務

??? 如果你使用Tomcat或者Ant(認真地說,什么Java開發人員什么使用過?)那么你就熟悉了James Duncan Davidson的工作了。在Sun,他致力把這些項目開源并且把他們捐獻給Apache基金會。并且他也編寫了Servlet API的最初兩個版本,還有處理XML的Java API.離開Sun之后,他做起了Mac OS 的X開發。編寫《Running Mac OS X Panther》和參與編寫了《Running Mac OS X Tiger》,《 Mac OS X Panther Hacks》,《 Cocoa in a Nutshell》和《Learning Cocoa with Objective-C, 2nd Edition》

??? 1,上一次我們見到你的時候,你還是那個《Mac desktop apps in Cocoa》家伙。而現在,我在你的blog上看到你已經深深地陷入了Rails.那是什么回事?

??? 我當時窮的要命和急切地需要錢。那時我剛剛買了一幢新房,并且抵押付款期限就快到期了――噢,等會,你想我認真點嗎?好吧,事實是我和我的幾個朋友已經一直在想一起工作一段時間了。當恰當的時機到的時候,我們給項目做了技術評估,Rails成了首選。那時我還沒用過Rails或者Ruby.但是我是不會讓小小的需要學習阻礙我去做那個項目的。今年我已經學習了三種,可能四種語言了。我不再相信一種語言可以做任何事了。如果我需要學習一些新知識去一些事情,我將全力以赴去學好它。

??? 2,你對Rails有什么看法?

??? 主要是簡單性。完成事情的容易程度。我做的那個應用的第一個項目原來是一個基于Java的web應用。每個人都知道一定會有一種更好,更快,更容易的方法的。Ruby一直都是一種好語言――并且是一種有趣的語言――因此建立于它之上的這個框架,它應得到關注。

??? 3,Ruby的晦澀和Rails的新穎對客戶來說會不會是一個問題?

??? 不全是。如今事實上恰恰相反。有太多潛在的工作, 缺并沒有足夠的人在真正地開發Ruby on Rails應用。

??? 4,為什么Ruby會如此特殊?難道Rails就不能在其他語言中實現?難道它就不能給Java實現?

??? 很少有其他語言可以完成Rails,或者像Rails那樣的。Java不在他們之列。Rails從Ruby中獲取了一些妙不可言的東西,嘗試用另一種語言復制它不僅是對Rails所做的是一個浪費,對其他語言來說也是一個浪費。但是它的概念一定會在其他非常動態的,動態類型語言中得到很好的應用。

??? 確實,我很興奮的看到其他項目正實現一些從Rails衍生的主意到其他平臺中。例如作為一個Python里的Rails版本,Django得到了一些固定的發展。但是,實際上它是Python自己的龐然大物,它如何成長將會非常有趣。

??? 現在,我已經說過了你不能用Java來實現Rails.但卻并不意味著你不能用Java做一些同樣優秀的東西。Java的力量可以以一種有趣的,神奇方式應用到一種全新的框架上。只是還沒人做那些事情。每個人都對J2EE這個糕點趨之若騖,以致于沒人以一種更加激烈,更加動態的方式來重新考慮問題。盡管有人提出一個基于Java的殺手級的框架可以與Rails做同樣多工作, 它一定也不能做的象Rails一樣。

??? 5,具有良好設計的Java應用能夠很好地支持特性的擴展――設計好你的類和包,那么你的心情將舒暢好長的一段時間。能否有團隊編寫出一個真正大型的Ruby應用?它是否具可維護性?或者還是RoR只能小打小鬧?

??? 設計良好的應用無論是以何種語言編寫的都能夠很好地支持特性的擴展。糟糕的設計無論是何種語言就不能了。同時也有了如何才是大型應用的定義的問題。我用Ruby寫的第一個rails應用部署到生產也不夠5,000行代碼,但是我之前用其他語言編寫的同樣大小的應用卻達到了50,000行代碼,所以如何定義大型是個問題。

??? 有團隊可以編寫一個可以支持大量特性,運行良好,時間上具備可維護性的Ruby on rails應用嗎?是的,毫無疑問。在使用了Ruby on Rails一段時間后,我將有信心用Rails解決任何尺寸的web應用問題。但是,那是因為我在它上面花費了一些時間,認識到編寫一個具有良好設計的應用是有可能的。

??? 也就是說,很有可能現在正有幾十個垃圾的Ruby on rails應用在編寫中。幾百或者幾千個都有可能。如果你不知道你正在做什么,你將會編寫一個垃圾的應用。

??? 6,那么我們回到了web應用,你可以在桌面上使用ruby,或者我們是否一直要用C#,面向對象C還是OS服務商支持的語言編寫UI?

??? 嗯,我的生活的一部分就是回到web應用。它對我來說是一個很好的還環境,因為自從1994年開始我就一直在做基于web的工作。但是現在我將開發基于桌面的應用。而且人們對桌面應用的需求還很大。我可不想要一個網絡的office.你也不想把一些象Aperture的東西建造成一個web應用吧。

??? 你現在可以使用Ruby去建造一個引人注目的桌面應用嗎?不,相關的工具包還不存在。但是如果存在了恰當的工具包――這是有可能的。那就沒有什么東西可以阻止它成為一個好的桌面應用語言了。那是說,我已經發現利用平臺的最好的方法就是盡量的本地化-貼近平臺,不管它是一個操作系統或者還是一個web應用框架。當我在Mac上的桌面工作,我需要寫面向對象C和Cocoa.當我用Rails的web工作,那意味著使用Ruby.而對于操作系統方面的工作,我需要用到C和shell.在這個討論中不會只有唯一的答案。

??? 我認為這就是最近對Ruby on Rails關注和屏棄以有色Java眼鏡看待世界的真正勝利。Ruby并不會成為下一個Java,完全不。而是Ruby on Rails將會幫助打破了這樣的一個觀點—— “只有一個正確的方法”,不是的。解決問題的方法有千百條。真正的,他們中沒有一個是明顯的勝者。只有解決方案有優勢的位置。

??? 我想就像我們在其中工作,吃飯和居住的建筑物一樣。一些建筑物最好是用水泥和鋼筋筑造。其他的是用砌筑。還有其他的最好是用木材,并且那樣做是有理由的。沒有人會跳起來說“所有的建筑物一定要用磚頭筑造!”,那樣太愚蠢了!同樣的道理,不是所以的應用都應該要用Ruby on Rails或者Django或者J2EE或者Perl來編寫的。對于任何一個特定的工作都有大量的工具。還有新的工具等待去發掘呢。訣竅就是決定最優秀的那個。

??? 讓我們從夸夸其談回到你的問題:在web應用的范疇,很容易出現一個新的框架的,因為你并不是與視頻卡,GUI和應用在上面跑的整個系統之類打交道。除非是你愿意開發一個自己的框架,你必須面對選擇使用哪個框架的選擇。在桌面上也是同樣的道理。你可以創建你自己的框架,做任何你想要的做的,但是該建議卻不比你自己為web創建一個新框架容易。

??? Robert Cooper:帶上利器

??? ONJava的博客Robert Cooper最近在他的blog上撰寫了“It's the End of the World as We Know It."”來回應一些“Java時代末日”的言論。Cooper是亞特蘭大地區致力于企業集成和web/web服務應用的J2EE開發人員,同時也是資訊和娛樂站點screaming-penguin.com的經營者。

??? 1,你曾經說過“長期以來‘企業級’Java一直未能逃脫的一個很悲哀的事實是500個應用才需要‘企業級’的功能。”為什么Java開發人員采用了比他們實際需要更加復雜的框架?

??? 好的,有一些因素導致了這樣現象。一個是“buzzword compliance”。 你想使用你“應該”要使用的東西。我記得在99年一些大項目采用了entity bean作為數據模型,但是我們很快發現了性能是如此的恐怖以致于我們最終又轉到了手寫的DAO層。

??? 最近對javax.persistence的修改,一定程度也表明了,EJB的失敗一直都是缺乏不同級別的支持。理想的情況是,如果我僅需要基本的,簡單的ORM-類型功能,我就能夠很快的得到。如果我想深入真正復雜的東西,給我一個“更深層”的有分布式事務的視圖。然而,盡管在那樣高的層次上,在EJB1.1/1.2的世界里,看看你需要多少行代碼1)從JNDI獲得Home存根,2)做一個find by,3)做改變,4)提交事務。對于一般的應用,答案沒有理由只應獨一無‘二’。然而更新穎的Java框架(閱讀:Spring + Hibernate)使你獲得了那一個‘二’,但是你也要做一大堆的配置。那樣,很多方面, 混淆了你的代碼。大量的因素促成我我的演說“擁有一個有效的默認配置/操作”,但是那是不同的故事了。

??? 2,你一向不屑把Ruby on Rails看作是technorati中的后起之秀。你是根本就不想接受還是只是厭惡這種夸夸其談呢?

??? 并不是我真的這樣不屑。Rails在很多重要的方面來說非常優秀。事實上,如果PHP是那要死的飛行意粉怪,并且要給Ruby替代,我想那將是一個大進步。然而,盡管Ruby確實掃除了過去的錯誤,它仍然缺乏Java那么多的功能,但是Ruby為快速開發提供了一個引人注目新的開發模型。你可能反對,這僅僅是時間問題,假以時日,它一定可以的。然而,我對Ruby/Rails有一些敵意, 是因為我一些一直都在希望java能夠擁有的特性,一直長期希望J2EE能夠擁有簡單性。

??? 3,那么是什么促使你繼續留在Java陣營,你看中它的什么呢?

??? 按照我日常的工作,在400上沒有必要使用Ruby調用PCML/RPG程序。同樣,那些大量的java擁有的 “企業級”特性很重要,更不用說它是一個統一的打包和部署的框架。

??? 4,你說“然而,Java像是變成了無所不包的了,它不是‘web的語言’,也不是桌面應用的‘一等公民’。”Java是否應該放棄一些野心,專注在一個更小應用空間集合里?如果那樣,放棄哪個?

??? 你也知道,我在我的站點上和一個紳士有很長的討論。他指出了Java在J2ME世界的成功,TME/TiVo,置頂盒——或許是下一代DVD的混戰。這些對于開發來說都是有效的領域,但是我認為如果Java變成了這樣的一個系統,那將是一個損失。

??? 使我惱怒的是Java發明的“applet”,你看看Flash(加上Flex/Laszlo),它的“Cool”(快速的用戶體驗)和“強大的”(我免費的得到數據綁定/SOAP/XML-RPC等等)使applets無地自容。“強大的”缺不需要JRE的事實立馬扼殺了applet的生存空間,如果有人能以接近數目的代碼行數向我展示Laszlo Dashboard demo,我可能已經在那個方面得到了一個核心發展。Cool是需要很大的代價的。

??? 5,Java越來越多的復雜性,越來越多的競爭框架,這是你之前批評很多次的。我們用JDK 1.2的語義編碼,手工編寫servlet是不是更好呢?

??? 我認為的復雜性是很難管理。例如,如果你從一個VB背景開始關注使用Swing,那是非常令人難受的。當你需要做一些技巧性的東西,沒有一個“簡單”接口可以Cast成更加“高級”的接口。坦白的說,最近出現的一個有用的東西就是JAX-P了。在我頭腦中,還有一些東西jre沒有的,但是卻是必須存在的。Swing存在有多久了?然而還沒有東西可以給你像VB5的數據綁定表格控制的功能。

??? 我想JDK 1.5的提升是非常顯著的。當我談到“降低復雜性”,我真正指的是A)對于一件事情, 給予更多標準的途徑來完成,因此如果我真正需要一些不同的特性,我僅僅需要一個外部的框架。B)設計更加友好的API――認真的說,看看JavaMail的JavaDoc,看看研究出如何發送一個HTML格式的email要花費你多長時間。C)增加更加通用的功能到核心運行環境,提供一個可以分別與基于Flash,RIA和桌面領域的Avalon/Sparkle相比擬的風格和性能。同樣的,我記得以前天真地從VB/VC++轉到Java世界,想道“天哪,本來一直就應該是這樣的。”幾年前,我不能說我看到任何增加到Java的東西都是和我有同樣的想法(除了將要來臨的JAX-WS API)。看看Rails,你會有同樣的感覺。看看Flex你也有同樣的感覺。看看Avalon你也有同樣的感覺。不是我不喜歡Ruby,只是看上去Java不再可以與時俱進讓我很沮喪。

??? Bill Venners:發行人的觀點

??? Artima是很多Java開發人員高度關注的站點。長久以來它的發行人Bill Venners是一個Java著作者和顧問。同時也是一個JavaWorld的專欄作家,Inside the Java Virtual Machine的作者。所以,當我們注意到Artima上的Ruby內容,我們必須找出背后的故事。

??? 1,Artima在很多人眼中一直都是作為一個Java站點,但是你剛創建一個一個新的Ruby版面, Artima當今很多的特色文章都是關于Ruby的,是什么促使了這種改變?

??? 沒有改變。Artima曾經是一個清一色的Java站點,但是幾年前我們擴展了更一般開發焦點,開始涵蓋其他語言。例如,我們開始在“Python Buzz”集成Python Blogs,在“The C++ Source”刊發C++文章。我們創建了Ruby Code & Style簡報來作為Ruby社區通過高質量,編輯的文章分享信息的地方。

??? 2,你是否認為你的Ruby報道是作為一種趨勢,或者服務已作出改變的開發人員?

??? 我們創建Ruby簡報僅僅是為了服務Ruby社區。我不知道是不是有一個趨勢,我也沒有看到很多Java開發人員轉到Ruby.人們并不只是僅僅需要用一種語言編程。我想掌握一種系統語言是有好處的,例如Java或者C++,和一種腳本語言,例如Ruby或者Python,而且能夠用兩者工作。那樣的話你就可以使用你手中最好的工具來工作了。

??? 3,你的最初少數Ruby文章幾乎沒有涉及Rails.你是否認為Rails背后有一個大的Ruby故事?你還知道有什么東西使用了Ruby?

??? 除了知道Rails在市場上很有賣點,我對Rails了解的不多。Rails商人一遍又一遍傳遞了這樣的一個信息,就是Rails能夠助你很快的創建web應用。每個人都很清楚的收到了這個信息。我認為這是一個非常好營銷工作。我也相信這個信息,但是快速的創建一個web應用不僅僅是人們所關心的。有時人們也關系與數據庫的集成,應用服務器的集群,在這種情形,其他工具可能比Rails更有效率。就Ruby而言,我認為它是一種適合腳本和創建系統的多用途的編程語言,與Python同種類別。

??? 4,即使在Rails以前,對比于其他“敏捷”語言,人們都談論到Ruby獨特的吸引Java開發人員。你認為Ruby有什么特別之處呢?為什么它對于Java移民這么好?

??? 我不相信將會有很多Java移民或者Ruby尤其適合Java程序員。現在大肆宣稱圍繞著Ruby,或許是因為Rails的買賣,所以或許你印象中的移民就是來自于那些宣稱的印象。Ruby是一種好的語言,但是Java也是,Python也是。

??? 5,你是否認為我們將會看到很多Java開發人員開始學習Ruby或者轉到Ruby,或者我們將看到一個新一代直接跳過Java而用Ruby代之?

??? Java不會離我們而去。在Artima,我們選擇了Java作為新的體系架構,而不是Ruby,或者Python,就是因為它是一個成熟的擁有免費和商用的大量工具和API的生態系統。相對于Java,是的,當使用Ruby或者Python編程的時候是有一些速度的提升,但是有了現代的像IntelliJ,Eclipse和NetBeans的 Java IDE,你可以在Java里走的更快。但是用Ruby編程是很愜意的,同時,如果有人可以從Ruby中找到他們的職業生涯,那么請全力以赴去實現。

??? 結語

??? 是否Ruby將橫掃Java?不僅僅是虔誠的Ruby狂熱者在預言這個場景。開發人員的需要觀點, 就像Venners提出的“手上對工作最優的工具”。 至關重要的是,開發人員必須對正確理解和使用這些工具負責。也就不難看出Coopper對于EJB 1.0的大肆宣稱的記憶和Davidson的預言“如今很有可能有很多垃圾的Ruby on Rails應用在編寫中”的聯系了。無視技術,讓市場的浪潮沖走是很危險的。不僅如此,很多人正在告訴我們使用Ruby會有相當大的效率提升,它確實是一個理想的工具,因此我們應該給予一定的關注。

??? 作者感謝Bruce Tate, James Duncan Davidson, Robert Cooper, 和 Bill Venners.感謝占用了他們的時間與ONJava的讀者分享他們的思想。

??? Chris Adamson是ONJava和Java.net的編輯,專攻Java,Mac Os X和多媒體開發的亞特蘭大地區的顧問。

  版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接
  原文: http://www.onjava.com/pub/a/onjava/2005/11/16/ruby-the-rival.html
  譯文: http://www.matrix.org.cn/resource/article/44/44288_Ruby+Java.html