Rails 的發展和版本迭代速度比較快,寫書的是很難徹底追上它的步伐的。可是不管 Rails 發展的多麼快,它的核心框架與基本功能都沒有發生太大的變化。《Web 開發敏捷之道》做爲 Jolt 獲獎書籍是值得一看的,如今市面上最新的中文版本對應的 Rails 版本是……3.2吧,若是我沒記錯的話。前端
然而這已經夠用了,特別是對於初學者來講,你沒有必要一會兒掌握全部的細節,若是書中的 API 用法和 Rails 4.1(最新的版本)有出入,直接看一下最新的 API 手冊便可。另外還能夠參考許多 Rails 社區發表的不少版本更新的文章,好比我曾經在 Rails 4 發佈後寫的一個:《擁抱 Rails 4 —— 詳述 Rails 4 的新變化》。拿着敏捷那本書,對照這些參考資料,你能夠掌握 Rails 核心至少八成以上的內容。git
另外我不得不說的是,做爲一個較爲前沿的、小衆的社區。Ruby 和 Rails 在書籍的豐富程度上是沒法和 Java/C++/C# 之類相比的。書籍不是咱們獲取 Rails 知識的惟一途徑,甚至都不是主要途徑。若是你選擇 Rails,你必需要融入到整個社區去,不少新鮮的、使用的諮詢都是直接來自於社區的全部成員(好比中國的 Ruby/Rails 社區)。等這些東西都匯聚成冊出書,你就已經落後了很遠了。不過對於初學者來講,落後沒關係,追起來也很快,重要的是基礎和全面性的涉獵,這纔是本答案的重點——github
這意味着什麼呢?這意味着,Rails 把幾乎全部 Web 開發用得上的、時髦的、前沿的最佳實踐都整合在了一塊兒(固然,保持了精簡,更多的特性能夠用第三方 Gems 來擴充),可是他並不負責告訴你這些最佳實踐都是怎麼回事?它們在整個 Web 開發裏扮演着什麼角色?它們的具體用法?面試
這些東西 Rails 沒有直接給你提供答案(這不是它的職責),所以就致使不少初學者一聽:十五分鐘開發一個博客?!臥槽,這麼簡單?衝啊……編程
很遺憾,你錯了。抱着這個想法去的,你也許只能學會十五分鐘開發一個博客了(這件事對 Rails 來講幾乎談不上技術含量),問題是你不知道這十五分鐘裏 Rails 都幫你作了哪些事情,因此你始終都以爲在門外徘徊,卻沒法真正的走進去。api
接下來我談幾個重點,前提是你的目標是開發一個 Web 應用,你想學會使用 Rails(系統的學會),那麼你須要自行補充下列知識點,最終串聯起來造成一個知識體系。到了那時你再用 Rails,纔會有登堂入室,融會貫通的感受。ruby
這是全部 Web 開發的前提基礎,你不理解 HTTP,你永遠沒法駕馭 Web 開發,你只能跟着別人(好比 Rails)爲你設定好的路數走,而沒法爲所欲爲。可是對於初學者來講,你也不必追求爲所欲爲,只要搞清楚最基本的事情就足夠了。數據結構
我在這裏要說一件事,之前我遇到一個女孩子(沒有性別歧視),她就是頗有想法,很想用 Rails 開發她的創業項目。她遇到了一些細節問題,我幫她做了解答,在過程當中我發現她連最基本的 HTTP 請求/響應是什麼都不清楚,卻一心糾結於設計 RESTful API 和怎麼作前端酷炫效果上。我跟她說,慢一點,你花一個月時間(其實用不了那麼久)補一下 Web 的基礎,而後再搞 Rails,必定會事半功倍,否賊遇到問題你都不知道怎麼回事,從哪裏下手去解決,你總不能永遠都去問別人吧?框架
她沒聽,直到今天,她還和一年之前差很少,我看不到她有任何進展。工具
另一個女孩子,我帶的徒弟,我教了她兩個多月(每週大約一天到兩天,剩下的時間都是線上輔導),我就是從 HTTP 教起的。兩個星期前,她面試 SAP 成功(實習生,還在校唸書),面試官給她的評價是:全部面試的實習生裏對 HTTP/Web 基本概念掌握的最好的一個,孺子可教。
多的我就不說了,推薦一本書給你:HTTP Developer's Handbook,短小精湛,簡潔實用。我花一天就能夠讀一遍。遺憾的是,這麼好的一本書居然沒有中文版!若是你英文吃力,你能夠考慮 HTTP 權威指南,可是這本書枯燥乏味,內容很長。對於初學者來講,你須要掌握的東西其實和前者沒有區別。
咱們都知道 Rails 有一個特色,叫作「約定重於配置」,或者叫「慣例重於配置」。這句話實際是說,對於 Web 開發的一系列通用問題,業界都有一個 Best Practice(最佳實踐)。最佳實踐未必適合全部的團隊和項目,可是對於大多數新團隊新項目來講都是值得遵照的。這些通用問題,咱們通常能夠經過各類配置來定製它們的解決方案,可是 Rails 本着推崇最佳實踐的原則,在框架的核心應用了一系列的最佳實踐,只要你沒有特殊要求,那麼你徹底沒必要考慮一大堆複雜的配置問題。
而 REST 就是其中之一,它是 Rails 框架裏請求分發與資源管理的核心思想。幸運的是,讀完了上面的那本關於 HTTP 的書,你就等於已經掌握了 REST 的基礎知識,因此這兩件事情本來就是相生相依的。
Rails 是一個 full-stack(全棧)框架,它對前端也有一整套解決方案,它擁抱最新的技術和實踐原則。通常來講 Rails 開發工程師都是(至少半個)全棧工程師,因此你不瞭解前端是要吃虧的。好多人對於處理數據、業務邏輯、路由等等都不是問題,但卻常常陷入前端的坑裏半天爬不出來。
對於初學者,你必須掌握基礎的 HTML/CSS/Javascript,這個是逃不掉的,不然你就別學 Rails 了。Rails 裏有不少基礎的機制,其實都是對前端技術的一種 Ruby 實現。好比說 Turbolinks,它的參照物就是 PJax;好比說 Assets Pipeline,它的參照物就是前端的構建工具,例如:Grunt(Grunt 作的事情更多,還有一部分對應的是 Rake,實際上 Rake 纔是對應 Grunt 的,Assets Pipeline 是其中的字集)。
你沒必要掌握以上工具的細節,可是你最起碼應該知道真正的前端開發的完整流程,每一種工具在裏面扮演的角色是什麼,這樣你才能理解爲何會有 Turbolinks、Assets Pipeline……等等,遇到問題你才知道須要從何處入手去考慮,去查資料,去解決。
給你一個列表,不要求你學習它們的細節,可是你要知道它們是幹什麼的,它們解決了什麼問題以及工做原理,它們在 Web 開發中的扮演的角色等等。換言之,別人問你這是什麼,你應該用一兩句話說清楚它們是什麼:
這裏面有些是能夠和 Rails 不集成在一塊兒實用(好比 Grunt),可是你能夠了解一下,由於在 Rails 的世界裏,你能夠看到它們的身影。有比較,纔會有理解。
歸根結底,Rails 是一個基於面向對象的 MVC 框架,因此你得明白什麼樣的設計是基於面向對象的,MVC 式的分層設計。不過坦白的說,這是一個大坑,初學者很難很快的有所斬獲。可是它也很關鍵,由於它常常回答下列類型的問題:
一個很現實的問題就是,看教程你會很容易理解爲何會有這些 models/controllers/views/routes 等等,可是輪到你本身解決實際的問題/需求時,你徹底不知道該如何下手!這不是 Rails 的問題,而是你不懂用 Rails 來描述你的問題。
因此,看書看教程的時候,你必定不要只是跟着作(第一遍能夠無腦跟作),而是要思考,爲何做者要這麼設計?用個人思路從新設計一種方案行不行?有沒有更好的方案?
每一次你作一個應用的時候,這個應用全部的數據實體應該就如同你的手、腳、眼、口、心同樣成爲你身體的一部分,它們之間的通信和數據流轉就好像體內的血管同樣,看似紛亂,但老是有跡可循,條理分明;而你的大腦控制着一整套神經系統來向各個部件發出指令,就好像路由接收了請求以後作出的分派是同樣的。
你能一層層,一點點的把你作的東西講述清晰嗎?若是你能夠作到,別說 Rails,世界上任何一個 MVC 框架都不外乎於此。
這個領域的知識不是 Rails 特定的,它也正是你想知道的進階的部分。
學 Rails 要不要先學 Ruby?
剛接觸 Rails 的時候,不少人以爲很神奇,然而「神奇」就等於「未知」,你不能拿着未知的東西來幹活,這不是找死麼?因此 Ruby 語言的基本功是須要的,你必須可以作到「視神奇如日常」的地步才能毫無滯礙的使用 Rails。對於學習 Ruby,除了鎬頭書不作其餘介紹,進階的話直接看 Ruby 元編程。
鎬頭書雖然很厚,可是你要明白至少三分之一都是對標準庫 API 的介紹,這部分是能夠拿來作參考書的。剩下三分之二,有一小半是 Ruby 語言的總體介紹,而另一半纔是語言的細節。所以你真正須要精讀的部分也就三分之一多一點。我剛開始的時候天天坐地鐵的時候讀幾頁,先後也就一個來月精讀了一遍。
鎬頭書有中文版,雖然版本低不過無妨,基本的東西沒怎麼變。看完中文版的,而後找一本新的英文版,新書裏全部版本變化的地方都有明確標示,你能夠對照着看一下這些點,升級工做就 OK 了。
另外,學習 Ruby 和 學習 Rails 實際上能夠同步進行,不會耽誤多少時間的。
我以爲一個智商正常,有必定自律性,有必定文化基礎的人,學習我上面提到的東西(除了 OO 設計這個大坑)按天天 4 小時計算,半年下來應該小有成效了,也就是共計 720 小時。
什麼,你說慢?拜託~720 小時打下一個能夠成長爲全棧開發工程師的基礎,這已是火速了好嗎?人啊,要有遠見!
還有一些東西沒說,好比測試,好比部署,好比命令行等等,這些都是 Rails 開發中的平常任務,沒什麼好說的。只要你用 Rails 你就不可能學不會。
Rails 是簡單,十五分鐘開發博客什麼的那都是 2006 年的往事了,到了今天它的開發效率更是使人髮指。可是綜上所述你應該明白,Rails 高效的背後是框架幫助你封裝和隱藏了一系列前沿的工具、技術、最佳實踐。你不用從頭開始重複去實現它們(因此你得到了高效率)並不表明你不須要知道它們(你得了解高效率背後的技術細節)。不然的話你永遠只能重複別人十五分鐘作出來的東西,輪到你本身的時候給你再多的十五分鐘,你不會的仍是不會。