如何学习ruby?Ruby学习技巧分享

怎么学习ruby?在学习ruby之前需要掌握哪些知识呢?这是很多想要学习ruby朋友的心声,我不具体给出答案,下面就给大家讲讲一位前辈学习ruby(http://www.maiziedu.com/course/ruby/)的学习历程吧。在大学时学的电子专业,在学校里学过C/汇编,在学习ruby前期,和大多数的Rubyist一样,我也是从学习Rails开始去了解Ruby的,在学习Rails之前,我正在使用JavaEE的SSH框架(struts+spring+hibernate), 当时也算是Java入门的阶段,并没有做的多深,各种XML配置,搞的我眼花缭乱,对Java顿时有点绝望:是不是我以后的编程生涯就和XML打交道了呢? Rails的约定大于配置,DRY(Don‘t repeat yourself)等概念,深深的吸引了我,使用Rails,再也不用去烦那一大堆XML配置了,我只要专心写我的Ruby代码就可以了,这才是快乐的程序员嘛。呵呵,不知道有多少人和我的经历类似呢? 我想应该也有不少人吧。

说到Rubyist, 我曾经也不理解,为什么叫Rubyist,而不叫Rubyer或者其他? 后来我才明白了, Rubyist,有点Artist的意味。Ruby语言算是编程领域里最具艺术气息的了,所以我们把Ruby程序员叫做Rubyist。但实际上,很多人离真正的Rubyist还很远,包括我自己啦。

懵懂:

正是经历过这个阶段,所以我很了解现在的初学者的心情:「不是15分钟开发一个blog吗? Rails很好学,很好用,很好玩,我要快速精通它」。 很多Rubyist的入门书就是「Agile web development with Rails」和 「Programming Ruby」, 基本上,如果通读这两本书并练习以后,基本就可以上手了。当然现在也涌现出很多学习Rails的优秀书籍,比如 「Ruby on Rails Tutorial」和最近kickstarter上面众筹的「Learn Ruby on Rails」,还有官方的「Ruby on Rails Guides」, 在我开始学习的时候,官方的文档可没有这么好。

有这么丰富的资料,我们对于Rails的入门,基本没有什么困难了。 但是你有没有发现,你已经陷入了一个巨大的细节里面去了。我所说的这个巨大的细节,就是指Rails。

我们最初学习Ruby的目标是掌握Rails, 所以潜意识里,Ruby的学习,放到了第二位, 而Rails成为了第一位的学习目标。在你通读各种参考书入门之后,也许你可以开发一个简单的web站点,也可以把自己的Rails技能运用于一般的工作中,但是你会发现,你终会达到一个学习的瓶颈。 Rails社区的一个好处,就是有很多的Gem,各种各有的Gem让你快速的开发,但是你真正的了解这些Gem吗?开发,并不是一个简单的功能堆砌。

当你听说现在流行Cucumber,所以对自己该选用Cucumber或者是Rspec感到迷惑了起来,MiniTest的崛起,又让你感到更迷惑了,我该用哪个?

当你听说Rails4默认了线程安全,那么你是否知道什么是线程安全?Rails3不也是线程安全的吗?默认的意义何在?

当你听说sidekiq比resque更省内存的时候,就马上想去尝试改用sidekiq,有没有想过,为什么?sidekiq比resque写的好?

。。。

等等

这个时候,我们仅停在了使用阶段!因为你已经陷入了Rails的细节里,你忽视了Ruby。

所以,此时,你仅仅是个Ruby码农,离Rubyist,还差很远。

深入

如你所见,你所用到的一切,都是Ruby构建起来的:Rails、Sinatra、Cucumber、RSpec、Sidekiq、Resque等。

Ruby + Web开发知识 + 架构思想 -> Rails/Sinatra

Ruby + TDD/BDD等敏捷实践 -> Cucumber/Rspec

Ruby + 多线程/多进程并发 -> Sidekiq/Resque

Ruby + Actor并发模型 -> Celluloid

Ruby + Socket+Reactor -> eventmachine/Goliath

...

等等等

所以,你要想深入掌握上述各种工具,你就需要系统的去学习Ruby,并且在学习Ruby的过程中,去学习相关的领域知识,这是一个良性的循环过程。

Ruby是一个面向对象并同时兼有函数式编程特性的神奇语言,所以在你随着Ruby的深入学习,你同时可以深入学习面向对象和函数式编程两种范式的特性。

所以,当我们说深入学习Ruby的时候,不是在说Ruby的语法该如何用,而是在说:

1 Ruby背后的设计哲学及其底层实现。

2 Ruby与系统(包括其他领域,比如web)的交互

3 Ruby如何根据它的面向对象和函数式编程特性、及其元编程能力去构建漂亮的DSL

达到这个阶段,你可能脱离了Ruby码农的层次,达到一个新的境界了,离Rubyist已经很接近了。

哲学

如果说算法是一个合格的程序员必须掌握的,那么哲学,也是一个合格的程序员必须要领悟的。

我不是一个哲学大师,请不要误会。

哲学是我们学习和解决问题的灵魂,我只在这里分享几条我用到的哲学经验:

1. 重是轻的根本,静是躁的主宰.

Ruby,只有基础扎实了,才能用的灵活。

当我们碰到问题的时候,着急没用,静下心来思考,顺藤摸瓜,找出问题。

当我们学习的时候,不要急于求成,静下心来学习,慢就是快。

2. 存在即合理。

对于这句话,我的理解就是, 当程序出现了诡异的bug,或者,当你的项目在你机器上能用,而到服务器上不能用的时候,你应该想想,这个问题并不诡异, 程序是按你的指令执行的,肯定是你哪里出问题了,而且可能是个严重的问题!请认真对待这个问题!

学习的时候,碰到一个概念,应该多想想这个概念产生的合理性,比如TDD/BDD, 有了TDD为什么还会有BDD?

3. 哲学经典三问: 你从哪里来?你是谁? 你要到哪里去?

当我们学习新技术的时候,我们就该问了:

这技术是基于什么情形产生的,或者是这技术是为了解决什么问题而出现的? (你从哪里来?)

这技术是如何实现的?这项技术如何去使用? (你是谁?)

这技术要解决的问题是永久性的吗?未来的发展会如何?和这种技术类似的有哪些技术,它们的发展如何?(你要到哪里去?)

总结:

本文,与其说是「如何学习Ruby」,不如就说是「如何学习」,因为以上方法论,适用于你学习任何东西。

时间: 2024-12-20 19:03:19

如何学习ruby?Ruby学习技巧分享的相关文章

Ruby stdlib 学习 —— OptionParser

http://ruby-doc.org/stdlib-2.3.3/libdoc/optparse/rdoc/OptionParser.html#method-c-new 阅读lib的文档,做个笔记.OptionParser 这个类用于,在写一些command line工具的时候,设置命令行参数选项.GetoptLong有类似的功能,不过文中建议使用OptionParser. 一.例:简单示例 (主要是入个门,顺便演示了下不带参数的选项该怎么处理,像-v, -f 那种)) 1 #直接存成test.

redis ruby客户端学习( 二)

接上一篇redis ruby客户端学习( 二) 对于redis的五种数据类型:字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets),上一篇介绍了字符串. 1,哈希(Map) hset.设置 key 指定的哈希集中指定字段的值.如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联.如果字段在哈希集中存在,它将被重写. require "redis" r = Redis.new r.hset 'my_h

redis ruby客户端学习( 三)

接上一篇redis ruby客户端学习( 二) 对于redis的五种数据类型:字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets),上一篇介绍了哈希和列表. 一,集合 mset.添加一个或者多个元素到集合(set)里 require "redis" r = Redis.new r.mset 'my_set', 'value1' scard.返回集合存储的key的基数 (集合元素的数量). r.scard 'my_set

《七周七语言》学习笔记——Ruby——第一天:找个保姆

感觉学了东西很快就会忘记,不会留下什么,趁这次看<七周七语言>,把其中觉得有用的东西记录下来,方便以后自己查阅,这篇应该就是记录的开始了. Ruby是一门面向对象的.解释型的.动态类型的脚本语言.面向对象,说明了这门语言具有封装.继承.多态这些特性:解释型,意味着它由解释器而不是编译器来执行:动态类型,即类型是在运行时绑定而非编译时绑定:脚本语言,则说明了它很短!易上手!并且只在调用的时候解释执行. 编程模型:一切皆对象,从一个数到bool值,都被定义为对象,都有自己的方法 判断结构:块形式和

牛腩新闻公布系统--学习Web的小技巧汇总

2014年11月10日,是个难忘的日子.这一天.小编的BS学习開始了.BS的开头,从牛腩新闻公布系统開始.之前学习的内容都是CS方面的知识,软考过后.開始学习BS,接触BS有几天的时间了,跟着牛腩老师敲着牛腩新闻公布系统,感觉棒棒哒,看了前面二十集.发现牛腩老师真的是把党的思想贯彻的淋漓尽致,跟着牛腩老师一起学习,发现了非常多让我怦然心动的小知识,每次都让我的小宇宙爆发,如今就把这些小技巧分享给小编的小伙伴.该博文小编主要解说三个方面的知识.第一:怎样让代码整齐美观,第二:代码的凝视,第三:连接

快速学习Android开发的技巧

因为项目需要,8月中旬开始决定做安卓的程序,所以马上就开始学习安卓方面的开发知识,把最近的学习实践经历和大家分享分享.不要一开始就下载一大堆资料,视频,然后就不知道做什么了,要给自己定个目标,我要做什么?我怎么达到目标? 我不懂java,但是懂C#和C++,所以我没主张去单独学习java语言,如果你是个最最初的新手,没啥语言基础,那你必须先看看java语言,不要很详细看,因为学习Android中,需要不断的去学习,推荐多看看e良师益友网里的Android应用开发视频教程.此外,你也是在学习jav

Linux该如何学习呢?Linux学习分享!

从目前情况来说,Linux系统是应用最为广泛的服务器操作系统,随着普及性的增高,越来越多的人想要学习Linux,不过学习并不是一件容易的事情,讲究合适的方法和技巧.那么Linux应该怎么学习?为大家分享一下学习技巧. 1.想要学习好Linux就要将它当成兴趣,兴趣才是最好的老师.良好的兴趣才是学习成功好的开始,想要学习好首先就要足够喜欢它.我们要了解市场上Linux的发展势头,了解Linux的相关情况,相信学习好Linux一定要是非常不错的选择. 2.学习合适的Linux发行版本,在开始学习Li

[学习笔记]iphone学习小技巧

1. 版本控制 -- 是否响应某个方法 .查看当前系统版本. eg: [self respondsToSelector:@Selector(presentModalViewController:animated:)]//Yes:表示响应这个方法 [[UIDevice currentDevice].systemVersion floatValue] < 7.0 //判断当前系统是否小于7.0 2. 模态视图动画设置 eg: ModalViewController *modalVC = [[Moda

CSS学习笔记总结和技巧

跟叶老师说项目,他叫我写一个静态首页,看起来挺简单的,但是下手才发现在真的不会怎么下手啊,什么模型啊模块啊都不懂,写毛线啊!! 如图:页面下拉还有侧栏,中间内容等. 可是答应跟老师做了,不能怂啊,于是硬着头皮,花两三天看在慕课网上学习Bootstrap(讲得挺好的,建议大白去看一下),其实我刚看完不久,里面很多东西其实作者都总结得很不错,还有演示. 收获很多,打算再看一下HTML的div+css布局,花一两天时间就可以写完那个界面.就是这么自信,哈哈哈~ 不逼自己一把,你永远不知道自己有多优秀.