Programmierungsentwicklung
Parallel zu den greifbaren, technischen Fortschritten im Sinne der Hardware
vollzog sich im abstrakten Bereich der Programmierung (Software) ein ähnlicher
Vorgang. Die Fragestellung : "Definition eines Problems durch Zerlegung
in logische Schritte in maschinenverständlicher Sprache" - die Antwort
wandelte sich in den Jahren der Entwicklung, wie auch die verwendete Maschine
selbst. Heutige Programmiersprachen wie C und seine Ableger, BASIC, PASCAL
oder ALGOL haben mit den ursprünglichen Sprachentwicklungen des Maschinencodes
nicht mehr viel gemeinsam, wobei das Endprodukt -> der Maschinencode für
eine Prozessorgeneration besteht. Oben genannte Sprachen sind Interpreter-
oder Compilationssprachen, die es für den menschlichen Benutzer einfacher
gestalten sollen, Problemlösungen in möglichst kurzer Zeit zu
produzieren. Das Programmieren eines Programmiersprache selbst erfordert
das weitergehende Verständnis des Entwicklers für die Hardware
und speziell des verwendeten Prozessors [dazu findet vorwiegend der Assembler
Verwendung, der als "Low- Level- Programming" nahe am Prozessor beschrieben
werden kann und entsprechende Ergebnisse erzeugen kann]. Ein mit BASIC
geschriebenes Programm wird entweder von der Entwicklungsumgebung interpretiert
oder für die Systemsoftware lesbar in Maschinencode compiliert.
Die Entwicklung in der Sprache JAVA geht noch einen Schritt weiter,
da sie eine vom Betriebssystem und der JAVA Umgebung generierte "Virtual
Machine" zur Ausführung verwendet, was einen betriebssystemübergreifenden
Einsatz dieser Sprache erleichtert und vor allem im Bereich des Internet
eingesetzt wird.
Doch nun der Blick zurück in die Anfangstage der Programmierung
: Am Anfang stand das einfache "Geradeausprogramm" der Lochkartenmaschinen,
das zuerst fest verdrahtet, später auf Schalttafeln gesteckt, nur
einen im wesentlichen sequentiellen Ablauf der einzelnen Programmierschritte
zuließ [Dipl. Ing, H. Bornemann ("Die geschichtliche Entwicklung
der Datenverarbeitung") IBM Deutschland 1975]. Ähnlich arbeiteten
auch die ersten Rechenautomaten, wie Zuses Z3 [Konrad Zuse ("Entwicklungslinien
einer Rechengeräte-Entwicklung von der Mechanik zur Elektronik"),
Aus "Digitale Informationswandler", Herausgeber W. Hoffmann, Verlag Vieweg
& Sohn, Braunschweig 1962] oder Aikens Mark I [M.V. Wilkes ("Automatic
Digital Computers", John Wiley Sons Inc. New York], nur daß bereits
auswechselbare Lochstreifen die schnellere Umstellung auf ein anderes Programm
erleichterten. Der nächste Schritt war der Einbau zusätzlicher
Lochstreifenleser für Unterprogramme, wie das Berechnen trigonomischer
Funktionen und die bedingte Ausführung einzelner Befehle, beeinflußt
durch das Ergebnis von Zwischenrechnungen. Man konnte jetzt in Unterprogramme
springen, dort Zwischenrechnungen ausführen und anschließend
das Hauptprogramm fortsetzen. Das Überspringen ganzer Programmteile,
daß sog. "nach vorn verzweigen" war ebenfalls mit diesen Maschinen
möglich. Schon Charles Babbage (1792 bis 1871) hatte daran gedacht,
zyklische Programme auszuführen, indem er die für die Programmsteuerung
geplanten Jacquardschen Lochkartenbänder vorwärts und rückwärts
laufen lassen wollte ; eine Methode die praktisch nie umgesetzt werden
konnte. Erst als man seit v. Neumann zu speicherprogrammierten Maschine
überging und Operationsbefehle wie Zahlen zu speichern und zu modifizieren
lernte, war der Weg geebnet für eine flexible Behandlung der Programmiermethoden.
Zunächst waren alle Anweisung an die Datenverarbeitungsanlage
in Form einer codierten Folge von "Maschinenbefehlen", d.h. in einer Maschinensprache,
einzugeben, die von Maschine und Hersteller abhängig war. Damit mußten
Programme für jede Maschine individuell neu geschrieben werden. In
einem ersten Schritt wurden für die codierten Maschinenbefehle funktionsorientiert
symbolische oder mnemotechnische Ausdrücke eingeführt, welche
mit Hilfe eines 1:1 Übersetzungsprogramms, auch Assembler genannt,
Befehl für Befehl in die jeweilige Maschinensprache übersetzt
wurden. Selbst dieser Assembler war im wesentlich noch maschinenorientiert.
Erst die Entwicklung von "problemorientierten Programmiersprachen" sollte
die Möglichkeit eröffnen, allgemein verwendbare, "kompatible"
Programme zu schreiben, welche von verschiedenen Maschinentypen mit Hilfe
sogenannter Compilierer in deren Maschinensprache umgesetzt werden können
[F.L. Bauer & K. Samelson ("Maschinelle Verarbeitung von Programmiersprachen"
aus "Digitale Informationswandler", Herausgeber W. Hoffmann, Verlag Vieweg
& Sohn, Braunschweig, 1962 / Bauer, Heinhold, Samelson, Sauer ("Moderne
Rechenanlagen") B.G. Teubner Verlag 1965]. So wurden in den folgenden Jahren
verschiedene Programmiersprachen entwickelt :
1950 : ASSEMBLER (keine allgemein gültige Sprache (Typabhängig)
1954 : FORTRAN (FORmula TRANslation) ;gefolgt von FORTRAN II,
FORTRAN IV und PL/1
1958 : ALGOL (Sprache für mathematische Zwecke)
1960 : COBOL (Common Business Oriented Language) ; (erste kommerzielle
Programmiersprache)
1968 : ALGOL 68
Aus diesen Sprachen entwickelten sich verschiedenste Varianten, wobei
APL die Listenverarbeitungssprache von Professor K.E. Iverson besondere
Erwähnung in der Literatur findet.