学习红宝石需要多长时间才能学习红宝石?

时间:2010-06-09 10:04:24

标签: ruby

开发人员学习ruby需要多长时间。并开发像stackoverflow这样的生产网站?一般。 如果开发人员具有.NET经验但没有ruby和MYSQL或PostgreSQL经验。

3 个答案:

答案 0 :(得分:14)

我在.net工作了大约3 - 4年,在此之前我在java工作了3年,现在我在铁路商店工作。

学习基本语法很简单。围绕一些概念包围你需要更长的时间。作为一个清单

  • 实例变量如何工作和设置(与c#非常不同)
  • 与方法相关的所有内容如何只是传递消息的糖
  • 代码的任何给定部分的自我意味着什么(尤其是类声明范围和方法声明范围中的自我)
  • 混入
  • 何时使用模块,何时使用类
  • 类如何只是一种不同的对象

这是简单的事情。在那之后,你想要学习更多这些东西

  • 了解更常用的语言级回调(如method_missing和included)
  • 围绕定义方法的方法
  • 理解块,协同程序,过程以及它们如何一起工作(这可能是第一)
  • 了解方法解析的工作原理,并选择适当数量的()或{},这将导致最少的输入
  • 将你的头部围绕物体个性化(这对我来说需要一段时间)
  • 停止使用所有物品,并在适当的地方坚持使用哈希
  • 了解元编程何时适合,何时不适合(很多很多rubyists都不太了解)
  • 学习如何以更好的方式解决这些新工具的常见问题然后可以使用C#(构建器,适配器和策略在我看来是GoF模式方面最根本的不同)

很难说这需要多长时间。对我来说,第一部分花了大约一个月玩红宝石和阅读书籍。下半场可能更像是三四个(尽管那里也有铁杆学习)

至于MySQL / pg,它不像你必须从头开始。工具没有SSMS那么好(imo,MS堆栈的最佳部分),但它足以让你顺利通过。如果使用rails,大部分数据库内容都会被抽象掉。如果你需要在数据库中查看一些内容,那么十分之九会启动一个脚本/控制台并使用ActiveRecord api(这个世界太惊人了)

编辑:

对象个性化意味着每个对象实例都是它自己的“东西”,它基于一个类,但可能不仅仅是那个类。这里有一些例子

首先,我们建立一个类

irb(main):001:0> class TestClass
irb(main):002:1> def tc
irb(main):003:2> puts 'testclass method'
irb(main):004:2> end
irb(main):005:1> end
=> nil

现在我们实例化它两次

irb(main):006:0> t1 = TestClass.new
=> #<TestClass:0x7fea78ee6f78>
irb(main):007:0> t2 = TestClass.new
=> #<TestClass:0x7fea78ed6ba0>

修改仅在t2

上的方法
irb(main):008:0> def t2.only_on_t2
irb(main):009:1> puts 'this will not be accessible anywhere else'
irb(main):010:1> end
=> nil
irb(main):011:0> t1.only_on_t2
NoMethodError: undefined method `only_on_t2' for #<TestClass:0x7fea78ee6f78>
    from (irb):11
    from :0
irb(main):012:0> t2.only_on_t2
this will not be accessible anywhere else
=> nil

重新定义从类中提取的方法,但仅限于t1

irb(main):013:0> def t1.tc
irb(main):014:1> puts 'redeffing something picked up from the class'
irb(main):015:1> end
=> nil
irb(main):016:0> t1.tc
redeffing something picked up from the class
=> nil
irb(main):017:0> t2.tc
testclass method
=> nil

上面的代码非常罕见,因为在另一种方法中嵌入一堆方法定义内容通常非常难看。尽管在模块中混合使用特定实例非常强大,尤其是考虑到鸭子类型时。

irb(main):018:0> module TestModule
irb(main):019:1> def tm
irb(main):020:2> puts 'this is where it gets interesting'
irb(main):021:2> end
irb(main):022:1> end
=> nil
irb(main):023:0> t2.extend TestModule
=> #<TestClass:0x7fea78ed6ba0>
irb(main):024:0> t2.tm
this is where it gets interesting
=> nil
irb(main):025:0> t1.tm
NoMethodError: undefined method `tm' for #<TestClass:0x7fea78ee6f78>
    from (irb):25
    from :0
irb(main):026:0> t1.is_a? TestModule
=> false
irb(main):027:0> t2.is_a? TestModule
=> true

这是更先进的东西,并且是你应该达到的最后一件事情之一,但有些情况下,做一个动态扩展是一个更优雅的解决方案,然后替代方案(这是一个常见的警告与最先进的红宝石的东西,不要这样做,因为你可以,只在你需要时这样做)

答案 1 :(得分:1)

这是一个主观的主观问题,因为它取决于你的经验和时间。但是,我最近学习了Ruby,并且在阅读了Pickaxe书的几天之后就能够学到基础知识。如果您之前有编程经验,我会推荐这本书,或者如果您以前从未编程过,那么我会推荐给Ruby的Poignant Guide。

因此,您应该能够在工作几个小时后了解一些基本语法,但是要精通这门语言需要花费更长的时间。期待几个月的扎实学习能够称自己为先进。

既然你提到了web开发,像Sinatra这样的框架很容易上手。 Rails有点难,在构建功能性网站之前需要更多的学习。因此,在学习了Ruby之后,我会说大约2到3周(取决于投入的时间)能够与Sinatra建立“适当的”网站。至于类似StackOverflow的东西,这需要更长的时间,可能还需要一组开发人员。

答案 2 :(得分:0)

如果您遵循"Ruby Koans",您将在大约4小时内学到很多关于Ruby的知识。在那之后,你有了练习,它会来。

这不是一门难学的语言,特别是如果您已经熟悉混合功能和面向对象概念的语言(如C#)。它是一种非常富有表现力的语言,当你进入元编程时,它让你做的不仅仅是C#。

至于使用Ruby开发网站,defacto框架是Rails,可以写出像StackOverflow这样的网站。这带有自己的,更陡峭的(IMO)学习曲线。 Rails确实将数据库从您身上抽象出来,因此了解特定数据库并不是必需的。