Die Geschichte der Programmiersprachen

Die Anfänge von etwas wie einer Programmiersprache liegen 200 Jahre zurück. In der industriellen Revolution wurden immer mehr Maschinen entwickelt, die wiederkehrende Arbeiten erledigten. Um die teuren Maschinen auszulasten, wurde bald gefordert, auch wechselnde wiederkehrende Tätigkeiten von ein und derselben Maschine erledigen zu lassen. Vorreiter war die Textilindustrie mit ihren großen Webstühlen. Joseph-Marie Jacquard führte in seinen Werkstätten die ersten programmierbaren Webmaschinen ein.

Die wichtigste Verbesserung von Jacquards Musterwebstuhl gegenüber all seinen Vorläufern bestand darin, dass er die Nockenwalze der österreichischen Webstühle durch das Endlosprinzip der Lochkartensteuerung ersetzte. Dadurch konnten endlose Muster von beliebiger Komplexität mechanisch hergestellt werden. Auf den Lochstreifen waren allerlei Informationen über das zu webende Muster enthalten. Die Streifen wurden mit Nadeln abgetastet; ein Loch bedeutete Faden heben, kein Loch Faden senken. Diese beiden Informationen reichten aus, um großflächige Musterungen herzustellen.

Auf die erste im mathematischen Sinn logische Programmierung von Ada Lovelace in den Jahren 1842/43 sind wir schon eingegangen. Die Maschine wurde nie gebaut. So erstreckten sich alle Programmierversuche für mechanische Maschinen auf Lochkartensysteme. Erst in den 30er Jahren des 20. Jahrhunderts begann die Frühphase dessen, was wir heute unter Programmierung und Programmiersprachen verstehen: das universell einsetzbare Lambda-Kalkül. Damit hätte man schon mächtige Programme schreiben können, doch noch fehlte die Hardware. Erst mit den Entwicklungen von Konrad Zuse und John von Neumann zur Computerarchitektur fiel der Startschuss zum kometenhaften Aufstieg der Informatik und Programmierung.

Zwischen Null und Eins

Die ersten Computer-Programmierer waren echte Pioniere. Weil jede Central Process Unit (CPU = Hauptprozessor) nur mit den beiden Zuständen „Strom an“ und „Strom aus“ arbeitet, musste zunächst jede Anweisung an die Maschine mit Symbolen „0“ und „1“ als Synonym für diese Zustände auskommen. Daten und Befehle wurden also binär eingegeben, in langen Reihen von Nullen und Einsen. Das war und ist die Maschinensprache. Ihr Nachteil: Komplexe Aufgaben in Maschinensprache zu notieren ist nahezu unmöglich.

Nicht, dass die ersten Programmierer Dussel gewesen wären, die maximal bis Eins zählen konnten. Nein, sie waren hoch intelligent. Mussten sie doch Code schreiben, der außerordentlich lang und unübersichtlich war. Ein für mächtige Programme untaugliches Prinzip, da der Aufwand für die Fehlersuche den für die Programmierung übersteigt. So war es nicht verwunderlich, dass schnell die zweite Stufe der Programmiersprachenentwicklung erklommen wurde:

Assemblersprachen

Abgeleitet vom Englischen „assemble“ (montieren, zusammensetzen) entwickelten kluge Köpfe diese Sprache in vielen Varianten. Alle Dialekte hatten zwei Dinge gemeinsam: Erstens waren sie immer noch stark an der Maschine orientiert, das heißt, für jede Prozessorart musste ein Programm individuell umgeschrieben und angepasst werden. Und zweitens wurden die Befehle nun als Buchstabenkombinationen nach den Regeln der Mnemotechnik eingegeben. Zum Beispiel „mov“ für move (bewegen). Man konnte also mit „mov ax 10“ befehlen, dass in den Speicherplatz ax der CPU der Wert 10 geschrieben werden sollte.

Trotz der maschinennahen Programmierung musste natürlich erstmals ein Übersetzer eingeschaltet werden, der Assembler (ein spezieller Compiler). Neu war auch, dass neue Programmteile danach mit bereits vorhandenen Programmteilen automatisch verknüpft wurden und dann als ausführbare „exe“-Datei zur Verfügung standen.

Bis in die 90er-Jahre des 20. Jahrhunderts wurden Computerspiele, Betriebssysteme und zahlreiche Spezialanwendungen in Assemblersprache geschrieben. Noch heute werden manche Gerätetreiber und Routinen für Prozessoren in einer Variante dieser Sprache notiert. Das liegt an einem großen Vorteil: Assembler ist so maschinennah, dass die Übersetzung wesentlich weniger Zeit beansprucht als in entsprechenden Compilern einer Hochsprache. Auch sind manche Aufgaben präziser und schneller zu formulieren. Der generelle Nachteil eines in der Regel noch zu langen Codes und der beschränkten Einsatzmöglichkeit hat jedoch bereits in den 50er Jahren des letzten Jahrhunderts dazu geführt, dass Informatiker die dritte Generation der Programmiersprachen schufen.

Auch für Schwaben angenehmer: die Hochsprachen.

Es war klar, dass immer komplexere Aufgaben und viele unterschiedliche Maschinenarchitekturen neue Programmiersprachen erforderten, die folgenden Ansprüchen genügen mussten:

  • maschinenunabhängigere Programmierung – Einsatz der Programme auf unterschiedlichen Rechnern.
  • Projekte und Programme sollten besser strukturiert werden. Nicht zuletzt, um ihre Lesbarkeit zu verbessern.
  • Der Programmierer sollte von Rechner-Spezialkenntnissen entlastet werden, damit er sich auf die Aufgabenstellung für die Programmierung und deren Lösung konzentrieren konnte.

Die erste dieser Hochsprachen war FORTRAN für technisch-wissenschaftliche Anwendungen (FORmula TRANslator). Es folgten LISP (LISt Prozessor) und COBOL (COmmon Business Oriented Language). Alle drei sind in weiterentwickelten Versionen noch in Gebrauch.

Ein Meilenstein in der Geschichte war die Entwicklung von ALGOL (ALGOrithmic Language), weil in ihrem Gefolge zum ersten Mal Gültigkeitsbereiche definiert wurden und die Bachus-Naur-Form (BNF) zur kontextfreien Beschreibung der Syntax jeder Programmiersprache als Standard festgeschrieben wurde. Auf Algol basieren etliche spätere Sprachen wie zum Beispiel Pascal, Basic oder C.

Neben den ersten Hochsprachen, zugeschnitten auf bestimmte Anwendungsbereiche, wurden mit dem ersten Boom der Computerindustrie in den 60er und vor allem 70er Jahren neue Sprachen für allgemeinere Einsatzgebiete geschaffen. Sie waren nicht so akademisch aufgebaut und begeisterten vor allem das Gros der Jungprogrammierer, die vielen Einsteiger. Von BASIC (Beginner´s All-purpose Symbolic Instruction Code) über C und Pascal (benannt nach dem Mathematiker Blaise Pascal) bis zur Weiterentwicklung Delphi. Mitte der 80er Jahre wurde die objektorientierte Programmierung populärer. C++ und C# boten in der Folge die entsprechenden Antworten auf der Basis von C. Der Start in das Internetzeitalter brachte dann wieder neue Sprachen hervor, allen voran Java, und die Auszeichnungssprachen HTML (HyperText Markup Language) und UML (Unified Modeling Language).

C++, C# oder Java lernen? Fangen Sie an – kostenlose Infos hier!

Die vierte Generation

Fourth Generation Language (4GL) vereint Programmiersprachen und Programmierumgebungen, die ganz unterschiedliche Zwecke verfolgen. Neben eigentlichen Programmiersprachen sind damit auch Programmierumgebungen für Datenbankabfragen, Datenmanipulation, Datenanalyse, Berichterstellung und Formularerstellung sowie Werkzeuge gemeint, mit denen grafische Benutzeroberflächen programmiert werden. Allen gemeinsam ist, dass sie fast schon für normale Nutzer gebaut sind und durch weniger Code kürzere, verständlichere, besser korrigierbare und erweiterbare Programme erlauben. Fast schon in Umgangssprache werden die Anweisungen gegeben. Auch ein Benutzer mit wenig Ahnung soll mit diesen Tools Programme schreiben können. Ein gutes Beispiel dafür ist SQL (Structured Query Language = Strukturierte Abfragesprache) für Datenbanken. Der Benutzer muss nur noch angeben, welche Daten er benötigt. Er muss nicht mehr Schritt für Schritt programmieren, wie der Computer die Daten suchen soll.

Suchen



gratis-infos-box