Eigentlich sind Buchrezensionen ja Brunos Domäne in diesem Blog, aber auch ich möchte hin und wieder auf lesenswertes hinweisen - auch wenn es sich dann meist um Bücher aus dem Themenfeld der Computerei handelt...
Den Anfang dieser kleinen Reihe macht das Buch "Der pragmatische Programmierer" von Andrew Hunt und David Thomas, das im Hanser-Verlag erschienen ist.
Hin und wieder gibt es Bücher, deren Lektüre mich als Programmierer ein wenig depremiert. Da steht dann, wie wichtig ein Softwareentwurf sei, dass das Implementieren danach nur noch ein Kinderspiel wäre, dass mit Unittests quasi ausgeschlossen wird, dass jemals etwas schief geht und so weiter. Mit der Realität hat das jedoch oft wenig zu tun. Hin und wieder ist es notwendig, dass ein Programm einfach "zum Laufen gebracht" wird und dass man auch mal eine Abkürzung geht. Dann ist man versucht, die ganzen tollen Ratschläge aus den unterschiedlichsten Büchern in den Wind zu schlagen.
Der "pragmatische Programmierer" schlägt dabei erfreulich aus der Reihe, weil er bei den Themen nicht allzu "akademisch" wird, sondern erfreulich nahe an der Realität bleibt. Sicher, auch dort findet sich der obligatorische Hinweis auf Unittests und Softwarearchitektur wird in fast jedem Kapitel dargestellt, allerdings sind die Tipps durchgehend realistisch und umsetzbar. So finden sich dann auch alle 70 Tipps noch einmal auf eine Doppelseite aufgeführt, so dass man sie auswendig lernen kann.
Kurz gesagt, es handelt sich um ein Buch, das eigentlich bei keinem Entwickler fehlen sollte.
Der Artikel über die Objektorientierte Programmierung nutzt als "Lehrsprache" Ruby - mittlerweile erreichte mich so manche Nachfrage, wieso ich mich ausgerechnet für diese Sprache entschieden hätte, zumal sie bislang nicht eine der von mir verwendeten "Hauptsprachen" ist.
Ich hatte mir vor dem Schreiben des Artikels einige Sprachen angesehen und lange überlegt, welche wohl gut geeignet wären. Dabei waren mir folgende Punkte besonders wichtig:
- Die Sprache muss leicht zu installieren sein, es darf keinen Konfigurationsmarathon geben.
- Die Syntax muss gut lesbar sein.
- Die Sprache muss ausgereift genug sein, um damit auch für die folgenden Artikel genug Potenzial zu haben.
Am Ende wurde es dann Ruby, weil es meiner Meinung nach die oben genannten Anforderungen erfüllt und andere Sprachen doch Komplikationen haben können. Auch das möchte ich kurz erklären.
Java
Java ist zugegebenermaßen eine meiner Lieblingssprachen. Allerdings erschien sie mir aus einigen Gründen für den Artikel ungeeignet. Der wichtigste Grund ist der, dass es nicht möglich ist, die Sprache zu erklären ohne dabei eigentlich andere Elemente der Sprache vorauszusetzen. So ist für einen Einsteiger nicht klar, warum man eine Klasse mit einer main-Methode schreiben muss und was die ganzen Parameter zu bedeuten haben. Man müsste also zunächst mal eine Menge Code schreiben und sagen: "Kümmert Euch nicht darum, das werdet ihr irgendwann mal verstehen". Das halte ich allerdings für extrem unbefriedigend.
PHP
Es hat mich gewundert, aber auch dieser Vorschlag kam ein paar Mal. Bevor ich darauf antworte möchte ich allerdings vorwegschicken, dass ich PHP nicht für ganz so schlecht halte, wie es nun davon kommen wird...
Die Installation ist viel zu Aufwändig für Einsteiger, da dazu erst mal ein Webserver benötigt wird, auch der Kommandozeilenmodus, der existiert, ist eher ein späteres Add-On, das dem eigentlichen Sinn der Sprache zuwider läuft. Damit wären wir auch schon an meinem Haupt-Kritikpunkt: Die Sprache hat kaum eine eigene Idee, sie nimmt in erster Linie Konzepte von anderen Sprachen auf. Die Syntax von C, mehr und mehr Konzepte aus Java, einiges aus Perl. All das allerdings, ohne dass es in ein "eigenes Konzept" eingebettet wird, was ich sehr schade finde. Die - gute(!) - Grundidee eine Sprache zu schreiben, die HTML-Inhalte dynamisch aufwertet, trat leider mehr und mehr in den Hintergrund. Schließlich gibt es in PHP noch eine Eigenschaft, die ich wirklich grausig finde: Type Juggling. PHP wirft je nach Kontext wild die Datentypen durcheinander und konvertiert fleißig. Das mag zunächst sehr praktisch sein, sorgt aber für Fehler und die Unterschiedlichkeit von Typen ist dem Lernenden kaum klar zu machen.
Pascal
Pascal ist eigentlich schon eine klassische Lehrsprache, sie wird immer noch gerne in der Schule verwendet und wurde sogar insbesondere für die Lehre entwickelt. Der Nachteil ist allerdings, dass schlanke Entwicklungsumgebungen schwer zu finden sind, insbesondere wenn auch unterschiedliche Plattformen wie Windows, MacOS oder Linux bedient werden sollen. Sicher, auch da gibt es möglichkeiten, aber keine die mich allzu sehr überzeugten. Ähnlich erging es mir übrigens mit Ada, auch eine sehr schöne (und Pascal ähnliche) Sprache, deren Installation mir allerdings etwas zu aufwändig erschien.
Ruby
Tja, was war es dann also, das FÜR Ruby sprach? Nur die Tatsache, dass alles andere mir nicht gefällt? Fast. In erster Linie ist Ruby überall schnell installierbar, egal ob mit einer kompletten IDE oder nicht. Dazu hat jeden Ruby-Programm erstmal einen angenehmen main-Kontext, der direkt imperative Programmierung erlaubt ohne aufwändig Klassen zu erstellen. Die Sytax ist sehr klar und meiner Meinung nach gut lesbar, was natürlich nicht heißt, dass man damit nicht unsauber programmieren könnte.