Wider die Furcht vor Open Source
Artikel erschienen in Swiss IT Magazine 2006/08
Um das Ruby-Framework Ruby on Rails (RoR) ist im letzten Jahr ein ziemlich grosser Hype entstanden. Dies, da es nicht nur von Haus aus auf den Einsatz von AJAX getrimmt ist - und entsprechend auch vom AJAX-Hype profitieren kann -, sondern auch eine sehr schnelle und damit kostengünstige Entwicklung von Webapplikationen erlaubt. Insbesondere Java-Entwickler sind von RoR begeistert und sehen es als Java-«Killer» im Webbereich an.
Erfahrungen in Projekten, Workshops und Vorträgen haben gezeigt, dass Software-Entwickler relativ schnell begeistert und von Rails überzeugt sind. Projektleiter und Manager hingegen stellen sich ganz andere Fragen in bezug auf den Einsatz von Rails:
- Wer setzt das schon ein?
- Wie integriere ich meine vorhandenen Systeme?
- Wo finde ich qualifizierte Entwickler?
- Was sind die Vorteile von RoR?
- Ist RoR nur ein Hype?
Diesen Fragen richtig zu begegnen, ist das, was in erster Linie zählt. Denn die Entscheider bestimmen letzten Endes, ob auf eine unbekannte oder bewährte Technologie gesetzt wird. Dies, da Software-Entwicklung nicht nur Spass machen soll, sondern in erster Linie das Erzeugen von «Business Value» zum Ziel hat. Entsprechend geht dieser Beitrag speziell auf die Fragen von Entscheidungsträgern hinsichtlich des Einsatzes von Ruby on Rails ein.
Lassen sich mit Ruby on Rails auch grosse und ernsthafte Systeme entwickeln? Skaliert die Anwendung bei steigender Last? Dies sind immer wieder geäusserte Fragen.
Rails-Anwendungen werden hinsichtlich einfacher horizontaler Skalierbarkeit entwickelt. Konkret heisst das: Wenn bei der Entwicklung einige einfache Regeln befolgt werden, ist es später im laufenden Betrieb kein Problem, die Anwendung um einen oder mehrere Server aufzustocken und so für den Umgang mit steigender Last auszulegen.
Beispiele für grosse Rails-basierte Systeme gibt es mittlerweile viele (siehe www.rubyonrails.org/applications). Anwendungen wie «Basecamp» oder «The Robot Co-op» mit 2,5 Millionen Requests am Tag sprechen für sich.
Vielleicht ist eine höhere Investition in Hardware notwendig als bei einem vergleichbaren System in Java. Vielleicht, aber die Anschaffung eines oder mehrerer zusätzlicher Server wird durch die deutliche Einsparung in den Personalkosten bezüglich der Entwicklung und Wartung des Systems mehr als wettgemacht.
Neue Anwendungen werden heutzutage so gut wie nie auf der grünen Wiese entwickelt, sondern immer in eine bestehende EDV-Infrastruktur integriert. Eine der entscheidendsten Fragen beim Einsatz einer neuen Technologie oder Programmiersprache ist somit die Frage nach der Integrierbarkeit dieser Technologie in die bereits vorhandene Systemlandschaft.
Welche Schnittstellen existieren zu den vorhandenen Systemen? Ist die Kommunikation wirklich nur über den Einsatz einer API möglich oder reicht unter Umständen schon die Datenbank als Schnittstelle zwischen zwei Systemen aus? Ein Beispiel aus der Praxis: Eine J2EE-basierte Anwendung soll um eine Komponente zur Pflege bestimmter Datenbanktabellen erweitert werden, die zuvor manuell, das heisst über SQL-Skripte, gepflegt wurde. In diesem speziellen Fall hat sich der Kunde entschieden, die zusätzliche Komponente Rails-basiert zu entwickeln, und damit gute Erfahrung gemacht.
Geht die Kommunikation vorhandener Systeme mit einer neu zu entwickelnden Rails-Anwendung über die Datenbank als gemeinsame Schnittstelle hinaus, lohnt sich ein Blick auf Standardtechnologien wie z.B. Web-Services. Rails-Anwendungen können sowohl als Web-Services-Anbieter als auch als Web-Service-Clients fungieren, woraus eine Vielzahl zusätzlicher Kommunikationsoptionen resultiert. Dies kann sich insbesondere dann lohnen, wenn man für verschiedene Aufgaben die jeweils optimale Technologie nutzen will (z.B. C für leistungsfähige Server-Prozesse, RoR für die zugehörigen Web-Interfaces) und eine standardisierte Inter-Komponenten-Kommunikation benötigt.
Letztlich besteht auch die Möglichkeit, die C-API von Ruby zu nutzen. Konkret heisst dies: Angenommen, das anzubindende System stellt eine C-API zur Verfügung. Die Programmierung von Ruby-Erweiterungen in C ist so einfach, dass es durchaus eine realistische Option ist, für die vorhandene C-API einen Ruby-Wrapper zu schreiben. Dieser kann dann, wie alle anderen Ruby-Klassen auch, in beliebigen Rails-Anwendungen genutzt werden.
Zukünftige Entwicklungen wie JRuby geben Anlass zu der berechtigten Hoffnung, dass Rails-Anwendungen in Zukunft auf einer JVM eingesetzt werden können, wodurch die gesamte Java-Welt auch in Rails-Applikationen zur Verfügung steht.
Sind alle Integrationsfragen beantwortet, so stellt sich als nächstes die Frage, wer denn eigentlich die Rails-Anwendung entwickeln soll.
In der Praxis ist dieses Problem gar nicht so gross, wie es scheint, zumindest dann nicht, wenn Sie in Ihrem Unternehmen Software-Entwickler beschäftigen, die Erfahrungen mit der Entwicklung von Web-Applikationen haben. Die Einarbeitung in eine neue Programmiersprache sollte für jeden gut ausgebildeten Software-Entwickler innerhalb einer angemessenen Zeit möglich sein. Erfahrungen zeigen, dass Java/J2EE-Entwickler in weniger als zwei Wochen in der Lage sind, Rails produktiv und richtig einzusetzen.
Einige Teamleiter gehen den Weg, ihren Entwicklern entsprechende Bücher zu kaufen, ihnen zwei Wochen Zeit zu lassen und ein Beispielprojekt zu entwickeln, bevor sie ihr erstes «richtiges» Projekt in Angriff nehmen. Ein Beispiel hierfür ist die Anwendung www.dontbin.it, die von einer Londoner Firma als Übungsprojekt durchgeführt wurde, um die Entwickler auf ein anstehendes Rails-Projekt vorzubereiten.
Andere Unternehmen entscheiden sich für einen Workshop, um einen allgemeinen oder detaillierten Eindruck von Rails zu erhalten. Entwickler erhalten so die Möglichkeit, sich unter Laborbedingungen mit der neuen Technologie vertraut zu machen. Eine weitere Variante ist der Start in ein neues Rails-Projekt gemeinsam mit einem Coach, der das Projekt die ersten Wochen begleitet und auf die Schiene setzt.
Und ausserdem: Die Zahl der Rails-Entwickler nimmt ständig zu. Viele ehemalige Java-Entwickler haben das Potential dieser neuen Technologie erkannt und wollen ihr neu erworbenes Wissen in der Praxis anwenden.
Bei der Entwicklung mit Ruby wird genau wie in anderen Sprachen nicht alles neu entwickelt, sondern für bestimmte Anforderungen auf spezielle Bibliotheken zurückgegriffen. Entscheidend beim Einsatz einer neuen Technologie ist somit die Verfügbarkeit dieser für das jeweilige Projekt benötigten Bibliotheken für die Umsetzung bestimmter Anforderungen. Hier ist Java auf Grund seiner Plattform, seiner Standardisierung und der Unterstützung durch viele Firmen klar im Vorteil. Auf der anderen Seite sind für die Entwicklung mit Rails keine besondere Tools, IDEs oder komplexe APIs notwendig. Ein guter Editor reicht aus.
Aufgrund der steigenden Popularität von Ruby und Rails steigt auch die Zahl der Open-Source-Projekte. Es ist davon auszugehen, dass sich mehr und mehr kommerzielle Softwarehäuser für die Portierung ihrer Produkte nach Ruby entscheiden werden, da durch die ständig steigende Zahl an Rails-Anwendungen die Nachfrage nach diesen Produkten zunehmend steigt.
Die eigentliche Produktentwicklung macht nur gut 10 Prozent der Kosten des gesamten Lebenszyklus eines Softwaresystems aus. Ein Grossteil der Kosten wird somit von der Betriebs- und Wartungsphase verschlungen, die erst nach der eigentlichen Entwicklung beginnt. Hier gilt es zu beachten, dass mit einer neuen Technologie auch neue Server ins Unternehmen geholt werden, die überwacht, gepflegt und gesichert werden müssen.
In bezug auf die Wartbarkeit von Rails-Anwendungen gibt es sehr gute Erfahrungen. Aufgrund der sauberen Architektur und der guten Testbarkeit sind Rails-Anwendungen leicht erweiterbar und damit auf eine lange Lebenszeit ausgelegt.
Mit Capistrano steht ausserdem ein hervorragendes Deployment-Tool zur Verfügung, das die Verteilung von Rails-Anwendungen zu 100 Prozent automatisiert: Auschecken der neusten Version aus dem RCS, Verteilung der Sourcen auf die beteiligten Server sowie Neustart der Web- und Datenbankserver. Deployment wird so zum Kinderspiel.
Eine häufige Frage ist auch: «Welche (namhaften) Unternehmen setzen Rails ein?» Je weniger Firmen genannt werden können, desto mehr sinkt das Vertrauen in Rails, frei nach dem Motto: «Wenn es kaum Firmen gibt, kann wohl auch nichts dran sein.»
Es ist aber nach so kurzer Zeit auch nicht zu erwarten, dass jeder bereits die Möglichkeiten von Rails kennt, es einsetzt und dies sogar offiziell kundtut. Die Tatsache, dass andere noch oder wieder mit PHP oder Java beginnen und man selbst auf Rails setzt, kann aber auch den entscheidenden Wettbewerbsvorteil darstellen.
Die Antwort auf die Frage, warum man Rails einsetzen soll, lautet auf den Punkt gebracht: Produktivität, Zeit, Geld.
Der Produktivitätszuwachs beim Einsatz von Rails ist enorm und resultiert in einen entscheidenden Wettbewerbsvorteil bei der Entwicklung von Web-Applikationen. Produktivitätszuwachs bedeutet reduzierte «Time to Market» und damit einen schnelleren Return on Investment. Der eigentliche Prozess der Software-Entwicklung wird preisgünstiger, und aufgrund verkürzter Projektlaufzeiten kann früher mit der Software Geld verdient werden.
Ralf Wirdemann und Thomas Baustert (info@b-simple.de) sind freiberufliche Software-Entwickler und Coaches aus Hamburg. Sie sind Autoren des Buches «Rapid Web Development mit Ruby on Rails» und führen Trainings und Workshops zu diesem Thema durch.