Open Source im professionellen Einsatz

Abbildung 1: Um 1202 veröffentlichte Fibonacci in seinem „Liber Abaci“ die später nach ihm benannte Zahlenfolge (Ausschnitt).
(Bild: © Quelle: Wikimedia Commons, Heinz Lüneburg)

Die Essenz von Software besteht aus mehr als Algorithmen

Akademische Schleifen

Rekursion und funktionale Programmierung setzen einige Entwickler mit inhärenter Eleganz gleich. Haben die Konzepte zwar ihren Raum bei der Ausbildung von Studenten, sind sie in Produktionscode aber rar.

Inhalt

96 | Javascript-Toolkits

Mancher Entwickler beäugt Javascript skeptisch - zu viel
Web-2.0-Hype. Dabei lösen einige Javascript-Bibliotheken
nützliche Aufgaben, etwa das Client-seitige Sortieren von
Tabellen.

102 | Perl-Snapshot

CVS ist tot, es lebe Git! Wer diesem Credo folgen will, muss seine
Repositories fit machen. Perl hilft Code für Sammelstellen wie
Github vorbereiten.

108 | Rubymine

Vor dem Schleifen schlagen Webentwickler Edelsteine aus dem Fels.
Eine neue IDE für Ruby liefert dazu Werkzeuge.

Programmieranfänger kennen Fibonacci. Aber nur die wenigsten von ihnen tatsächlich den Mathematiker Leonardo Fibonacci, der Anfang des 11. Jahrhunderts in Pisa die Entwicklung einer Kaninchenpopulation modellierte (siehe Abbildung 1), sondern stattdessen die die nach ihm benannte Zahlenreihe [1]. Sie beginnt mit zwei Einsen und errechnet sich danach immer aus der Summe ihrer beiden Vorgänger.

Wen ein ernsthafter Lehrer in die Grundlagen des Programmierens eingeführt hat, der hat sich mit den Unterschieden rekursiver und iterativer Algorithmen befasst. Die Erfahrung zeigt, dass viele Novizen die iterative Lösung erst einmal als zugänglicher empfinden. Ähnlich wie ein kleines Kind mit den Fingern zählen lernt, hält sich der Programmieranfänger gerne an die Reihenfolge und berechnet so 1, 1, 2, 3, 5, 8 und 13.

Das Verfahren ist bodenständig, bequem und geradezu bieder. Welche Eleganz eröffnet sich da dem Lernenden, wenn er einige Übungseinheiten später die Rekursion kennenlernt: Fibonacci von n ist einfach die Summe aus Fibonacci von n - 1 und n - 2, selbst wenn der Programmierer oder sein Code diese Werte noch gar nicht kennen. Die mit einem Stack versehene Aufrufsemantik und hinreichender Speicher verstecken die Buchführung, die der iterativen Lösung oft ihren Glanz raubt.

Eleganz des Andersartigen

Nun haben Fibonacci-Zahlen im informationstechnischen Alltag nur einen begrenzten Nutzen - auch wenn sich mancher an der Beobachtung delektiert, dass das Verhältnis fib(n) zu fib(n - 1) bei immer größeren n gegen den goldenen Schnitt strebt. Gleichwohl buhlen mehrere Sprachen um Respekt und Anerkennung in dieser Disziplin. Sie werben mit Sprachmitteln, die solche Probleme möglichst kurz, elegant oder ungewöhnlich lösen (manchmal auch alles zusammen). Dennoch haftet dem Haskell-Einzeiler

rev (0:ft) = rs where rs = 0 : 1/(ft#rs)

zum Umkehren einer Liste etwas Freakhaftes an: Die Sprache ist irgendwie beeindruckend, sehr andersartig, aber für die Probleme des Alltags nur bedingt tauglich [2]. Scheme als Konfigurationssprache für Gnome? Effektiv vergessen [3]. Einzig Elisp fristet noch ein karges Dasein im Emacs, der ohne diese elitäre Designentscheidung vielleicht noch mehr Anhänger hätte [4].

Wer die konkreten Sprachen transzendiert und qualitativ analysiert, wie häufig welche Algorithmen zum Einsatz kommen, stellt fest, dass Rekursion und Lambda-Closures - immerhin die werbeträchtigen Aushängeschilder der funktionalen Sprachen - ein Schattendasein in echtem Code wie dem Kernel, Open Office oder den großen Desktops fristen.Das macht die Konzepte genauso wenig überflüssig wie Latein im Kanon einer humanistischen Schulbildung.

Wer Innovation schaffen will, muss über den Tellerrand blicken. Nur so kann er Grenzen abstecken und Machbares vom Absurden trennen. Eine vordergründige Nutzwertdiskussion hilft da nicht weiter. So verhält es sich mit der Rekursion wie mit dem Feuilleton der Zeitung: Kaum jemand liest es, wenige verstehen es, aber niemand will die Rubrik in dem guten Mix des Angebots missen.

Infos

[1] Fibonacci-Zahlen:[http://www.ijon.de/mathe/fibonacci/]

[2] Haskell: [http://haskell.org]

[3] Guile Scheme: [http://gnu.org/software/guile/guile.html#whatisit ]

[4] Elisp: [http://gnu.org/software/emacs/emacs-lisp-intro/]

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook