不使用Ruby的十個(gè)理由
【譯者注】這是一篇贊美 Ruby 的文章?。?!看完再噴不遲。
請(qǐng)注意:這是一篇主觀意識(shí)的文章。它的目的并不是要說(shuō)服你使用或者不使用Ruby,或者其他任何技術(shù)。這篇文章所涉及到的環(huán)境是Web開(kāi)發(fā),而不是通用的編程。我想要通過(guò)這篇文章解釋這些年來(lái)非Ruby社區(qū)對(duì)于 Ruby 的一些看法,并且提醒人們以開(kāi)放的心態(tài)來(lái)面對(duì)新的事物。敬請(qǐng)欣賞!
我最近做了一個(gè)15分鐘的演講“我喜愛(ài)的 Ruby 語(yǔ)言以及它的生態(tài)系統(tǒng)”。很顯然我的言論讓忠實(shí)的PHP,.NET和Java 開(kāi)發(fā)者感到不安。他們對(duì)Ruby不是好奇,而是感覺(jué)我在批評(píng)他們熱愛(ài)的技術(shù)。
既然這不是宗教,而是關(guān)于如何面對(duì)新的事物,我認(rèn)為我們應(yīng)該列出所有其他人認(rèn)為不使用 Ruby 來(lái)做 Web 開(kāi)發(fā)的理由。
1. Ruby并沒(méi)有Java或者PHP那么成熟
這是對(duì)的。Java和PHP被用于Web開(kāi)發(fā)要比Ruby早很多。但是你知道嗎?我姥姥比Ruby要年長(zhǎng)很多,但是我不認(rèn)為我姥姥可以做Web應(yīng)用。在Web時(shí)代,技術(shù)每幾年就要更新一次,老和成熟不一定就有優(yōu)勢(shì)。在很多方面,Ruby社區(qū)吸取了其他技術(shù)的教訓(xùn),所以能做的更好,相比碎片化的PHP社區(qū)來(lái)講。
如果你考察一門(mén)技術(shù)的標(biāo)準(zhǔn)只有時(shí)間的話,你從一開(kāi)始就錯(cuò)了。
2. Ruby 的性能不如 .NET 或者 Java
你又說(shuō)對(duì)了!除此之外,Ruby還比Erlang,Lua,C++等等都要慢,但是你不使用Erlang或者C++ 是嗎?Web開(kāi)發(fā)并僅僅是性能。你的應(yīng)用不可能在上線***天就有上百萬(wàn)的用戶。你需要編碼,測(cè)試,發(fā)布,并且循環(huán)這個(gè)過(guò)程,你需要快速迭代。所以,一開(kāi)始開(kāi)發(fā)效率大于運(yùn)行效率。老拿性能來(lái)說(shuō)事是愚蠢并且錯(cuò)誤的。Ruby 的應(yīng)用也能像 .NET 或者 Java 應(yīng)用那樣橫向擴(kuò)展。
3. Ruby 在 Windows 下工作的不好
這是一定的。Windows 在很多方面是偉大的,但不包括開(kāi)源的 Web 開(kāi)發(fā)。Ruby 以及很多源自 *NIX 的偉大技術(shù)都不能在 Windows 下工作的很好。與其撞破腦袋抱怨你已經(jīng)習(xí)慣了 Windows ,不如試試安裝 Linux ,讓生活繼續(xù)。技術(shù)的魅力在于學(xué)習(xí)新的事物,而不是呆在熟悉的環(huán)境里面一輩子。
4. Ruby 沒(méi)有 PHP 那么流行
的確是這樣的。技術(shù)并不是流行比賽,否則的話我們應(yīng)該都用 JavaScript 來(lái)開(kāi)發(fā)(目前在 Github 上***的語(yǔ)言)。技術(shù)是一種達(dá)到目的的手段。流行度只是衡量使用率,社區(qū)活躍度的一個(gè)指標(biāo),用來(lái)幫助人們判斷技術(shù)的可用性,穩(wěn)定性和支持程度。
5. Ruby 社區(qū)高傲并且勢(shì)力
嗯……這么說(shuō)吧 Java 社區(qū)是頑固的,.NET 社區(qū)是封閉的,Perl 社區(qū)是古怪的,C++ 社區(qū)是一群抽煙的中年人。
我遇到過(guò)各種各樣不同背景的開(kāi)發(fā)者。我并不是說(shuō) Ruby 沒(méi)有勢(shì)力的人,但是絕對(duì)不是主流。我想很多時(shí)候是這樣的一種情況:因?yàn)?Ruby 是相對(duì)比較新的技術(shù),所以一些簡(jiǎn)單的任務(wù)例如和第三方的測(cè)試,開(kāi)發(fā),迭代都相對(duì)容易。所以當(dāng) Ruby 程序員稱(chēng)贊這些事情使用 Ruby 更容易的時(shí)候,他們并不是在看低其他技術(shù),而只是在表述一種更簡(jiǎn)單的開(kāi)發(fā)方式。
6. Ruby 非常頑固,不自由
這個(gè)觀點(diǎn)不僅僅是錯(cuò)誤,簡(jiǎn)直就是愚蠢。讓我問(wèn)你一個(gè)問(wèn)題:編寫(xiě)一個(gè) HTTP 路由組件或者圖像處理類(lèi)庫(kù)有多少種方式?
約定優(yōu)于配置,***實(shí)踐和清晰的編碼標(biāo)準(zhǔn)不會(huì)讓開(kāi)發(fā)者不自由。相反,它讓開(kāi)發(fā)者專(zhuān)注于重要的事情,例如業(yè)務(wù)邏輯。
Ruby 固有的約定驅(qū)動(dòng)的開(kāi)發(fā)方式幫助開(kāi)發(fā)者提高了開(kāi)發(fā)效率,但同時(shí)尊崇社區(qū)驅(qū)動(dòng)的標(biāo)準(zhǔn),使得樣板文件最小化。
有趣的是,Ruby 是我知道的唯一一門(mén)語(yǔ)言,可以讓你在任何地方,任何時(shí)間更改任何東西。人們很喜歡這些標(biāo)準(zhǔn)和約定,應(yīng)為它讓他們更有效率。
7. Ruby 沒(méi)有 Java 和.NET 可靠
Windows 沒(méi)有 NetBSD 那樣安全?。。∪绻憧疾炜煽啃缘奈ㄒ粯?biāo)準(zhǔn)就是類(lèi)型檢查的話,你看事情的角度就錯(cuò)了。
雖然靜態(tài)語(yǔ)言嚴(yán)格的類(lèi)型檢查和編譯屬性讓他們獲得了更好的性能,但是,坦白說(shuō),在你編程生涯中,有多少 bug 是應(yīng)為錯(cuò)誤的變量類(lèi)型引起的?
Ruby 用來(lái)解決這個(gè)問(wèn)題的方式是宣揚(yáng)測(cè)試文化。也就是說(shuō),你的代碼的可靠性跟你的測(cè)試掛鉤,而不是你的方法聲明。
8. Ruby 缺少企業(yè)級(jí)的支持
恐怕你孤陋寡聞了吧?聽(tīng)說(shuō)過(guò) Engine Yard嗎?沒(méi)有?他們提供非常出色的企業(yè)級(jí) Ruby 支持。
所謂的企業(yè)級(jí)支持是很久以前企業(yè)通過(guò)綁定用戶銷(xiāo)售昂貴的,可靠的,***的技術(shù)來(lái)獲得收入。但是你必須這么做嗎?難道你是如此的無(wú)能,因?yàn)槿鄙偎^的“支持”就不去選擇一項(xiàng)合適的技術(shù)?
讓我問(wèn)你一個(gè)問(wèn)題:你認(rèn)為微軟需要多久才能發(fā)現(xiàn),修復(fù),承認(rèn),并且發(fā)布一個(gè)IIS的安全補(bǔ)丁?再想想,你真的認(rèn)為金錢(qián)驅(qū)動(dòng)的壟斷企業(yè)關(guān)心你 Web 應(yīng)用的安全性嗎?
在以開(kāi)源代碼為代表的技術(shù)創(chuàng)新時(shí)代,為了所謂的支持選擇一個(gè)封閉的,壟斷的技術(shù),就是選擇了落后所有人一步。正大眼睛看看這些公司吧,Basho, Redhat, Canonical, 10gen, Cloudera, Engine Yard,他們提供開(kāi)源的技術(shù),并且提供企業(yè)級(jí)的付費(fèi)支持。
9. Ruby 沒(méi)有很好的可擴(kuò)展性
這是很老的話題,要追溯到 Twitter 剛剛開(kāi)始的時(shí)候。當(dāng) Twitter 飛速發(fā)展的時(shí)候,他們必須修改 ActiveRecord 中深層次的代碼以獲得在 Rails 中支持多個(gè) MySQL 數(shù)據(jù)庫(kù)。不幸的是,人們混淆了 Ruby 和 Rails。在 Twitter 這個(gè)案例中忽略了 Twitter 的快速成長(zhǎng)得益于 Rails 的易于使用和快速開(kāi)發(fā)。
任何成功的應(yīng)用到***都會(huì)遇到擴(kuò)展性問(wèn)題。 Facebook ***把 PHP 編譯成了 C++,Twitter 轉(zhuǎn)向了 Scala, Youtube 依然使用 Python,Apache 和 MySQL。沒(méi)有任何兩個(gè) Web 應(yīng)用是完全一樣的,我們應(yīng)該從成功的 Web 應(yīng)用中學(xué)習(xí)經(jīng)驗(yàn),而不是上來(lái)就宣布某項(xiàng)技術(shù)的擴(kuò)展性強(qiáng)于另外一項(xiàng)技術(shù)。
10. 尋找有經(jīng)驗(yàn)的 Ruby 程序員很困難
這倒是真的,但取決于你在世界的哪個(gè)地方。比如在 Israel,.NET 和 PHP 盛行,所以找到好的 Ruby 程序員是很困難的。但是你知道嗎?在那里更難找到有經(jīng)驗(yàn)的 Javascript 開(kāi)發(fā)者!
非要較真的話,我也可以說(shuō)找到好的 PHP 程序員比 Ruby 更困難。因?yàn)?PHP 社區(qū)分散,用戶生成的文檔和不一致的 API 是的學(xué)習(xí)難度提高。
不要因?yàn)槔щy而放棄一樣好東西,你可以自己培養(yǎng) Ruby 開(kāi)發(fā)者。我的意思是,如果你認(rèn)為 Ruby 是正確的技術(shù),那么為什么不多投入一些呢?
英文原文:http://www.zohararad.com/2012/11/16/10-reasons-not-to-use-ruby/
譯文鏈接:http://www.oschina.net/news/34942/10-reasons-not-to-use-ruby





















