下面是一位同学给我的来信:
非常高兴今天课程又更新了,解决了我之前一个很大的难题,我原来是想通过 form 提交数据给 controller 然后通过一个动作来处理数据,之前找了很多资料也没想通,今天看了 CRUD 的课程,突然想明白了,非常感谢您的视频。
现在有个问题,我个人算有一定的前端基础,我现在困惑就是我 RAILS 类型的书 ruby-china 推荐的基本上都看过,尤其是 《 Ruby on Rails 教程》 这本书,但是我感觉使用 rails 还是很生疏,很大构想都因为自己的不熟悉导致困惑,看了您的视频我在考虑是否是书上讲的太理论了,或者说书上内容不适合初学者完全掌握的内容过多,现在是考虑学习 railscasts 上视频,但是这些视频似乎有些旧,请问是否适合入个 Pro 的月度会员来看一些新的视频,如果要从头看起的话,看哪些视频比较好?还有能否介绍一些您学习 rails 的资源呢?万分感激!
上面提到的我的课程是 Rails 10日谈 。
我自己是 2010 年末开始学习 Rails 的,再之前做过 python 和 php ,算是有一点点 web 开发的基础。后来到 2011 年开始就差不多全职做 Web 开发了。转眼也是好几年过去了,所以今天跟你分享一下关于 Rails 学习方面我的一些想法。
Rails 确实有一些不太适合初学者的地方,比如 form_for 这样的接口,其实是很多知识点的综合,我自己花了好长时间才摆弄清楚。类似的还有好多,真正的知识点掩藏在看似简单的接口下面,但是不懂底层的知识点却又不可能保证使用接口的时候不犯错。 这个在最初的一年里时不时的就会让我怀疑自己:以 Rails 入手学习 web 开发是不是错了? Rails 是不是只有经验的人才能玩?
几年过去了,我现在的答案是:Rails 还是适合新手的。Rails 社区强大,很多常见的 web 开发的问题都会很容易找到现成的解决方案。而如果这些东西让新手自己去摸索,那可以走的弯路就多了去了。尽管学习 Rails 是有一道 Rails Wall 要努力一些才能跨过去,但是这个努力是非常值得的。 Rails 可以帮我快速的做出东西,看再多的书,如果不实际动手做出东西也是学不会 Rails 的。相反,如果你做出的东西,那么即使有的知识点你暂时不懂,那再去看书也会事半功倍的。如果明确了 Rails 是一套手艺,而不是一门知识这个概念之后,那学习 Rails 的路线我觉得就可以正确一些了。就是尽量多动手,多看老手做东西的视频,跟着一起做做。
railstutorial.org 这是一本非常详实的介绍 Rails 的书。口吻上是面向初学者的,实际不太适合新手。行文思路是以动手做东西为导向的,这个是好的,毛病出在把 git&github,测试和 rails 一块讲。我个人一直认为新手是没有必要学测试的,项目小,写测试是得不偿失的。git 技巧越早掌握越好,但是毕竟 git 是很复杂的,应该单纯拿出来学,比如可以先用 git 来控制一下自己的 html 或者是书稿。把 git 和 rails 两个都有陡峭学习曲线的东西放在一起,学起来压力会更大。
说说我自己的实际情况。最早我看这本书的时候 git 和 Linux 命令行的水平已经是老手了,也在公司写过一点单元测试,虽然是给 python 程序写。但是最初看这本书也是感觉看不动。总结一下就是,railstutorial.org 质量高,但作为新手入门,我自己反正不适应,来信中所言“书上内容不适合初学者完全掌握的内容过多”,这个我同意。
总之,不要说是一些偏理论的书,甚至是真的 learn by doing 的书,我觉得也不见得是新手入门的最好路径。不过,官方的 Guide 是一定要看的。
总体上我感觉编程还是跟炒菜画画游泳一样,是 skill 。但凡是这种东西学习起来肯定式演示好过叙述,show,don’t tell。
Railscasts.com 是我的救星。从最早我入手 Rails 学习 登陆认证,这些基础的内容开始,就感觉每次打开一个这里的视频就像找到宝贝了一样。看书绕来绕去总是不懂的内容,这里 Ryan 带着实际操作一下马上就清楚了。所以这么多年来,只要是视频覆盖到的内容,我都是先看完再说,从来的感觉都是一枪命中,不像在文字材料中那样,很容易迷路。跟 railscasts 一样过瘾的是 Jeffery Way 的视频,现在他在全职做 laracasts.com,以前他在 tutsplus 。虽然他主要是讲 php,同时我已经好几年不写 php 了,但是我也同样是花钱订阅了 laracasts.com ,很多视频还是和 Rails 道理相通的。
Codeschool.com 的视频有点偏理论了,我订阅了他们大概一年,后来感觉有很多内容料不够足,所以目前没有续费。但是 railsforzombies.com 是非常棒的,还有他们的其他的一些视频也是非常好。Codeschool 也强调 learn by doing,不过他们的意思是你看完了视频一定要跟着做一下课后作业的感觉,所以他们有很强的 in browser coding 的功能。这个我是非常不喜欢的,我想我喜欢的方式是 Learn by making 了,做一些实际能用的东西出来。
总之,我越来越清晰的感觉到 Learn by making 这条路是最高效的。就像扎克伯格说的:我就是想给我妹妹做成一个好玩的东西,先动手,不会的再去查查资料,再来写一点… 。Learn by Making 是最高效的,但是对于初学者却也是几乎不可能的,一点基础没有,怎么可能做成东西呢?所以可以考虑报班跟老师学习,例如 http://www.gotealeaf.com/ 。退而求其次的办法是看视频,不要忘了常来我的 haoduoshipin.com 串门。看完视频,然后动手做,再有不理解的内容,看书梳理一下,这个顺序我觉得是比较好的。