10 Stimmen

Wie lange wird ein Programmierer brauchen, um Ruby zu lernen?

Wie lange dauert es für einen Entwickler, Ruby zu lernen. Und eine produktive Website wie Stackoverflow zu entwickeln? Normalerweise. Wenn der Entwickler .NET Erfahrung hat, aber keine Ruby und MYSQL oder PostgreSQL Erfahrung.

17voto

Matt Briggs Punkte 39925

Ich habe etwa 3-4 Jahre lang mit .net gearbeitet, davor 3 Jahre lang mit Java, und jetzt arbeite ich in einem Rails-Shop.

Das Erlernen der grundlegenden Syntax ist denkbar einfach. Um einige der Konzepte zu verstehen, brauchen Sie viel länger. Hier eine kleine Checkliste

  • wie Instanzvariablen funktionieren und gesetzt werden (ganz anders als bei c#)
  • dass alles, was mit Methoden zu tun hat, nur Zucker für die Weitergabe von Nachrichten ist
  • was "self" an einer bestimmten Stelle Ihres Codes bedeutet (insbesondere "self" im Bereich der Klassendeklaration gegenüber dem Bereich der Methodendeklaration)
  • mixins
  • wann ein Modul, wann eine Klasse zu verwenden ist
  • wie Klassen nur eine andere Art von Objekten sind

Das sind die einfachen Dinge. Danach wollen Sie mehr von diesem Zeug lernen

  • Kennenlernen der am häufigsten verwendeten Rückrufe auf Sprachebene (wie method_missing und included)
  • sich mit Methoden beschäftigen, die Methoden definieren
  • Verstehen von Blöcken, Coroutines, Procs und wie sie alle zusammen funktionieren (das ist wahrscheinlich die Nummer eins)
  • zu verstehen, wie das Parsen von Methoden funktioniert, und die richtige Anzahl von () oder {} zu wählen, um möglichst wenig Tipparbeit zu leisten
  • sich mit der Individuation von Objekten auseinandersetzen (bei mir hat das eine Weile gedauert)
  • keine Objekte mehr für alles zu verwenden, sondern nur noch Hashes, wo es angebracht ist
  • lernen, wann Meta-Programmierung angebracht ist und wann nicht (viele, viele Rubyisten da draußen wissen das nicht so genau)
  • zu lernen, wie man gängige Probleme mit diesen neuen Werkzeugen besser lösen kann, als es mit C# möglich ist (Builder, Adapter und Strategien heben sich für mich als die radikalsten Unterschiede in Bezug auf GoF-Muster ab)

Es ist schwer zu sagen, wie lange dies dauern wird. Ich habe für die ersten Teile etwa einen Monat gebraucht, in dem ich mit Ruby gespielt und Bücher gelesen habe. Die zweite Hälfte dauerte wahrscheinlich mehr wie drei oder vier (obwohl es auch Schienen Lernen in dort war)

Was MySQL/pg betrifft, so müssen Sie nicht ganz von vorne anfangen. Das Tooling ist nicht so großartig wie SSMS (imo, der beste Teil des MS-Stacks), aber es ist genug, um zurechtzukommen. Wenn Sie Rails verwenden, ist das meiste von der Datenbank weg abstrahiert. Wenn Sie etwas in der Datenbank überprüfen müssen, starten Sie in neun von zehn Fällen ein Skript/eine Konsole und verwenden Sie einfach die ActiveRecord-API (die nicht von dieser Welt ist erstaunlich)

EDIT:

Objektindividuation bedeutet, dass jede Objektinstanz ein eigenes "Ding" ist, das auf einer Klasse basiert, aber nicht unbedingt nur diese Klasse ist. hier einige Beispiele

Zunächst erstellen wir eine Klasse

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

jetzt instanziieren wir es zweimal

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

def eine Methode, die sich nur auf 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

eine Methode umdefinieren, die aus der Klasse gezogen wird, aber nur bei 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

Der obige Code ist extrem selten zu sehen, weil ein Haufen von Methodendefinitionen inline in einer anderen Methode ist in der Regel ziemlich hässlich. Mischen in Module mit bestimmten Instanzen ist ziemlich mächtig, aber, vor allem, wenn Sie Ente Typisierung in Betracht ziehen.

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

Dies ist mehr fortgeschrittenes Zeug, und ist eines dieser Dinge, die das letzte, was Sie sollten für die Erreichung, aber es gibt Fälle, in denen dabei eine on the fly erweitern ist eine viel elegantere Lösung für ein Problem dann die Alternativen (die eine gemeinsame Warnung mit den meisten fortgeschrittenen Ruby Zeug, tun Sie es nicht auf diese Weise, weil Sie können, nur tun, wenn Sie es brauchen)

2voto

bennybdbc Punkte 1425

Dies ist eine sehr subjektive Frage, da sie von Ihrer Erfahrung und der Zeit abhängt, die Sie in die Arbeit investieren. Ich habe jedoch vor kurzem Ruby gelernt und konnte mir die Grundlagen in ein paar Tagen aneignen, indem ich das Buch Pickaxe las. Ich würde das Buch empfehlen, wenn Sie bereits Programmiererfahrung haben, oder _why's Poignant Guide to Ruby, wenn Sie noch nie programmiert haben.

Sie sollten also nach ein paar Stunden Arbeit in der Lage sein, die grundlegende Syntax zu beherrschen, aber es wird viel länger dauern, bis Sie die Sprache richtig beherrschen. Rechnen Sie mit einigen Monaten soliden Lernens, bevor Sie sich als fortgeschritten bezeichnen können.

Da Sie die Webentwicklung erwähnt haben, sind Frameworks wie Sinatra recht einfach zu bedienen. Rails ist etwas schwieriger und erfordert mehr Lernaufwand, bevor eine funktionierende Website erstellt werden kann. Nachdem man Ruby gelernt hat, würde ich sagen, dass man etwa 2 bis 3 Wochen (je nach investierter Zeit) braucht, um mit Sinatra "richtige" Websites zu erstellen. Für etwas wie StackOverflow bräuchte man viel mehr Zeit und wahrscheinlich ein Team von Entwicklern.

0voto

Brian Genisio Punkte 47135

Wenn Sie den "Rubin-Koans" lernen Sie in etwa 4 Stunden eine Menge über Ruby. Danach haben Sie die Praxis, und es wird kommen.

Es ist keine schwer zu erlernende Sprache, vor allem wenn Sie bereits mit Sprachen vertraut sind, die funktionale und objektorientierte Konzepte mischen (wie C#). Es ist eine sehr ausdrucksstarke Sprache, und Sie können mehr tun als C#, wenn Sie in Meta-Programmierung zu bekommen.

Was die Entwicklung von Websites mit Ruby betrifft, so ist das defacto-Framework Rails, mit dem eine Website wie StackOverflow sicherlich geschrieben werden kann. Dies kommt mit seiner eigenen, steileren (IMO) Lernkurve. Rails abstrahiert die Datenbank von Ihnen, so dass das Wissen eine Menge über die einzelnen Datenbanken ist nicht eine Notwendigkeit.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X