Quanto tempo levará um programador a aprender ruby? [fechado]
3 answers
- como as variáveis de instância funcionam e são definidas (muito diferentes então c#) Como tudo relacionado com os métodos é apenas açúcar para passar a mensagem.
- o que significa o eu em qualquer parte do seu código (especialmente o eu no âmbito da declaração da classe vs âmbito da declaração do método)
- mixinas
- quando usar um módulo, quando usar uma classe
- como as classes são apenas um tipo diferente de objeto
- aprender sobre os callbacks de nível de língua mais comumente usados (como method_mising e included)
- envolver a cabeça em torno de métodos que definem métodos Compreensão blocos, coroutinas, procs, e como todos eles trabalham juntos (este é provavelmente o número um)
- compreender como funciona o método de análise, e escolher a quantidade certa de () ou {} que irá resultar na Menos tipagem
- envolver a tua cabeça em torno da individuação do objecto (isto levou algum tempo para mim)
- pára de usar objectos para tudo, e cole-te às barras, se for caso disso Aprende quando a meta-programação é apropriada e quando não é. não o conheço bem. Aprender a resolver problemas comuns com estas novas ferramentas de melhores maneiras é possível com algo como C# (Construtores, adaptadores e estratégias destacam-se para mim como os mais radicalmente diferentes em termos de padrões GoF)
Editar:
Individuação do objecto significa que cada objecto instância é sua própria "coisa", que é baseada em uma classe, mas pode não ser apenas essa classe. Aqui estão alguns exemplos Primeiro, construímos uma classe.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
Agora vamos instanciá-lo duas vezes.
irb(main):006:0> t1 = TestClass.new
=> #<TestClass:0x7fea78ee6f78>
irb(main):007:0> t2 = TestClass.new
=> #<TestClass:0x7fea78ed6ba0>
Def a method that is only on 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
Redefinir um método que é puxado para dentro da classe, mas apenas em 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
O código acima é extremamente raro de ver, porque ter um monte de definição de método em linha em outro método é geralmente muito feio. A mistura em módulos com instâncias específicas é muito poderosa, porém, especialmente quando você leva a datilografia de pato em conta.
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
Esta é mais avançados, e é uma daquelas coisas que é a última coisa que você deve estar para chegar, mas há casos em que fazer um a voar estender é muito mais solução elegante para um problema, em seguida, as alternativas (o que é comum um aviso com mais avançado ruby coisas, não fazê-lo desta maneira porque você pode, só o fazemos quando necessário)
Então, você deve ser capaz de saber alguma sintaxe básica após algumas horas de trabalho, mas vai levar muito mais tempo para ser proficiente com a língua. Espere alguns meses de aprendizagem sólida para ser capaz de se chamar avançado.
Desde que você mencionou o desenvolvimento da web, frameworks como Sinatra são muito fáceis de começar. Rails é um pouco mais difícil, e requer mais aprendizagem antes que um site funcional poderia ser construído. Então, depois de ter aprendido Ruby em si, eu diria cerca de 2 a 3 semanas (dependendo do tempo investido) para ser capaz de construir sites 'adequados' com Sinatra. Quanto a algo como StackOverflow, isso levaria muito mais tempo, e provavelmente uma equipe de desenvolvedores.
Se seguires o "Ruby Koans", vais aprender muito sobre a Ruby em cerca de 4 horas. Depois disso, você tem a prática, e ela virá.
Não é uma língua difícil de aprender, especialmente se você já está familiarizado com linguagens que misturam conceitos funcionais e orientados a objetos (como C#). É uma linguagem muito expressiva, e permite que você faça mais do que C# quando você entra em meta-programação.
Quanto ao desenvolvimento de sítios web com a Ruby, o "defacto framework" é Rails, que um site como StackOverflow pode certamente ser escrito. Isto vem com a sua própria curva de aprendizagem mais íngreme (IMO). Rails abstrata a base de dados longe de você, então saber muito sobre as bases de dados em particular não é uma necessidade.