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 高效的背后是框架帮助你封装和隐藏了一系列前沿的工具、技术、最佳实践。你不用从头开始重复去实现它们(因此你得到了高效率)并不表明你不须要知道它们(你得了解高效率背后的技术细节)。不然的话你永远只能重复别人十五分钟作出来的东西,轮到你本身的时候给你再多的十五分钟,你不会的仍是不会。