為什麼出現了ruby on rails 而沒有出現python on pyres?

通過一種高級的OOP語言把前端的各類要素組合起來編程並不是一種新奇的想法。為什麼ruby 成功了而Python 無法成功呢?選擇ruby 的原因何在,和Python 相比的優勢何在呢?

多謝指教


不論你用什麼語言,只要你是做web的, ruby on rails 值得你一直學習和借鑒。


Python有Django,不過確實無法和Rails的流行程度相提並論

主要是Ruby有超越Python很多的meta programmability,從而使得DSL成為可能。當然DHH很好的使用了Ruby這一特性從而做出了很符合web需求的DSL應該說是個相對偶然的事件。

話說這是這兩天我看到題主問的第二個web相關問題了,兩次都是覺得問題有意思所以點進來,答到一半發現題主比較眼熟。最近打算整web相關的東西么?

--------------------------------------------------評論區的一點補充,放上來---------------------------------------------------

整理會比較系統,不可能說的比既有資料好,不過可以就細節展開一點,解剖一隻麻雀

比如說url解析,django是

urlpatterns = [
url(r"^articles/2003/$", views.special_case_2003),
url(r"^articles/([0-9]{4})/$", views.year_archive),
url(r"^articles/([0-9]{4})/([0-9]{2})/$", views.month_archive),
url(r"^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$", views.article_detail),
]

可見基本上是用正則來搞

而rails

resources :photos, :books, :videos

這種是符合restful標準的資源

get "profile", to: "users#show"

這種是聲明如何解析一個特定的請求

如上,rails寫起來會允許人更多的把精力放在領域問題上,而不是語言實現。很大程度上把很多任務轉換成了相對比較declarative的做法。而允許這種寫法出現的主要手段就是DSL,這方面網上有不錯的資料,The Ruby Programming Language裡面講的也好,我就不搬運了。

類似這樣的情況基本貫穿了整個rails後端,routing只是一小部分。而且每個常見問題rails都基本做到了頗高的DSL化程度。


主要原因是Ruby on Rails安利水平更高。Django那幫人竟然意識不到自己安利水平不行,還老是用professional來自我安慰也是醉了。

Ruby把monkey patching吹成是metaprogramming。然而吹的再厲害,在日本以外,根本就沒有什麼人用。原因很簡單,沒有英文文檔是完全沒機會火起來的。Ruby的火,很大程度是被Rails帶起來的。

Rails為什麼要選擇Ruby? 相比Node.js說不用callback會帶來錯覺,Rails里則少了點什麼,這也是為啥Rails風頭最終會被Node.js搶過去。而Ruby里有類似的東西。Ruby強調編程本身就是快樂的。儘管實際上並沒有什麼用,你願意痛苦的寫20分鐘把問題搞定,還是快樂的寫兩個小時把問題搞定。可是這種講感覺的東西是沒法反駁的,非常適合用來安利。你也看到了,Rails有非常強大的道路自信,從一開始就認為自己是全宇宙最正確的做法。凡是DHH說的都是對的。其他框架都是有這樣那樣的毛病的。

也因為Ruby提倡monkey patching,一不小心就會把自己坑死,以便體現作者能吞下玻璃而不傷身體的魔法。即便用了大量monkey patching,代碼依舊太長了,拿來宣傳一點用都沒有。這也是可以補救的,用scaffolding把要寫的代碼先生成出來(這和他要噴的Java有啥不同嗎?),代碼長步驟多也不要緊,可以錄視頻嘛,順便鼓勵腦殘粉說多錄視頻可以極大的提高你的編程水平。

沒有爹怎麼辦?可以讓o"reilly把作者評為hacker of the year。把各種不管何種程度,反正只要用過Rails的公司名,都列在首頁上。Django在這點上就做的非常不好,一直以professional的原因拒絕把非報業網站列在首頁上,直到完全沒人用Django了,才想起來還是列的好。也不肯抓住http://justin.tv從Rails轉Django這個大新聞,把Rails批判一番。Rails社區可沒少嘲諷過Django。

Rails版本號更新很勤快,4.0都出來。Django的2.0還遙遙無期呢。而且Rails每次大版本升級,都帶來了大量功能更新。儘管Rails 4.0更接近Django 1.0而不是Rails 1.0。可是這樣可以多曝光啊。

Django本身在Python社區就不太受歡迎,一開始認為是黑魔法太多,不夠pythonic。Django在這一點上確實做的不夠好,儘管是最早支持WSGI的框架之一,卻是最晚把這個介面給你暴露出來的。而ORM部分代碼亂的完全沒法看,Bug多我就不說了,想想Rails 4.0之前有修不完的SQL注入漏洞,Django這已經算不錯了。後來很多人認為Django太重量級了。然而在他們眼裡輕量級的Flask,內存佔用比Django多,跑分比Django慢。

-------------

Update: Flask比Django慢?參考 Morepath: from Werkzeug to WebOb


各語言都有自己遵從MVC或變體的Web框架,之所以Rails相對成功,一是因為時間點,二是因為Ruby語言自身能力牛逼(這裡不談性能),而Rails又榨乾了Ruby的所有能力將這種牛逼發揮到了極致,雖然自己用Python居多,但個人認為Ruby是所有動態語言里最優秀的,雖說各語言Web框架都差不多,也都可以完成相同的事,但從開發人員角度來說,寫Rails是最舒服最爽的


Ruby流行的根本就是在Web上,Ruby on rails就代表了Ruby的一切。

而Python可做的事情很多,Web只是其中的一個分支。


作為一個python粉我要跟這個問題里吹Ruby的人說:先了解一下大的趨勢再來吹。


( ???) 然而 perl 有 mojolicious(


推薦閱讀:

如何看待李毅吧出征 Facebook 在各網站的直播被屢次封鎖?
第一份Data Scientist(PhD)工作,FG vs. E輪startup怎麼選?
Negar Kordi的關注者多次重複出現,能否證明她的刷粉問題?
關於互聯網思維的書籍?
C# 這麼優秀的語言,現在到底出了什麼問題?

TAG:互聯網 | 網頁設計 | 前端開發 | RubyonRails | 前端工程師 |