Wie funktioniert eine Programmiersprache?
Vielleicht haben sie schon alte Musikautomaten gesehen, die gesteuert von einer Stiftwalze oder einem Lochstreifen verschiedene Musikinstrumente zum Klingen bringen. Diese darf man durchaus als Vorläufer der heutigen Computer bezeichnen. Der bedeutendste Unterschied zwischen diesen Automaten und den Computern besteht darin, dass das Programm dieser mechanischen Automaten, also die Partitur in Form der Stifte oder Löcher, immer linear ist. Eine gegebene Melodie tönt immer gleich. Computerprogramme hingegen, können sogenannte Verzweigungen enthalten. D.h., Stellen im Ablauf, wo abhängig vom Wert eines Speicherinhaltes, entweder die eine Befehlsfolge oder die andere ausgeführt wird. Die ganze Intelligenz der Computer wird durch diese Besonderheit ermöglicht.
Gemeinsam haben die beiden den Binärcode. Computer arbeiten bekanntlich nur mit Nullen und Einsen, die durch elektrische oder magnetische Zustände dargestellt werden. Musikautomaten im Prinzip auch, wobei die beiden Zustände durch An-, bzw. Abwesenheit eines Stiftes oder Loches dargestellt werden.
In der Sprache der Computer würde man sagen, dass die Anordnung der Stifte oder Löcher der Automaten Befehle an die mechanischen Musikinstrumente darstellen. Schlage die Pauke! Spiele auf dem Klavier ein C-Dur! Usw... Computerbefehle sind etwa: Hole einen Wert aus dem Speicher! Addiere ihn mit einem anderen Wert! Speichere das Resultat im Speicher! Falls das Resultat grösser war als Null, dann fahre mit diesem Befehl fort, sonst mit jenem! (das ist die bereits erwähnte Verzweigung).
Ein Programm besteht aus Tausenden oder Millionen solch primitiver Befehle. Damit Programme zu entwickeln ist äusserst mühsam, unanschaulich und fehlerträchtig. Und hier kommen endlich unsere Programmiersprachen - genauer «höhere Programmiersprachen» - ins Spiel. Sie entfernen sich in Abstraktion und Komplexität deutlich von den primitiven Maschinenbefehlen. Für Laien sehen sie immer noch sehr kryptisch aus, aber Programmierer können damit komplexe logische Zusammenhänge mit wenig Text ausdrücken.
Ähnlich wie in einem Kochrezept definiert man welche Zutaten (Daten in Form von Zahlen, Texten usw.) benötigt werden, um eine Aufgabe zu erledigen. Dann beschreibt man Schritt für Schritt wie diese verarbeitet werden müssen, bis das «Gericht» fertig ist. Solche Anweisungsfolgen nennt man Algorithmen.
Eine Aufgabe könnte z.B. lauten: «Erzeuge aus Personaldaten ein Organigramm». Ein Programmierer würde in seiner Programmiersprache Datenstrukturen definieren, mit denen er Listen von Personen darstellen kann. Er würde Algorithmen entwickeln, die daraus eine baumartige Datenstruktur erzeugt, die der hierarchischen Organisation des Unternehmens entspricht. In einem weiteren Schritt würde er eine graphische Darstellung daraus entwickeln, indem er die Position von kleinen Rechtecken berechnet und mit Linien verbindet.
Ich hoffe, dass ich mit diesem Beispiel einen Eindruck geben konnte, was man in einer Programmiersprache ausdrücken kann.
Das ist gut und recht, aber die Computerchips verstehen höhere Programmiersprachen nicht. Sie verstehen wirklich nur ihre Nullen und Einsen. Spezielle Programme, sogenannte Compiler, müssen aus diesen Programmtexten letztlich wieder die primitiven Maschinenbefehle erzeugen und schier endlose Folgen von Nullen und Einsen produzieren…