学习是循环渐进重复迭代递归轮回的。所以,不见得一定要精通 Ruby 之后再学 Rails(其实这还真的很难做到)。所以,“学一些必要的 Ruby 知识,然后就开始用 Rails,而后再反复补充 Ruby 知识”,可能是个最常见的途径。坛子上的各位高手,如果让你指导朋友,教他“Just enough ruby”,你会包含哪些内容呢?
我觉得可以看完 ruby 元编程那本就就可以了,实际上这还是分人的,如果是第一门编程语言,那就要多学点,如果是第二第三门,取决于你第一门语言带给你的除语言以外的东西。
Integers, Strings, gets puts, variable assignments, comparison, logic operators, flow control, methods, array, hash, basic iterator methods
简单地说,就是把 Ruby 作为一个 procedural programming 的语言,加上 select, map, delete_if 这些 array 里面带 block 的用法。用这些就可以开始讲基础 Rails 到自主开发第一个项目。我已经按这个做了个系列,但还没有公开。。
基础 Rails 后再讲 Ruby 的 Object Orientation 和 TDD, 在回头看 Rails 里面的 Object Oriented Design 和 测试。
最后是把 Ruby 当作一个动态语言,讲 Metaprogramming 和 Rails“去魔术化”,跳进 Rails 的源码,开发 Gem 等。
刚刚好最近一直在思考这个问题,明天上海有个 7 周 7 语言的活动,我去给大家讲 Ruby 基础,虽然不涉及 Rails,但是仅就一天的 Ruby 基础知识学习,希望能帮助来听的人对他们日后学习 rails 有所帮助。
活动地址: http://w774.51qiangzuo.com/
我希望从我的学习体验,给大家讲清楚这门语言的编程模型(即 Ruby 的纯面向对象模型),以及为了追求良好的编程体验,语言设计者在设计这门语言的良苦用心:
内容包括
如果一天能够完整的过一遍这些 Ruby 的语法特点,我觉得压力还是比较大的,但是对这些东西有了初步的概念后,在去学习 Rails 应该会更有感觉。
总的来说,如果把目标定位在掌握 Rails 本身,我认为跟学游泳一样,先下水再说。先到 Rails 里面去扑腾,边学边实践,Ruby 语言自然就掌握的七七八八了,至少这是我自己的感受,也是很多跟我一样的人的感受。
我相信,咱社区的很多人,一定走过这个弯路的。
如果你只是止步于 一般水平
, 当然这样没问题了。可是如果你真想提高,迟早还是要恶补一番的。
今天 RubyConf 的 @FredWu 讲的一句话我很认可,翻译过来就是 除非学好 Ruby, 否则不要用 Rails
仅仅就事论事的话,我不鼓励社区总是宣扬 十五分钟写一个博客
, 会点 Ruby 就开始开发 Rails
, 这对新人应该有严重的误导。
我承认有人可能会这种方式,而且也很牛,但是 Ruby 绝对不是他们的第一门语言,而且,这些人绝不会在社区问这样的问题,他们心里肯定有谱,而且往往它们的方式不可复制的。一个新人,你如果也学那样的话,那就惨了。
@zw963 我理解的是刚开始用 rails 做一个简单的东西,快速的展现出来,让新手体会到 ruby 的魅力,然后再循序渐进的学习,如果你要说学好?什么程度才算学好呢?
看你自己喽。Ruby 是真正的干货。Rails = Ruby 干货 + 大量的 (也是几乎每隔几天都在变的概念) + SQL 基础 + MVC 模型,很明显,除了第一条,后面的东西,其实都不是专属于 Ruby 的。反倒是一坨一坨的大把 Gem, 来来回回不停的出更好的,其实都是 Ruby.
不知道你有没有这样的感触,真相总是很简单的,但是往往隐藏的很深,而且有时候,只可意会不可言传。
你所谓的好处,也许是真的好处,但也许只是你看到的表面而已。
我仅仅是发生在我自己身上的例子,这样的好处你看到越多,你可能会越糊涂,最后,往往就是重新系统学习归纳下,才恍然大悟。枉费之前很多功夫,想跟 Ruby 混,迟早要还的。
BTW: 以上说法仅限于 Ruby 这种魔幻语言,其他语言,不要照搬。
#22 楼 @5long #21 楼 @virgil #20 楼 @zw963
没有人是为了学 Ruby 和 Rails 本身而学 Ruby 和 Rails,而是为了学习这个工具从而能够 开发应用。而这里面绝大部分是 web 的应用 - 我自己承认如果我的兴趣不再做 web apps 上,我不会想学 Ruby and Rails - 如果我想做数据处理我会去学 Clojure,如果我想做数据分析和统计,我会去琢磨 R,如果对人工智能感兴趣,我会去学 Prolog。所以“学习 Rails " 本身从来不是 大多数人 的目的,成为厉害的 web developer 才是。真正为了学习 Ruby 本身而成为更好程序员的,是本身基础已经很好,不需要被教,而且大半学会了就去学下一个语言了。
所以,在帮助 Ruby 和 Rails 新手的时候,要看的到他们的驱动力是 build web applications,而教学的路线也应该是顺着他们自己的目标加以推动和引导,而不是脱开 web 的教 Ruby. 自学的新手更是这样 - 自学者最脆弱的就是驱动力和信心,所以自学新手的最好路线是一条增强信心和保持自我激励的路线。简化了的语言和框架来换取快速的进步是维持强大进步感的很好方式,语言本身更高级的特性和框架更复杂的东西完全可以回头再学,这个不是走弯路。这样走的不足是新手会因为基础不够扎实而 don't know what they don't know,所以最好能背靠一个社区,一些朋友,要能有人交流。
其实不管怎样,我认为高手不可能是被教出来的,而从“中手”到高手的这个过程是不可能自己自学出来的,一定是在开源社区,团队,公司这样的环境里成长的。所以,教学或者对新手指引的目的不应该是从开始为培养一个高手准备,而是在最快的时间内最高效的推动一个新手能够达到进到上面的某个环境。
我工作主要是 Java, Ruby 纯爱好。刚开始接触 Ruby 的时候,直接上的 Rails。 感觉从环境安装,编辑器选择方面,各种碰壁。久而久之,兴趣大减。
后来通过这篇文章又重拾 ruby: 《Ruby 语言最小化》 http://thinkinginruby.group.iteye.com/group/wiki/1266-chapter-i-ruby-language-to-minimize 现在始终坚持一个理念:“不能为了学技术学技术,多数情况这会让人很痛苦”。 我的做法: 先让 Ruby 成为日常使用的脚本语言。 比如用 Ruby 处理文本,用 Ruby+Sinatra 做小的 WebService(比如做远程 cmd)。 ...
之后,等能够熟练使用 Ruby 后再去碰 Rails.
"精通 Ruby 之后再学 Rails"。感觉精通没必要,熟练就 ok.
P.S: 做了近 4 年的 java。Java 语言,各种主流框架每一个敢说精通的 = =||
#32 楼 @lvjian700 这个也用过,只有 rails 的 API, 文档的结构还是不如 javadoc 清晰,难道是我摆脱不了 java 的阴影?
除了系统安装什么的,如果是关于 ruby 语言,我一直推荐 Agile Web 那本书的附录,不过只有第二版以前有 ruby 入门,后面的版本好像把这段砍掉了
关于这句话,我没有太多体会,因为到目前为止,我一直是这么做的,你可以密 @Fredwu, 我在前几天的 RubyConf 上听他这样说过,不妨让他现身说法,讲讲为什么这样说?? 我觉得不过越抽象的东西,往往越容易陷入迷途,如果你不够了解,往往有将简单问题复杂化的趋势,因为你根本不了解核心规律。
#38 楼 @zhenjunluo 我的眼界有限,我能想到的:
这个顺序也大概跟随着项目成熟的阶段,或者是在小团队,起步项目的环境里容易学习到前面几点,而在大公司,成熟的项目里面是学习后面几点的地方。或者反过来,如果你的志向是开拓创业的方向,可以集中精力突破前面的几点,如果你的志向是做大型技术公司的骨干或 CTO, 要找机会接触学习后面的东西。