關(guān)于Ruby/RoR我的體驗和看法
這幾天在twitter上說到不少Ruby到底好不好的事情,總結(jié)一下,寫了這個blog。
今年年初開始我打算深入體驗一下Ruby on rails,對我來說,已經(jīng)很多年沒有接觸"新語言"了。在這個深入體驗開始之前的幾年,也有若干次淺嘗輒止,基本都是玩了幾下,覺得要學(xué)的東西真多,用PHP順手寫一個也很簡單嘛,就放棄了。
但我想一個東西迅速風(fēng)靡世界一定是有原因的,就算我最終不去真正使用它,弄清楚背后的原因也是值得的。于是我就放下了老程序員的心態(tài),像一個初學(xué)者一樣從最基本的文檔看起,嘗試各種大家稱贊的項目,搞不懂的地方就去問熟悉Ruby的人,不僅問如何實現(xiàn),還要問"為什么會這樣","過去什么樣","其他語言解決某個問題的方法在這里如何對應(yīng)"。幾個月下來,雖然我還沒能用ror真正開發(fā)一個完全獨立的項目,但總算是有了一個全貌的概括性了解,也知道了歷史和文化,體會了社區(qū)的氛圍。這個時候,我想大概是可以對rails發(fā)表一些評論了。
在這一次嘗試之前,我最擔(dān)心的事情是"性能問題",現(xiàn)在看來這是一個偽問題,首先Ruby的性能并沒有這么差(前幾年確實不太好,不過現(xiàn)在已經(jīng)很好了);其次,用來做一個網(wǎng)站應(yīng)用,無論是什么語言,最后都要依靠緩存和分布來解決,也就是說最終都要依賴于正確的系統(tǒng)架構(gòu),而不是語言本身的性能;最后,就算是性能真的差又完全不可解決的問題,完全可以用效率更高的語言來寫,把處理的結(jié)果通過各種通訊方式交給Ruby就是了。在計算機硬件發(fā)展到今天這樣,性能問題大多不存在,只有架構(gòu)師水平的差距。我見過很多用了幾十臺機器的系統(tǒng)但抗不住幾十萬的負(fù)載,這能怪語言和平臺本身的性能差嗎?
在所有關(guān)于Ruby優(yōu)點中,我唯一不能認(rèn)同的是"學(xué)習(xí)曲線平緩",事實上,Ruby的學(xué)習(xí)難度比較高,確實遠(yuǎn)遠(yuǎn)高于PHP,要說平緩,大概是相對于J2EE的平緩。我相信這是很多對Ruby誤解和攻擊的來源,從表面上看起來,要學(xué)會Ruby尤其是ror,至少需要理解設(shè)計模式,知道服務(wù)器系統(tǒng)的運作方式,甚至需要熟悉操作系統(tǒng),要用好ror,更需要接觸各種項目和各種標(biāo)準(zhǔn),這些都需要花去很多學(xué)習(xí)時間。同時配合的還有各種測試工具,部署工具,雖然不是必須,但最終還是要學(xué)的(這里我還欠缺很多呢)。我曾經(jīng)開玩笑說Ruby社區(qū)的人破壞了英語的純粹性,因為他們fork新項目太容易,大家都喜歡創(chuàng)造各種開源項目,直接符合功能的名字都被用光了,于是只好用各種奇怪的相關(guān)的英語單詞,以至于搜索很多英文單詞竟然會找出來Ruby的項目。這些東西直接塞給一個初學(xué)者確實有很大的壓力。Ruby on rails的Getting start又太停留在表面,勉強算是嘗鮮,距離真正實用差的太遠(yuǎn)。相對來說,PHP就簡單多了,頁面直觀對應(yīng)在PHP文件上,什么都不用懂也能寫(當(dāng)然寫好也很不容易),這造成的結(jié)果就是誰都可以懂PHP,但不是誰都能懂Ruby。人們?yōu)榱搜谏w學(xué)習(xí)的痛苦,就容易去攻擊對方無用。在我這次下決心深入學(xué)習(xí)之前,我也覺得PHP最好,記得之前某次嘗試的時候 @rainux跟我說,剛剛上手是很難感覺到ror的好處,需要持續(xù)用一段時間才會慢慢發(fā)現(xiàn)。
ror在架構(gòu)和開發(fā)流程管理也堅定的支持了很多理論,比如MVC,比如敏捷,比如TDD...這些同樣增加了學(xué)習(xí)成本,當(dāng)然也增加了被攻擊的接口,比如:TDD太扯淡了,所以ror也扯淡?;蛘撸何易钣憛捗艚萘?,所以也討厭ror。實際上,敏捷和TDD本身都沒錯,他們都有成熟的方法論和實踐,有足夠好的工具配合,能解決很多問題。如果不認(rèn)同這個,只能說是開發(fā)和項目管理經(jīng)驗太少,沒碰上過復(fù)雜問題。有錯的是對敏捷和TDD的錯誤鼓吹,兩者不能混在一起。
另外一個常見說法是尋找Ruby的大流量項目案例。但其實尋找Ruby開發(fā)的"top項目"沒意義。DHH和37s創(chuàng)造的都不是適合所有人的產(chǎn)品,他們只愿意在某一領(lǐng)域做到最好。不是所有人都有興趣創(chuàng)造億級別產(chǎn)品,何況也沒幾個人真能做成。對大部分項目,千萬是一個很好的級別,那是ror最佳實踐領(lǐng)域,而在現(xiàn)實中,大部分項目能做到100萬pv,已經(jīng)算了不起了,想億級別pv的技術(shù)方案未免過早了。
在組織技術(shù)團隊的問題上,流行語言的難度是差不多的,10個人的團隊任何語言都很容易組織起來,但換個角度看,任何語言也很不容易組織10個人的團隊,只不過難的方法不一樣。A語言可能是找人難,一周就收到1份簡歷,B語言可能是鑒別難,一天收到200份簡歷,看都看不過來。其實最難的事情是組織一個10個人的靠譜團隊,這個團隊用什么語言相對于尋找10個靠譜的人的難度可以忽略不計。
選擇一個語言,并不是選擇語言本身,同時也是選擇社區(qū)。Ruby社區(qū)的活力,友好,規(guī)整,統(tǒng)一的審美,給我留下了非常深刻的印象。DHH和37s對這個社區(qū)影響巨大,我也相信他們的理念,小公司未必不好,小公司未必不偉大,追求pv不如追求極致的產(chǎn)品。我們創(chuàng)造一個產(chǎn)品,是為了解決一類人的問題,并不是為了超越誰或和誰競爭。
15年前,PHP 3.0之前的版本完全不可用(當(dāng)然,那時候PHP的簡稱還叫做Personal HomePage),那時候用c寫cgi/isapi或者用perl是網(wǎng)站最常見的開發(fā)形式。那時候說PHP是下一代語言,很多程序員都會不同意,他們會挑出來PHP一萬個不如c或者不如perl的地方。這些都沒錯,但世界是會變化的。PHP今天確實成了一種應(yīng)用廣泛,老幼皆宜的語言。我并不認(rèn)為未來Ruby會取代PHP,但至少,我認(rèn)為下一代高質(zhì)量的互聯(lián)網(wǎng)產(chǎn)品出現(xiàn)在Ruby社區(qū)的機會更大,這就像當(dāng)年P(guān)HP vs perl一樣,乃大勢所趨。
最后我說一句可能不太好聽的話,如果你沒有下決心轉(zhuǎn)型成為一個寫信教主那樣的專門忽悠的人,如果你還覺得技術(shù)有點意思,還想自己創(chuàng)造點產(chǎn)品,那么應(yīng)該保持足夠的技術(shù)敏感力,認(rèn)真的學(xué)習(xí)一些新東西,而不是給自己尋找各種借口。就像這張漫畫一樣。要多問問自己,是這東西真的不好,還是自己學(xué)不進去了?當(dāng)然,承認(rèn)后者是很難的。一年前我也確實沒學(xué)進去。
原文鏈接:http://blog.devep.net/virushuo/2011/03/23/rubyror.html
【編輯推薦】