天天看點

Rails、Ruby、JAVA前景比較

        在論壇裡看了daquan198163所寫的《初學ROR的疑惑》這篇文章,robbin在回複中給了詳細的解答,可是看完解答之後,我也産生了一些疑惑,在此想問問。

        在robbin所給出的解答當中,更多的是闡述rails的好處,然而大家都知道,rails隻是一種用來快速開發的架構,而Ruby之是以如此火紅,大部分原因是因為rails,這點不可否認,但是對于ROR的未來,我始終有所懷疑,既然rails是架構,那當其他語言實作了類似的架構之後(現在已經有類似的架構,但仍然未成熟),ROR的未來又如何呢?目前ROR的優勢主要在于快人一步,而Ruby語言本身,在語言性能上卻是不及其他語言,也許當Ruby2.0正式出版後,通過YARV可能對性能有一個很大的提升,但是相信也僅僅是和其他動态語言相比,與JAVA之類的靜态語言可能仍然有差距。那當JAVA出現了一個比rails更完善的架構的時候,ROR又該如何呢?在該文章的回複中,robbin說過“由于程式設計語言内在差異,Java再簡化也簡化不到rails的程度。”,但是你不要忘記,正因為動态語言 具有JAVA所沒有的優勢,JAVA在新的版本中也已經整合了動态語言,這個問題在未來也許不再是問題,而且相信會比單獨使用動态語言在性能上有更好的表現。

        其實我個人并不排斥Ruby,而且我更想學Ruby,但是我認為Ruby這些動态語言的未來,相信都不再是單槍匹馬的出現在系統當中,正如robbin在《回複ozzzzzz的“java将死”》當中說的(兩個觀點都是robbin寫的,讓我有點不知道該如何表示了,一邊在反駁robbin一邊又贊成robbin,呵呵,糊塗):

        “我和ozzzzzz都認為Sun的管理層和技術層意見是有分歧 的。Sun現在的CEO并不是Sun起家的創始人,對Java語言沒有那麼純潔的懷舊感情。是以Sun管理層現在一系列動作都在表明Sun在把Java更加平台化,以提供Ruby,groovy,javascript等腳本語言支援。未來Java會成為一個基礎運作平台,上面可以跑各種腳本語言。”

        我想這才是動态語言未來的真正出路,而java的未來也在此一覽無餘,我個人認為老是用java和Ruby比較不太恰當,這兩種語言更應該相輔相成才是正道。我的看法可能不夠深思熟慮,請各位一二。

======================================

評論    共 27 條  發表評論 

robbin     2007-02-19 12:44

一、做web應用,Ruby沒有性能問題

這一點我其實反複說過好多遍,而且論壇有很多文章讨論這個問題,不想再重複了。做web應用,尤其是OLTP類型的應用,你用Java做,還是PHP,還是Ruby,性能上沒有什麼差別,考慮到系統的水準擴充能力,Ruby還要好于Java,從這一點來說,Ruby比Java性能更好。

二、在Java平台提供Ruby支援,和Ruby on rails本身沒有沖突的地方

在Java平台運作Ruby,真正能夠得到的好處是什麼?性能的提升?當然不是,是豐富的第三方Java類庫的支援。但是有沒有損失呢?也有,Ruby的C類庫支援就沒有了,例如RMagic你就跑不了。

三、Sun公司拓展JVM平台語言支援,和Ruby on rails的目标并不沖突。Sun公司在未來的Java版本中會修改位元組碼,也會給JVM添加新的指令集,目标就是更好的支援腳本語言。

四、對于程式員來說,你寫好的Ruby代碼,在RVM上面跑也行,在JVM上面跑也行,你又不需要修改代碼,有什麼好擔心的?JVM越是支援Ruby,Ruby就越被使用在更多的場合?這難道不是一件好事?我想不明白我觀點有什麼沖突的地方?

五、Ruby on rails會不會被取代,對你來說真的那麼重要嗎? 我剛畢業的時候工作語言是PowerBuilder,我當時用着PB就知道他遲早會被取代,那又如何?難道我應該8年來死抱着PB不放?或者拒絕使用PB,等着被公司炒鱿魚?我2000年操着PHP寫web頁面的時候,就知道PHP這玩意将來肯定要被JSP取代,那又如何?那我是不是就應該不學不用PHP了?等着失業阿?有哪種程式設計語言,哪種應用架構不會被取代?

calmness     2007-02-19 13:06

我并沒有認為ROR最終會被取代,而我的觀點隻是認為我們不應該去争論到底哪種語言更好,我隻是認為我們應該站在更寬廣的視覺上來看待這些語言,我之是以學習Ruby也是因為我并不認為Ruby會被取代,而是我認為Ruby對于JAVA來說幫助更大于競争,我更願意看到兩者相輔相成,而非是一天到晚的出現不同陣營之間無休止的争論

ozzzzzz     2007-02-19 14:45

我不認為java的平台化趨勢會緩解java和Ruby的語言戰争。

第一,從根本上上java是基于棧的語言,這一點和RVM還是有所不同。而Ruby真的運作在java上的時候,其原先所具有的一些優勢,比如并行處理和線程簡單,是否也能無縫的連結現在還看不到前景。我懷疑最後情況會成為一場虛拟化的虛拟遊戲。而就Ruby來說,面對最新的并行程式設計的潮流,很可能會推出新的RVM改造,這個方面java還難于琢磨。當然Ruby社群的行動是否迅速是前提,至少他們現在落後了。是以從這個方面發生Ruby和java的沖突目前還沒有開始。

第二,JVM的封閉和RVM的公開是另外一個潛在的問題。實際上這一點和上一點是有所聯系的。當然RVM社群并沒有PYTHON社群那麼多kacker行為,但是這隻是目前的情況,明天用的人多了,說不定就變了。當然你要是放棄c庫,就如同rubbin說的,我想這不會是問題。不過jython出現很久了,我沒有看到前途就真的那麼好。不過也可能是python社群的人習慣于更多的簡單類庫,而不是java那些嚴密得羅嗦的庫。

第三,Ruby和java的哲學思想不同。java可以是說精通語言的大師精心設計的靜态語言學術範本,Ruby則是一個不同被重構着的産業現象。如果說相輔相成,java應該去借鑒的應該是OZ,而不是Ruby。是以争吵是正常的,有的時候更多的争吵還是來自哲學而不是技術。

java在轉身,我并不是否認java成功轉身的可能性。但是java本身有許多的問題要解決,否則也就不用轉身了。現在真正的問題其實在于java發展的方向是現在的Ruby,還是未來的Concurrent語言。java這個轉身的時機究竟對不對現在也是要看的另外一個問題。當然作為程式員來說,最有利的是java成為cobol後最大的遺留系統的統治語言。

calmness     2007-02-19 15:07

“當然作為程式員來說,最有利的是java成為cobol後最大的遺留系統的統治語言。”呵呵,這句話有點悲觀過頭了吧,不管如何,我們做應用的還是應該以實際應用為主,我不太喜歡參與這些争論,我應該是個比較中庸的人吧,對于我來說用得上才是最實際,我學Ruby也僅僅是因為自己愛好,現在主要的開發還是用JAVA,争論那麼多也沒用,至少目前實際項目中也無法用到。

lewisou     2007-02-21 18:28

技術的革新是在造福勤奮的程式員,有什麼好擔心的。

ozzzzzz     2007-02-21 20:12

calmness 寫道

“當然作為程式員來說,最有利的是java成為cobol後最大的遺留系統的統治語言。”呵呵,這句話有點悲觀過頭了吧,不管如何,我們做應用的還是應該以實際應用為主,我不太喜歡參與這些争論,我應該是個比較中庸的人吧,對于我來說用得上才是最實際,我學Ruby也僅僅是因為自己愛好,現在主要的開發還是用JAVA,争論那麼多也沒用,至少目前實際項目中也無法用到。

我不是悲觀,而是闡述一個容易被忽略的事實——什麼樣的語言能力才能給程式員最大的錢途。

其實一個以前是主流的語言的程式員,才是最容易找到高收入和穩定工作的人。别的不說ada,cobol,Fortran 這個三個曾經的熱門語言,現在的就業環境就比java好的多,收入也高的多。而我們每次争論語言的時候,一些人總是害怕他們現在學的東西過時。不用問他們一定以為過時的就沒有人用了,工作也不好找了。但是事實恰恰相反啊。如果隻是以程式設計為一種謀生的手段,那麼這些過時的語言要比流行的和将要流行的語言更好。什麼才是最大的中庸呢?這才是最大的中庸。而最可憐的人其實才是那些以應用為指導的,也就是趕時髦的人,他們隻能吃别人的剩飯,進行最激烈的競争。

是以要是想獲得一個好的錢途,要麼就要走在潮頭前面來引導潮流,要麼就跟在潮頭後面收攏潰敗的殘部。當然這兩頭都是少數人,而往往這兩部分人又都是是一群人。

hurricane1026     2007-02-21 20:47

這段話好精彩,程式員應該以錢途為指引。這樣才能給無論是個人還是整個行業和市場帶來最大的利益。ada和cobol程式員的工資确實很高。

calmness     2007-02-22 00:27

正所謂物以稀為貴,主流語言雖然用得多,但是相關人才也多,待遇取決于供求關系,供過于求自然就低,相反則高。但是這和語言本身未來的發展卻不是正向的,正如你所說,它們是遺留系統的需要,這種需要隻會越來越少,很少的機會會有越來越多的情況出現。

aardvark     2007-02-22 06:49

引用

也許當 Ruby2.0正式出版後,通過YARV可能對性能有一個很大的提升,但是相信也僅僅是和其他動态語言相比,與JAVA之類的靜态語言可能仍然有差距。

編譯型Ruby慢過Java這樣一個假設是沒有任何理由的。如果大家都是編譯語言,性能的差異應該隻是受具體的實作影響。目前編譯型Ruby還很不成熟,自然不能和Java比性能,但是這條路不會太長。

引用

那當JAVA出現了一個比rails更完善的架構的時候,ROR又該如何呢?在該文章的回複中,robbin說過“由于程式設計語言内在差異,Java再簡化也簡化不到rails的程度。”,但是你不要忘記,正因為動态語言具有JAVA所沒有的優勢,JAVA在新的版本中也已經整合了動态語言,這個問題在未來也許不再是問題,而且相信會比單獨使用動态語言在性能上有更好的表現。

且不說用Java實作rails的可能性,即使能用Java實作一個類似rails的架構,在這個架構之上寫程式還是得用Java。寫應用這一步用Java怎麼赢過用Ruby?

Java的對動态語言的支援實際上相當于一個解釋器的接口。用C去編譯或者解釋Ruby難道會慢過用Java去解釋Ruby?“相信會比單獨使用動态語言在性能上有更好的表現”實在是很盲目的“相信”。

引用

“我和ozzzzzz都認為Sun的管理層和技術層意見是有分歧 的。Sun現在的CEO并不是Sun起家的創始人,對Java語言沒有那麼純潔的懷舊感情。是以Sun管理層現在一系列動作都在表明Sun在把Java更加平台化,以提供Ruby,groovy,javascript等腳本語言支援。未來Java會成為一個基礎運作平台,上面可以跑各種腳本語言。”

我想這才是動态語言未來的真正出路,而java的未來也在此一覽無餘

“這才是動态語言未來的真正出路”,言下之意似乎如果Java不平台化動态語言就沒有真正出路?

Ruby一路走來,它是獨立的,完整的。雖然現在不夠流行,但發展很快是有目共睹的。你怎麼就看到Ruby沒有Java的支援就沒與出路?

我覺得你有的不是疑惑,而是太多太多沒有理由的“相信”。

ozzzzzz     2007-02-22 07:29

calmness 寫道

正所謂物以稀為貴,主流語言雖然用得多,但是相關人才也多,待遇取決于供求關系,供過于求自然就低,相反則高。但是這和語言本身未來的發展卻不是正向的,正如你所說,它們是遺留系統的需要,這種需要隻會越來越少,很少的機會會有越來越多的情況出現。

至少從目前的狀況來看,遺留系統的存在一個逐漸增多的趨勢。分析原因首先是硬體的更新,帶來了新的平台轉移的工作;SOA的興起,帶來了舊有系統的從新認識;新的BRP流行,帶來了更多的系統改造而不是系統再造。特别是ada程式最近有了比2000年的時候更多的需求,當然這裡不排除戰争的因素。

而另外一個比較有意思的情況是,新的流行趨勢(比如Ruby和python,當然如果算上oz就更加明顯)是将舊有的概念進行新的發揚(比如文檔化代碼就來自于ada)。同時新的面向語言的程式設計和DSL,造成了對于語言風格的新喜好。而實際上基于lisp的格調以及shell的方式是最近的趨勢,這和c語言的靈活于随意是大相徑庭的。不管你喜歡不喜歡,java的風格已經不是流行的了。我認為這其中的原因在于使用java這樣的方式來描述業務需求是羅嗦而臃腫的。當然并不是優美的強大的就會流行,比如oz就很少有人知道。