Zum Inhalt

Buch-Rezension zu "Sieben Wochen, sieben Sprachen"

"7 Wochen 7 Sprachen"

Sieben Wochen, sieben Sprachen – Verstehen Sie die modernen Sprachkonzepte“ von Bruce A. Tate erschien in der deutschen Ausgabe im Juni 2011. Wer sich bisher nur mit objektorientierter Programmierung beschäftigt hat bekommt mit diesem Buch eine Übersicht über andere moderne Konzepte. Wie man schnell merkt bedingt ein modernes Konzept nicht zwingend eine neue Sprache.

[Hinweis: Ich habe dieses Buch über die .Net User Group Bern erhalten, die am User Group Programm von O’Reilly teilnimmt. Wie immer wenn ich über Bücher blogge schreibe ich was mir daran gefällt und was nicht. Dies mache ich unabhängig davon ob ich ein Rezensionsexemplar bekomme oder das Buch selber kaufe.]

Aufbau des Buches

Jede Sprache wird in 3 Lektionen (jeweils ein Tag) erklärt. Am ersten Tag geht es um die grundlegenden Dinge und es gibt ein Interview mit einem Poweruser oder dem Erfinder der Sprache selbst. Dabei werden die Besonderheiten der Sprache hervorgeheben und gezeigt wofür sie eingesetzt werden kann. Am Ende jedes Tages gibt es einige „Hausaufgaben“ zum Selbststudium. Die Lösungen wurden leider entgegen dem Hinweis im Buch nicht veröffentlicht. Googelt man ein wenig stösst man schnell einmal aufs Blog von Ben Nadel der die einzelnen Lösungen schön kommentiert veröffentlicht hat.

Am zweiten und dritten Tag wird tiefer in die Eigenheiten der Sprache vorgedrungen. Als Abschluss gibt es eine Zusammenfassung der Sprache und die Vor- und Nachteile werden hervorgehoben. Am Ende des Buches werden nochmals die wichtigsten Eigenheiten jeder Sprache zusammengefasst und eine Entscheidungshilfe angeboten.

Die 7 Sprachen

Ruby
Die Reise beginnt mit Ruby, einer objektorientierten Programmiersprache. Die meisten Leser des Buches werden wohl mit dem Konzept der Objektorientierung vertraut sein und so auf dem bestehenden Wissen aufbauen können. Da Ruby eine Scriptsprache ist gibt es für Java- oder C# Programmierer auch hier schon etliche neue Konzepte zu lernen. Duck-Typing eines davon, bei dem es darum geht, das alles was wie eine Ente läuft und wie eine Ente schnattert auch eine Ente ist. Ein Typ hängt nicht mehr so sehr davon ab von welchem Objekt er abgeleitet wurde als vielmehr was für Funktionalitäten er bereitstellt.

Io
Io ist eine Prototypensprache (wie JavaScript). Dies bedeutet dass jedes Objekt ein Klon eines anderen Objekts ist. Io ist sehr minimalistisch und kann dank seinem sehr kleinen Speicherverbrauch in eingebetteten Systemen verwendet werden. Nachrichten und Slots sind 2 Konzepte die man für Io verstehen muss und einem auch in den weiteren Kapiteln begegnen.

Prolog
Prolog ist eine deklarative Sprache bei der man Fakten und Regeln definiert und die Lösung des Problems dem Computer überlässt. Als Beispiel kann man ein Sudoku nur durch die Definition der Regeln lösen lassen. Prolog ist als Vertreter der Logikprogrammierung nicht mit den anderen Sprachen im Buch vergleichbar. Hier geht es um eine ganz andere Art Probleme anzugehen. Ich fand diesen Ausflug sehr gelungen und es gibt einem etliche neue Ideen bevor es mit den funktionalen Programmiersprachen losgeht.

Scala
Scala ist eine Hybridsprache die versucht objektorientierte und funktionale Konzepte zu vereinen. Bei der Objektorientierung gibt es eine enge Integration mit Java. Scala läuft in der Java Virtual Machine (JVM), ist beim Syntax nahe an Java und kann auch Java-Bibliotheken nutzen. Man kann mit Scala langsam in die funktionale Programmierung einsteigen und dabei immer noch auf die Objektorientierung zurückgreifen.

Erlang
Erlang („Ericsson Language“) ist eine Sprache zur Parallelprogrammierung. Erlang ist die Sprache hinter CouchDB und sonst vor allem in Telekom-Anwendungen weit verbreitet. Dies vor allem wegen der hohen Zuverlässigkeit und der Möglichkeit einzelne Module im Betrieb auszutauschen. Tate zeigt in diesem Kapitel schön auf wie einzelne Konzepte von Prolog in Erlang geflossen sind. Man wird noch des Öfteren sehen wie Sprachen die gleichen Konzepte nutzen oder sich gegenseitig beeinflussen.

Clojure
Clojure ist ein Lisp-Dialekt der auf der JVM läuft. Die vielen Klammern sind Lisp-Typisch und verwirren wohl die meisten Leute erst einmal. Das Verschachteln und binden macht die ganze Sache nicht einfacher und ist sehr gewöhnungsbedürftig. Mit Transactional Memory nutzt das sonst auf Funktionen ohne Nebenwirkungen konzentrierte Clojure eine interessante Möglichkeit um Daten dennoch verändern zu können. Wie bei einer Datenbank gibt es Transaktionen die die Integrität der Daten schützen.

Haskell
Als Abschluss kommt Haskell als reine funktionale Sprache. Haskell zwingt einem sich voll auf das Konzept der funktionalen Programmierung einzulassen und lässt einem keine Hintertür zur Umgehung offen. Man trifft viele Konzepte der vorgehenden funktionalen Sprachen wieder an, aber halt ohne deren Kompromisse.

Gutes Konzept

Es ist ein sehr ambitioniertes Ziel 7 Programmiersprachen in einem Buch unterzubringen. Tate gelingt es sehr gut die wichtigsten Punkte einer Sprache aufzuzeigen. Mit seiner Auswahl kann man oft auf den im vorgehenden Kapitel erstmals vorgestellten Konzepten aufbauen und sieht was damit alles möglich wird.

Man darf allerdings nicht erwarten das man nach dem Durcharbeiten die einzelnen Sprachen auch Beherrscht. Tate vermittelt die Grundlagen und lässt einem in den Hausaufgaben die wichtigsten Anlaufstellen für die jeweilige Sprache suchen. Dieses Wissen ist ein guter Ausgangspunkt um sich intensiver mit der Sprache zu befassen.

Gelungene Übersetzung

Die Übersetzung aus dem englischen ist meistens sehr gut. Ich konnte dem Text problemlos folgen ohne mir zu überlegen was das wohl in Englisch bedeuten könnte. Formulierungen wie „Syntaktischer Zucker“ sind zwar Gewöhnungsbedürftig, aber es ist klar um was es geht und einen besseren Begriff würde mir auch nicht einfallen.

Hin und wieder hat man die Übersetzung aber auch ein wenig Übertrieben. Wenn in einem Beispiel ein Wert der Variabel „Eins“ zugewiesen und zwei Zeilen später auf „One“ zugegriffen wird fördert dies nicht gerade das Verständnis. In die gleiche Richtung geht es wenn im Beispiel „Pirates of the Caribbean“ steht und der beschreibende Text von „Fluch der Karibik“ spricht. So etwas hätte die Qualitätskontrolle gerne herausfiltern dürfen.

Einige mühsame Fehler

Beim Kapitel zu Scala erschien es mir mehrmals als ob sich einige Formatierungsanweisungen in den Text geschlichen hätten. Diese stören den Lesefluss und macht es nicht einfacher ein neues Konzept zu verstehen.

Durchs ganze Buch hindurch wird bei Rekursion immer wieder die Fibonacci-Folge verwendet. Es wäre schön wenn man bemerkt hätte das für Fib(0) = 0 gilt. Dann würden auch die Beispiele bei Haskell die gleichen Resultate liefern wie die anderen Fibonacci-Implementierungen.

Zu sehr auf Java fixiert

Für meinen Geschmack legt Tate zu viel Wert auf die Kompatibilität zur JVM. Ich verstehe sehr wohl dass man so viele der bekannten Bibliotheken weiter nutzen kann. Bei einigen Situationen ist es mir aber schleierhaft, wie man bei einer solchen Ausgangslage auf die JVM will. Als Beispiel bei der Schlussbesprechung von Erlang:

Die JVM hat so ihre Altlasten, wie etwa das Prozess- und Threading-Modell, das für Erlangs Bedürfnisse völlig ungeeignet ist. Doch die JVM zu nutzen, hat auch seine Vorteile, etwa die Fülle an Java Bibliotheken und Hundertausende potentieller Server, die man nutzen könnte.

Wenn eine Sprache dermassen Wert auf Parallelisierung legt wie Erlang ist ein ungeeignetes Threading-Modell ein Killerkriterium. Punkt. Da gibt’s von mir aus nichts was das noch retten kann.

Auch wenn ich mit einigen Einschätzungen über die Stärken und Schwächen von Tate nicht immer einverstanden bin, so macht er doch eine gute Arbeit um einem die einzelnen Sprachen vorzustellen.

Fazit

Wer das Buch nur durchliest verpasst viel. Um wirklich davon zu profitieren sollte man sich die Zeit nehmen und auch die Beispiele und Aufgaben durcharbeiten. Die 7 Sprachen bieten viele Herausforderungen und Möglichkeiten um sich mit ungewohnten Konzepten zu beschäftigen.

Will man sich mit einer Sprache tiefer beschäftigen wird einem dieses Buch alleine nicht genügen. Man weiss nach dem Lesen aber wie man an weitere Informationen kommt und hat so einen guten Ausgangspunkt.

Zum Buch

Sieben Wochen, sieben Sprachen – Verstehen Sie die modernen Sprachkonzepte“ von Bruce A. Tate, 2011 O’Reilly, ISBN 978-3-897-21322-7, 360 Seiten, Deutsch