Vor einigen Tagen schickte mir netterweise Hannes Mehnert ein Exemplar seines neuen Buchs Das Curry-Buch - Funktional programmieren lernen mit JavaScript (zusammen mit Co-Autoren Jens Ohlig und Stefanie Schirmer, gerade erschienen bei O‘Reilly, um die 30€). Hannes bin ich immer mal wieder bei der ICFP über den Weg gelaufen - dort hat er sich beim ICFP Programming Contest als Weltklasse-Programmierer zu erkennen gegeben. Für uns ist das Buch eine gute Gelegenheit, das Repertoire unseres Blogs um die Kategorie „Buchbesprechungen“ zu erweitern.

Das Buch richtet sich an aktive JavaScript-Programmierer. Dass JavaScript Wurzeln in der funktionalen Programmierung hat (auch wenn diese unter dem dicht belaubten Baum anderer Features der Sprache manchmal schwer zu sehen ist) ist hinlänglich bekannt. Entsprechend unterstützt JavaScript die funktionale Programmierung und wird sie in Zukunft noch besser unterstützen. Da JavaScript sich wohl noch lange großer Popularität erfreuen wird, ist es begrüßenswert, dass sich die Autoren dieses speziellen Themas annehmen.

Der Name mag erst einmal verwirren, ist aber für Fans der funktionalen Programmierung leicht erkennbarer Sprachwitz: Haskell Curry war ein amerikanischer Logiker, der viele Grundlagen für die heutige funktionale Programmierung gelegt hat, unter anderem die nach ihm benannte Currifizierung. Die Autoren machen den Titel aber noch konsequenter zum Programm: Sie benutzen das (indische) Kochen als Metapher für die Programmierung und würzen das Buch mit zahlreichen Erläuterungen zum Thema sowie leckeren Kochrezepten. Das funktioniert erstaunlich gut: Themen von Abstraktion bis Kompositialität finden ihr Pendant in der Kochkunst.

Dieses Gimmick hat mich bei der Lektüre allerdings erst einmal abgelenkt: Immer, wenn ich mich mental auf technische Erläuterungen zur Programmierung eingestellt hatte, brach ein Kochrezept den Lesefluss. Tatsächlich ist das Buch auch keine stringente Einführung in die funktionale Programmierung. JavaScript-Programmierer sollten also nicht erwarten, nach der Lektüre zu Meistern der funktionalen Programmierung gereift zu sein. Was die Qualität des Buchs eigentlich ausmacht, wurde mir erst klar, als ich mich abends aufs Sofa fläzte und dort weiterlas: Plötzlich fühlte ich mich blendend unterhalten.

Und tatsächlich ist das Buch eine kleine aber feine Parade der wichtigsten Perlen der funktionalen Programmierung. Dabei geht es um klassische Anwendungen der Higher-Order-Programmierung, systematische Abstraktion, Maps und Folds, Rekursion und Monaden. Eine Einführung in den Lambda-Kalkül und eine Betrachtung des „Typsystems“ von JavaScript (die allerdings wenig mit funktionaler Programmierung zu tun hat) sind auch dabei. Alles unterhaltsam aufbereitet mit Hintergrund-Erläuterungen und eben den Parallelen zur indischen Küche. Die Beispiele zeigen gut, wie sich idiomatischer JavaScript-Code mit funktionaler Programmierung verträgt - und zwar ohne dass erst irgendwelche dicken Frameworks dazuinstalliert werden müssen. Viele Verweise auf Artikel im Internet, andere funktionale Sprachen und Paraadigmen und hilfreiche JavaScript-Frameworks runden das Gesamtbild ab.

Insofern ist das Buch als schöner Appetizer zu sehen: Ebensowenig wie ein Kochanfänger erwarten darf, nach Lektüre eines Rezeptbuchs plötzlich zum Meisterkoch abseits der präsentierten Rezepte zu werden, wäre es zuviel erwartet, eine systematische und konstruktive Einführung in die funktionale Programmierung vom Curry-Buch zu finden. (Dafür gibt es andere, wenn auch langweiligere Bücher.) Kleine Ungenauigkeiten („zusätzliche Überprüfungen, etwa ob eine Funktion tail-rekursiv ist, erfordern mehr Rechenzeit“) und ein streckenweise etwas schlampiges Lektorat trüben das Gesamtbild nur unwesentlich. JavaScript-Programmierer mit Interesse an der funktionalen Programmierung werden den Kauf des Buchs also nicht bereuen.