相比於 Django、Pylon 等 Python 架構,Ruby on Rails 是否有很大的技術優勢?

來源:互聯網
上載者:User
如果有優勢,主要的技術優勢是什麼呢?

回複內容:

我實習時候的指導老師(純潔的白羊座 @清風 )在給實習生上第一節課的時候說過這個問題,大概的意思是:你的應用做的越大,架構能提供給你的東西就越少。新型架構在一開始開發的時候會帶來很大的效率提升,但是往後發展的時候,這種協助會越來越少,自己的設計會越來越多。

大概是這樣的原因,豆瓣至今還在用 Quixote,因為除了路由分發,其他部分任何架構都已經提供不了太大的協助。架構提供的是架構的工作模式。

所以我覺得對於一般的應用來說,如果能從架構中得到效率優勢,那麼 Ruby on Rails 也好,Django 也罷,誰多一點誰少一點關係並不很大。反而文檔品質、社區活躍程度、有品質的使用者數量(就是在 StackOverflow 或者郵件清單有中能真正解決問題的使用者數量),這些非技術因素影響會更大。架構和架構之間當然有區別和優勢。

比如 Spring 的交易管理。比如 Rails 的快速原型。另外,“輕型架構 Quixote,Sinatra,node 的一些架構”,甚至“沒有架構”, 也是一種架構。

而選擇架構,應該說不是技術人員考慮的問題(現代語言上的差異,有時候小到根本不值得一提)。架構師才需要考慮這些。

考慮 Scalability 下的成本,用 Spring 的伺服器叢集來管理事物,是否要比上 Oracla 叢集便宜?
考慮快速原型,用 Rails 是否能在一個月內拿出個可用的東西給 VC 看?
考慮使用者有郵件模版編輯和自動分發的需求,因為 PHP 有現成的產品,是否優先選擇他?
考慮系統涉及大量個人資料,基於安全性的考慮是否選擇 Java 的架構?

當需求更多樣化的時候,還可能需要混合多個架構。
Spring 的 API + Rails ?
如果有簡單事物的大量並發,是否考慮加入 Node?
如果有大量資料的簡單索引,是否考慮 NoSQL 資料庫?
為了多種語言下的不同的庫都很重要,是否考慮用 Python 做粘合劑?

今天混合架構已經很常見了。今後,語言和架構恐怕也難以出現大統一。既然大家各占擅場,根據需求組合才是明智的選擇。ruby不像別的社區那麼分裂個人感受
ruby在DSL上有很大的優勢。用來測試的rspec非常好用。 自動化的測試非常重要,沒有測試,很多東西根本就沒辦法做。
元編程。python的程式員似乎很排斥這個,ruby則覺得這東西很好。

django的原始碼很長,越長就越不好讀。老大要我在many to many表中加個method,我記得我至少改動了3,4個地方才把這個method改過來(不排除我的方法有問題)。覺得理想狀態是只要更改一個地方就好。

Berkeley講開發選擇了rails,而且在berkeley此前的課程完全沒有ruby。而且berkeley的cs61a,人工智慧,都是學python的。


Berkeley在software as a service這門課程的書中說



Why Ruby and Rails? Why Not Java, C++, Python, or Scala?


We want students to understand that in the real world, programmers are rewarded not for the number of lines of code written or for how quickly they can “bash out” a feature, but for functionality delivered with high assurance of stability and while keeping the codebase beautiful and maintainablefor continued growth. To many students, especially “hotshot” coders who come into a software engineering course with nontrivial programming experience, the methodologies and techniques we use to do this— design patterns, refactoring, test-first development, behavior-driven design—seem a strange and a dubious use of time.

We have found that students are more likely to gradually embrace these practices if given the best possible tools to support the practices. The Rails community has created by far the most seamless, elegant, and comprehensive tool set to support Agile and XP, and the idea of constantly refining and inventing tools that support testing as well as helping produce beautiful application code is a distinguishing characteristic of the Ruby developer ecosystem. While learning Ruby and Rails will be new to most students, juniors and seniors seem to learn it without difficulty, and far superior tools outweigh the learning costs.

A common counterargument in academia is “Our curriculum already teaches language X, so upper-division courses should leverage that knowledge.” We believe this approach optimizes for the wrong thing. First, software professionals are routinely expected to learn new languages by applying concepts from languages they already know, so “learning how to learn” new languages is a good skill to cultivate in class. Second, a language that makes it difficult to write and test beautiful and concise code is a poor vehicle for teaching those techniques, so the only investment being “leveraged” is syntactic knowledge, a hurdle surmounted with relative ease. Thus, even if our students never use Ruby again, they will have learned how to reduce to practice such important ideas as metaprogramming, higher-order programming, functional programming, and use of closures in the service of higher productivity and more maintainable code. We believe these skills will transfer to new languages, framework, and programming systems. Our survey of alumni of the course that led to this book (see Chapter 13) suggests that our belief is well founded.從一個軟體生命週期來看, 一點優勢都沒, 只是前期開發效率快點, 軟體後期的最佳化, 效能的提升, 那做什麼還得做什麼, 那點工作量跑不了。 Rails在web開發效率上(這裡只說web),我個人覺得要比Python的web framework有優勢,具體都優勢大概有三個方面:


語言上
雖然Ruby和Python在許多方面很像,但是也有不少差別,總體來說Ruby要比Python靈活(特別是meta programming),所以Ruby更容易創造出expressive的架構,架構也更容易把更多的overhead解決掉。

設計上
Rails是典型的C2C,convention可以很大的加快開發效率(當然也有種種弊端),而Python崇尚explicit,所以要寫的代碼會多一些,也沒那麼多的magic,但是學習起來容易些,不會不小心犯錯誤。

生態系統上
Ruby幾乎整個社區都著重在web development上,而且集中在Rails,所以許多新的idea被創造出來(Cucumber, Capybara, Sprocket, Capistrano/Mina),而且gem/bundler讓package management更容易,生態系統更發達。而Python的話,Django自己一套生態系統,但是業有許多其他的架構,資源分散,而且其他架構很難成氣候,加上Python另一大應用實在科學計算上,所以感覺在web開發的生態系統不如Ruby發達。在開發中小網站時rails是最快的 rails可以在一分鐘內就可以自動產生原型 這是其他架構做不到的 rails的整合方案封裝很全 是社會化編程的典範 外掛程式和擴充遠超其他的架構 解決方案和資料都跟很豐富 ruby具備其他語言羨慕的完善的元編程機制 會註定它的智能性比其他架構較高

缺點也很明顯 整合度過高會導致臃腫和效能降低 網站規模過大需要依賴架構 ruby社區也在解決這個問題 開發了好幾個精簡和高效能架構 比如sinatra railsapi等 其他的語言也都在學習和模仿rails 差距已經不大了
另外一個缺點是國內的雲平台基本都不支援ruby的 曆史原因導致的 隨著國內php的不斷擴張和nodejs的興起 rails在國內已經錯過了最佳發展期了 至於未來rails能否再度火起 就看37signal公司和社區如何面對新的html5浪潮了我更傾向於Python.靈活.優勢很大。rails可以快速做出產品上線,rails提供一個完整的架構和最佳實務。這是python架構沒法比的。有一點我感覺很好用,就是資料庫遷移(migration)功能,Rails是內建的,而其他Python架構都是通過外掛程式去實現的(Django在1.7版才在核心功能中實現migration,目前還在開發中 Migrations | Django documentation )
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.