It’s all a little bit of history repeating
Thursday, August 25th, 2005Welcher Programmierer hat nicht seine eigene Lieblingsprogrammiersprache und verachtet nicht mindestens zwei andere. Ich persönlich mag ja die in den neunzigern entstandenen Skriptsprachen Ruby und Python sehr gerne. Andere Sprachen, die ich auch kann bzw. beherrsche sind z.B. Delphi/Pascal, C, Java, Basic, Haskell, etwas Assembler und in geringem Maße auch Spezialsprachen wie die AWK oder SED Skriptsprachen. Dabei mag ich etwa Java oder PHP nicht - wer tut das schon!
Durch ein forderndes Semester Informatik angetrieben folge ich nun auch mal Links auf Seiten zu Sprachen, die etwas außerhalb des Industrie-Mainstreams stehen. Heute landete ich dabei auf auf Paul Grahams - seines Zeichens Lisp-Faschist - Essay ,,Revenge Of the Nerds.
Obwohl der Titel es kaum vermuten lässt, geht es in diesem Artikel darum, welche Sprache denn nun am besten ist. Die Sprache, die gerade von der Industrie mit dem meisten Geld beworben wird? Damals war es Java, heute kommt auch noch C# hinzu. Oder vielleicht doch die Sprache, die nicht durch das Abstrahieren der Maschinenprogrammierung (am Anfang Fortran) entstanden ist, sondern duch konkretisieren von mathematischen Theorien: Lisp
Einige der Tatsachen über List, die Graham als ihre Stärken beschreibt, waren mir nicht bewusst. Für mich war Lisp eine funktionale Sprache unter vielen - wenn auch die erste. Warum sollte man Lisp verwenden, wenn es heutzutage etwa Haskell gibt, das rein funktional ist und jede Menge syntakttischen Zucker mit sich bringt?
Einer der Pudels Kerne für diese Frage scheint zu sein, dass sich Lisp aus sich selbst heraus erweitern lässt. Lisp ist also quasi in Lisp geschrieben und kann damit auf Sprachebene erweitert werden. Man verfolgt beim Programmieren mit Lisp nicht den top-down Ansatz und versucht sein Problem an seine Sprache anzupassen, sondern man schreibt seine eigene Sprache für das Problem.
Und beim Lesen wurde mir auch klar, was ich an Ruby on Rail bzw. an Ruby selbst so gut finde: Man kann im Code von Klassen Funktionen - Makros - aufrufen, die dann das Klassen-Objekt verändern. Diese Art von Dynamik macht es etwa leicht in Datenbank-Zugriffsklassen für Eigenschaften für Relationen bereit zu stellen. Man braucht keinen Code-Generator mehr, wie Java, C# usw. sie verwenden, sondern betreibt Meta-Programmierung!
Dieses Feature also, dass das Programmieren in Ruby so bereichert (zusammen mit vielen anderen Eigenschaften der Sprache), ist nahezu 55 Jahre alt! Graham argumentiert in seinem Essay weiter, dass alle neuen Sprachen wie Java und vor allem die dynamischen Sprachen Perl, Python (ich nehme mir mal heraus auch Ruby hinzuzufügen) immer mehr zur ,,besseren” Wurzel der Programmiersprachen zurückkehren: Lisp eben.
Inwiefern sich hier Geschichte nun wirklich oder nur als Farçe wiederholt möchte und kann ich hier nicht beurteilen. Sicher ist nur, dass alle in seinem Essay aufgezählten Spracheigenschaften von Lisp interessant sind (jetzt mal die Features ausgenommen, die mittlerweile Standardcharacter haben). Außerdem bin ich ein wenig mehr motiviert, mich mit Lisp oder anderen exotischeren Sprachen auseinanderzusetzen.