Wednesday, April 30, 2008

Ein paar ungeordnete Gedanken zu Ruby on Rails

Ich entwickele - quasi als privates "20% Projekt" - mein erstes größeres Projekt im Ruby on Rails.

Insgesamt bin ich wesentlich produktiver als ich es mit JSP/Servlets oder ASP.NET jemals war. Aber irgendwie bleibt ein ungutes Gefühl im Magen. Deshalb hier mal ein paar ungeordnete ziemlich ketzerische Gedanken zu Ruby und Ruby on Rails, die ich aber einfach mal los werden muss.

  • Ich hasse solchen Code:

    >>s = "Hallo"
    >>s2 = s
    >>[....]
    >>s << " Welt"
    >>[...]
    >>s2 == "Hallo" => false
    >>s2 == "Hallo Welt" => true

    Änderbare Stringklassen haben ihren Zweck (deshalb gibt es in Java StringBuilder zusätzlich zu java.lang.String), aber sie sollten nicht die Standardklasse für Zeichenketten sein. Die Argumentation über Korrektheit wird die Hölle, wenn jederzeit von Hinten den Zustand zerschossen werden kann. Dafür das Ruby eigentlich so funktional angehauchte Sprache ist (sein soll), ist die Stringklasse (eine der zentralsten Klassen überhaupt) eine Katastrophe. In Bezug auf Zeichenketten ist Java funktionaler als Ruby.

    Mit string_name[0..-1] eine entkoppelten Clone einer Zeichenkette machen, was man auch dringend an entsprechenden Stellen auch machen sollte, wenn man keine Lust hat den Zustand zerschossen zu bekommen (z.B. immer wenn man eine Invariante bezüglich des Inhaltes einer Zeichenkette testet)

  • In Ruby on Rails hinter Fehlern herzusuchen ist die Hölle. Such mal Fehler in dynamisch generiertem Code also Code ohne Entsprechung im Quelltext. Ich hab 3 Abende hinter einer nur manchmal auftretenden Endlosschleife in einer benannten Route von einer REST-Ressource in Rails hinterhergesucht. Grausam. (Ok, auf die Idee die Route normal, also mit :controller => x, :action => y, anzugeben hätte ich schneller kommen können). Woher die Endlosschleife kommt, habe ich bis heute nicht verstanden.
  • So richtig wohl fühle ich mich bei Ruby noch nicht. Ich verstehe die Syntax und die Möglichkeiten z.B. dynamisch Klasse zu erweitern und Code zu generieren, aber für mich ist es zu viel Magie. Ich habe noch die Befürchtung, dass die Entwicklung nur solange wirklich richtig produktiv ist wie alles klappt, aber wehe man bekommt Probleme. Ich hoffe Rails ist keine Sackgasse sobald man anspruchsvolle Dinge probiert oder man sonst auf Probleme und komische Bugs stößt.
  • Ruby on Rails macht auf mich eher dein Eindruck einer Sprache zum Schreiben von Code anstatt zum Lesen und Verstehen von Code. Zu viel implizit zu machen (Magie) macht es manchmal nicht einfacher zu verstehen.
  • Python ist einfach eher meine Sprache. Scala würde ich gerne mal für etwas richtiges Ausprobieren. Ich hab das neue Buch "Programming in Scala" von Martin Odersky gelesen und will es unbedingt mal ausprobieren.
  • Eines der Killerfeatures von Rails und warum ich noch nicht nach Pylons (Pythlon) oder Lift (Scala) gewechselt bin, ist die gute Integration von AJAX, insbesondere mit RJS. Wow. Ich fühle mich eher im Backend zu Hause, aber was ich in wirklich wenig Zeit an schicken AJAX-Sachen machen konnte, ist beeindruckend.

    Das Two-way-Matching von Url-Pfaden auf Controller (Routes) war mein erster Wow-Moment bei Rails (und ich finde es immer noch gut gelöst, wenn man mal von gewissen Endlosschleifen absieht (s.o.)). Allerdings hat Pylons das Konzept ziemlich direkt übernommen.

    Auch das fließende Zusammenspiel von Controller und View hat schon einiges für sich. Wie gesagt, ich habe viel in kurzer Zeit geschafft. Rails hat schon gute Konzepte.

  • Alle Ruby und Ruby von Rails-Bücher in der Bibo sind auf Monate verliehen und vorgemerkt.

  • Hibernate ist Rails ActiveRecord um mindestens 3 - 5 Jahre voraus. ActiveRecord ist nett und man kann gut mitarbeiten, aber diesen großen Hype um Rails ActiveRecord verstehe ich nicht. Einen Vergleich aus 2005 zwischen Hibernate und ActiveRecord ist auf ServerSide.com zu finden. Nur als Beispiel: N:N-Beziehungen können meines Wissens nach nicht transparent umgesetzt werden. Man sieht immer die Mittlerklasse/Mittlertabelle wie hier dargestellt. Es ist eine Umsetzung des Active Record Musters von Martin Fowler, deshalb muß quasi schon jede Tabelle 1:1 abgebildet werden, aber das Optimum zum Arbeiten ist für mich eine ORM, die die Objekte näher an die Domain bringt.

    Wenn man Hibernate gewöhnt ist, fühlt man sich bei ActiveRecord fast als würde man wieder auf dem blanken Metall arbeiten.

  • Hochdynamische Sprachen wie Ruby stellen viel höhere Anforderungen an die Dokumentation als statische Sprachen wie Java. Dort hat man wenigstens mal den Compiler um den größten Unfug zu entdecken. Dafür ist die Dokumentation von Rails ist in meinen Augen nicht ein Auszeichnungsmerkmal von Rails. Kann mir mal jemand z.B. die Dokumentation für die Methoden zeigen, die 1.hour usw. ermöglichen? Ich konnte es wirklich nicht finden.

Vielleicht wird der nächste Ruby on Rails Artikel hier etwas positiver, aber dieses Problem mit der benannten Route hat mich echt genervt.

No comments:

Post a Comment