Was ist Ruby?

Von der Nischen-Programmiersprache zum besten Fundament für geschäftskritische Software

Vom Programmierer für Programmierer

Was macht Ruby für leidenschaftliche Programmierer so attraktiv?

Die Beantwortung dieser Frage hat sehr viel mit dem Erfinder von Ruby zu tun. Der Japaner Yukihiro Matsumoto, genannt Matz, entwickelte die Sprache Mitte der 90er Jahren mit dem Ziel Developer Happiness. Matz erkannte, dass zufriedene Entwickler produktiver in ihrer Arbeit sind. Im Gegensatz zu anderen Sprachen, deren Code auf Ausführungs-Geschwindigkeit optimiert ist oder redundanten "Boilerplate code" erfordern, versuchte er Ruby möglichst kurz, prägnant, päzise und elegant zu gestalten. Darüberhinaus bediente er sich der besten Programmiermodelle die er finden konnte: der starken Text-Processing Funktionen von Perl, den funktionalen Aspekten von Lisp und der Objektorientierung von Smalltalk, und setzte dies in Ruby zu einer neuen Programmiersprache zusammen.

Plattformunabhängigkeit dank Interpreter

Unter welchen Umständen ist Ruby einsetzbar?

Die Programmiersprache Ruby ist eine interpretierte Skriptsprache. Daher ist kein kompilier-Vorgang erforderlich, und die Ausführung des Ruby-Codes erfolgt nicht direkt vom Prozessor, sondern von einem sogenannten Interpreter. Dieser liest den Skript-Code ein und wandelt ihn zur Laufzeit in für den Prozessor ausführbaren Code um. Somit muss für die Ausführung von Ruby-Skripten ein entsprechender Interpreter auf der ausführenden Maschine vorhanden sein. Der Nachteil der, gegenüber compilierten Programmen, etwas geringeren Ausführungsgeschwindigkeit wird durch andere Eigenschaften wieder wettgemacht. Die Sprache ist dadurch deutlich flexibler und dynamischer und erlaubt Programmier-Konstrukte wie Reflexion, dynamische Typisierung oder dynamisches Scoping. Vor allen Dingen bringt sie aber den großen Vorteil der Transportierbarkeit mit sich. Ruby-Code ist also plattformunabhängig und kann auf allen Maschinen ausgeführt werden, für die ein Ruby-Interpreter vorhanden ist. Für die heutigen populären Plattformen Windows, Mac OS X und Linux sind natürlich Ruby-Interpreter vorhanden, doch auch für einige klassische Betriebssysteme wie MS-DOS, Mac OS 9 oder IBM OS/2 existieren ausgereifte Umgebungen. Es existiert mit JRuby sogar ein Interpreter für die Java Virtuelle Maschine, die es z.B. ermöglicht Ruby und somit auch Ruby on Rails überall dort laufen zu lassen wo ein Tomcat-Container zur Verfügung steht.

Auf den Schultern von Giganten

Was macht Ruby als Grundlage für die schnelle Entwicklung geschäftskritischer Software so stark?

Nicht zuletzt durch Rubys große Beliebtheit unter leidenschaftlichen Programmierern hat sich über die vergangenen 20 Jahre ein großartiges Ökosystem entwickelt. Ruby ist Open Source und steht unter der sehr liberalen BSD-Lizenz. Das heißt Ruby ist auch in kommerziellen Projekten lizenzkostenfrei einsetzbar. Viel wichtiger aber ist, dass die meisten Programm-Bibliotheken diesem Lizenzmodell folgen und ebenfalls lizenzkostenfrei einsetzbar sind. Die Programm-Bibliotheken werden bei Ruby durch ein zentrales System verwaltet, versioniert und auffindbar gemacht. Von diesen sogenannten Ruby Gems existieren fast 100.000 die von ca. 85.000 Entwicklern gepflegt werden. Viele Programmieraufgaben können stark erleichtert werden, weil man auf das Wissen und die Erfahrung anderer Entwickler zurück greifen kann. Beispiele für solche Bibliotheken sind Adapter zur Nutzung öffentlicher Web-APIs von Google, Facebook und Co, Excel-Exporter oder gar komplette Web-Frameworks. Wir nutzen diese hochqualitative und kostenfreie Software sehr gerne und intensiv und versuchen je nach Möglichkeit und Projekten auch etwas zurück zu geben. Eines der prominentesten Gems ist das hervorragende und von uns täglich eingesetzte Rails-Framework zur Entwicklung web-basierter Software.
Testgetriebene Entwicklung ist bei Ruby-Entwicklern weit verbreitet. Das hat die ziemlich naheliegende Konsequenz, dass die Qualität der Ruby Gems sehr hoch ist.

Langjährige Softwarepflege von Ruby-Software

Weshalb eignet sich Ruby besonders für die Entwicklung und Pflege langlebiger Software?

Wartbarkeit des Codes

Wenn wir Software für Kunden entwickeln, dann machen wir das im Bewusstsein, dass die Software für viele Jahre gepflegt, weiterentwickelt und betrieben werden soll. Das bedeutet für uns, dass Code den wir schreiben, über die Wochen, Monate und Jahre, die wir uns mit einer Software beschäftigen, wieder und wieder gelesen und verstanden werden muss. Es ist für uns also viel wichtiger Code gut lesen zu können als Ihn zu schreiben. Am besten ist hierbei selbstverständlich der Code, den wir gar nicht erst schreiben müssen, weil wir auf ein Ruby Gem zurück greifen können. Der Code, den wir aber dann doch schreiben um individuelle Anforderungen abzubilden, profitiert von der starken und klaren Syntax die die Programmiersprache Ruby bietet. Einerseits liegt das am hohen Grad an Objektorientierung in der Sprache. Anders als in den meisten anderen Sprachen ist in Ruby alles (aber auch wirklich alles) ein Objekt. Programme sind hierdurch in sich konsistenter und “Refactorings” können einfacher durchgeführt werden. Andererseits erlauben es uns Techniken wie Meta-Programmierung zudem, im Vergleich zu anderen Sprachen mit wenig Code viel Funktionalität zu beschreiben. Die Möglichkeit dichten, kondensierten Code verständlich zu formulieren, ermöglicht es uns langfristig effizient wartbare Software zu schreiben.

Wartbarkeit der Projekte

Eine lebendige Sprache entwickelt sich über die Jahre weiter. Es werden Bugs beseitigt und neue Entwicklungen aus Forschung und Wirtschaft halten Einzug. Diese Prozesse sind sehr wichtig und tragen dazu bei, dass eine Sprache wie Ruby und die verwendeten Gems weiterhin die schnellste und rubusteste Software-Entwicklung ermöglicht. Doch diese Prozesse führen zum Problem der Abwärtskompatibilität und der Kompatibiliät von Gems untereinander. Hier hat das Ruby-Ökosystem im Laufe der Zeit Tools hervorgebracht, die Instandhaltung und Wartung von Ruby-Projekten, selbst über einen längeren Zeitraum, deutlich erleichtern.
Da ist zum Beispiel der RVM. Dieses Werzeug dient dazu, unterschiedliche Ruby-Umgebungen, samt Interpreter und Gems unter einem einem Betriebssystem zu verwalten. Ein weiteres Beispiel ist Bundler, zur automatischen Verwaltung und Installation von Gem-Abhängigkeiten.

Eine erwachsene Sprache zur Entwicklung innovativer Software

Mit über 20 Jahren kann man Ruby also getrost als erwachsen bezeichnen. Nicht zuletzt dank der oben beschriebenen Vorteile hat sich die Sprache in einem Umfeld durchgesetzt und etabliert, das durch weit ältere und zum Teil von Millarden-schweren Unternehmen propagierte Sprachen dominiert war. Insbesondere in der Domäne der Unternehmens-Software und Web-Entwicklung hat sich Ruby mittlerweile bei fast allen Untersuchungen unter den top 10 Sprachen etabliert. Im Gegensatz zu den meisten vorne liegenden Sprachen ist die Tendenz hier allerdings steigend. Sicherlich lassen sich auch gute Gründe für den Einsatz anderer Sprachen finden und natürlich gibt es immer noch spezielle Programmiersprachen für spezielle Aufgaben: Von systemnahen C-Code für Microcontroller bis hin zu Cocoa-GUI Code. Doch wir bei Taktsoft freuen uns jeden Tag, dass wir mit einer so eleganten und ausgereiften Sprache innovative Softwaretechnologie entwickeln dürfen.