Ruby on Rail學習的建議

來源:互聯網
上載者:User

標籤:

Rails 的發展和版本迭代速度比較快,寫書的是很難完全追上它的步伐的。但是無論 Rails 發展的多麼快,它的核心架構與準系統都沒有發生太大的變化。《Web 開發敏捷之道》作為 Jolt 獲獎書籍是值得一看的,現在市面上最新的中文版本對應的 Rails 版本是……3.2吧,如果我沒記錯的話。

然而這已經夠用了,特別是對於初學者來說,你沒有必要一下子掌握所有的細節,如果書中的 API 用法和 Rails 4.1(最新的版本)有出入,直接看一下最新的 API 手冊即可。另外還可以參考許多 Rails 社區發表的很多版本更新的文章,比如我曾經在 Rails 4 發布後寫的一個:《擁抱 Rails 4 —— 詳述 Rails 4 的新變化》。拿著敏捷那本書,對照這些參考資料,你可以掌握 Rails 核心至少八成以上的內容。

另外我不得不說的是,作為一個較為前沿的、小眾的社區。Ruby 和 Rails 在書籍的豐富程度上是無法和 Java/C++/C# 之類相比的。書籍不是我們擷取 Rails 知識的唯一途徑,甚至都不是主要途徑。如果你選擇 Rails,你必須要融入到整個社區去,很多新鮮的、使用的諮詢都是直接來自於社區的所有成員(比如中國的 Ruby/Rails 社區)。等這些東西都匯聚成冊出書,你就已經落後了很遠了。不過對於初學者來說,落後不要緊,追起來也很快,重要的是基礎和全面性的涉獵,這才是本答案的重點——

Rails 是一個架構,而不是一個工具

這意味著什麼呢?這意味著,Rails 把幾乎所有 Web 開發用得上的、時髦的、前沿的最佳實務都整合在了一起(當然,保持了精簡,更多的特性可以用第三方 Gems 來擴充),但是他並不負責告訴你這些最佳實務都是怎麼回事?它們在整個 Web 開發裡扮演著什麼角色?它們的具體用法?

這些東西 Rails 沒有直接給你提供答案(這不是它的職責),因此就導致很多初學者一聽:十五分鐘開發一個部落格?!臥槽,這麼簡單?沖啊……

很遺憾,你錯了。抱著這個想法去的,你也許只能學會十五分鐘開發一個部落格了(這件事對 Rails 來說幾乎談不上技術含量),問題是你不知道這十五分鐘裡 Rails 都幫你做了哪些事情,所以你始終都覺得在門外徘徊,卻無法真正的走進去。

接下來我談幾個重點,前提是你的目標是開發一個 Web 應用程式,你想學會使用 Rails(系統的學會),那麼你需要自行補充下列知識點,最終串聯起來形成一個知識體系。到了那時你再用 Rails,才會有登堂入室,融會貫通的感覺。

HTTP

這是所有 Web 開發的前提基礎,你不理解 HTTP,你永遠無法駕馭 Web 開發,你只能跟著別人(比如 Rails)為你設定好的路數走,而無法隨心所欲。但是對於初學者來說,你也沒必要追求隨心所欲,只要搞清楚最基本的事情就足夠了。

我在這裡要說一件事,以前我遇到一個女孩子(沒有性別歧視),她就是很有想法,很想用 Rails 開發她的創業項目。她遇到了一些細節問題,我幫她作瞭解答,在過程中我發現她連最基本的 HTTP 要求/響應是什麼都不清楚,卻一心糾結於設計 RESTful API 和怎麼做前端酷炫效果上。我跟她說,慢一點,你花一個月時間(其實用不了那麼久)補一下 Web 的基礎,然後再搞 Rails,一定會事半功倍,否賊遇到問題你都不知道怎麼回事,從哪裡下手去解決,你總不能永遠都去問別人吧?

她沒聽,直到今天,她還和一年以前差不多,我看不到她有任何進展。

另外一個女孩子,我帶的徒弟,我教了她兩個多月(每周大約一天到兩天,剩下的時間都是線上輔導),我就是從 HTTP 教起的。兩個星期前,她面試 SAP 成功(實習生,還在校念書),面試官給她的評價是:所有面試的實習生裡對 HTTP/Web 基本概念掌握的最好的一個,孺子可教。

多的我就不說了,推薦一本書給你:HTTP Developer‘s Handbook,短小精湛,簡潔實用。我花一天就可以讀一遍。遺憾的是,這麼好的一本書竟然沒有中文版!如果你英文吃力,你可以考慮 HTTP 權威指南,但是這本書枯燥乏味,內容很長。對於初學者來說,你需要掌握的東西其實和前者沒有區別。

REST

我們都知道 Rails 有一個特點,叫做“約定重於配置”,或者叫“慣例重於配置”。這句話實際是說,對於 Web 開發的一系列通用問題,業界都有一個 Best Practice(最佳實務)。最佳實務未必適合所有的團隊和項目,但是對於大多數新團隊新項目來說都是值得遵守的。這些通用問題,我們一般可以通過各種配置來定製它們的解決方案,但是 Rails 本著推崇最佳實務的原則,在架構的核心應用了一系列的最佳實務,只要你沒有特殊要求,那麼你完全不必考慮一大堆複雜的配置問題。

而 REST 就是其中之一,它是 Rails 架構裡請求分發與資源管理的核心思想。幸運的是,讀完了上面的那本關於 HTTP 的書,你就等於已經掌握了 REST 的基礎知識,所以這兩件事情原本就是相生相依的。

前端及工作流程

Rails 是一個 full-stack(全棧)架構,它對前端也有一整套解決方案,它擁抱最新的技術和實踐原則。一般來說 Rails 開發工程師都是(至少半個)全棧工程師,所以你不瞭解前端是要吃虧的。好多人對於處理資料、商務邏輯、路由等等都不是問題,但卻經常陷入前端的坑裡半天爬不出來。

對於初學者,你必須掌握基礎的 HTML/CSS/Javascript,這個是逃不掉的,否則你就別學 Rails 了。Rails 裡有很多基礎的機制,其實都是對前端技術的一種 Ruby 實現。比如說 Turbolinks,它的參照物就是 PJax;比如說 Assets Pipeline,它的參照物就是前端的構建工具,例如:GruntGrunt 做的事情更多,還有一部分對應的是 Rake,實際上 Rake 才是對應 Grunt 的,Assets Pipeline 是其中的字集)。

你不必掌握以上工具的細節,但是你最起碼應該知道真正的前端開發的完整流程,每一種工具在裡面扮演的角色是什麼,這樣你才能理解為什麼會有 TurbolinksAssets Pipeline……等等,遇到問題你才知道需要從何處入手去考慮,去查資料,去解決。

給你一個列表,不要求你學習它們的細節,但是你要知道它們是幹什麼的,它們解決了什麼問題以及工作原理,它們在 Web 開發中的扮演的角色等等。換言之,別人問你這是什麼,你應該用一兩句話說清楚它們是什麼:

  • HTML/Haml/Slim/ERB
  • CSS/Sass/Compass
  • Javascript/Ajax/Coffeescript/Turbolinks
  • JSON/Yaml/XML(這個是通用的,並非只有前端相關)
  • Rake/Grunt/Assets Pipeline

這裡面有些是可以和 Rails 不整合在一起實用(比如 Grunt),但是你可以瞭解一下,因為在 Rails 的世界裡,你可以看到它們的身影。有比較,才會有理解。

物件導向設計

歸根結底,Rails 是一個基於物件導向的 MVC 架構,所以你得明白什麼樣的設計是基於物件導向的,MVC 式的分層設計。不過坦白的說,這是一個大坑,初學者很難很快的有所斬獲。但是它也很關鍵,因為它經常回答下列類型的問題:

  • 對於我想要開發的應用/功能,需要多少 models?對應的資料結構應該是什麼樣的?
  • 對於這些應用/功能需要的行為,應該如何分發在 controllers 裡?它們彼此之間如何通訊?如何傳遞資料?
  • 對於 views 所需要的呈現,我該如何提取/構造/修飾資料或者資料集合?
  • 什麼樣的情況下可以分拆/組合/……?
  • ……等等等等

一個很現實的問題就是,看教程你會很容易理解為什麼會有這些 models/controllers/views/routes 等等,但是輪到你自己解決實際的問題/需求時,你完全不知道該如何下手!這不是 Rails 的問題,而是你不懂用 Rails 來描述你的問題。

所以,看書看教程的時候,你一定不要只是跟著做(第一遍可以無腦跟做),而是要思考,為什麼作者要這麼設計?用我的思路重新設計一種方案行不行?有沒有更好的方案?

每一次你做一個應用的時候,這個應用所有的資料實體應該就如同你的手、腳、眼、口、心一樣成為你身體的一部分,它們之間的通訊和資料流轉就好像體內的血管一樣,看似紛亂,但總是有跡可循,條理分明;而你的大腦控制著一整套神經系統來向各個組件發出指令,就好像路由接收了請求之後做出的指派是一樣的。

你能一層層,一點點的把你做的東西講述清晰嗎?如果你可以做到,別說 Rails,世界上任何一個 MVC 架構都不外乎於此。

這個領域的知識不是 Rails 特定的,它也正是你想知道的進階的部分。

關於 Ruby

學 Rails 要不要先學 Ruby?

  • 如果你在此之前已經有了一門物件導向語言的紮實基礎,比如 Python,Javascript,Java 等,那麼學習 Rails 不一定要先學 Ruby,而且你肯定也知道該如何去針對性的學習 Ruby。
  • 反之,如果你只有泛泛的學習過任何一門物件導向語言,甚至沒有學習過別的語言,你一定需要先學 Ruby,否則 Rails 裡一大堆的文法糖/元編程/DSL會把你搞的頭暈眼花。

剛接觸 Rails 的時候,很多人覺得很神奇,然而“神奇”就等於“未知”,你不能拿著未知的東西來幹活,這不是找死嗎?所以 Ruby 語言的基本功是需要的,你必須能夠做到“視神奇如平常”的地步才能毫無滯礙的使用 Rails。對於學習 Ruby,除了鎬頭書不做其他介紹,進階的話直接看 Ruby 元編程。

鎬頭書雖然很厚,但是你要明白至少三分之一都是對標準庫 API 的介紹,這部分是可以拿來做參考書的。剩下三分之二,有一小半是 Ruby 語言的整體介紹,而另外一半才是語言的細節。因此你真正需要精讀的部分也就三分之一多一點。我剛開始的時候每天坐地鐵的時候讀幾頁,前後也就一個來月精讀了一遍。

鎬頭書有中文版,雖然版本低不過無妨,基本的東西沒怎麼變。看完中文版的,然後找一本新的英文版,新書裡所有版本變化的地方都有明確標示,你可以對照著看一下這些點,升級工作就 OK 了。

另外,學習 Ruby 和 學習 Rails 實際上可以同步進行,不會耽誤多少時間的。

時間?

我覺得一個智商正常,有一定自律性,有一定文化基礎的人,學習我上面提到的東西(除了 OO 設計這個大坑)按每天 4 小時計算,半年下來應該小有成效了,也就是共計 720 小時。

什麼,你說慢?拜託~720 小時打下一個可以成長為全棧開發工程師的基礎,這已經是火速了好嗎?人啊,要有遠見!

其他

還有一些東西沒說,比如測試,比如部署,比如命令列等等,這些都是 Rails 開發中的日常任務,沒什麼好說的。只要你用 Rails 你就不可能學不會。

結語

Rails 是簡單,十五分鐘開發部落格什麼的那都是 2006 年的往事了,到了今天它的開發效率更是令人髮指。但是綜上所述你應該明白,Rails 高效的背後是架構協助你封裝和隱藏了一系列前沿的工具、技術、最佳實務。你不用從頭開始重複去實現它們(所以你獲得了高效率)並不代表你不需要知道它們(你得瞭解高效率背後的技術細節)。否則的話你永遠只能重複別人十五分鐘做出來的東西,輪到你自己的時候給你再多的十五分鐘,你不會的還是不會。

Ruby on Rail學習的建議

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.