Programmiersprache/Entwicklung der Programmiersprachen

Aus ZUM-Unterrichten

Was findet ihr auf dieser Seite?

  1. Timeline
  2. Die Anfänge des Programmierens
  3. Die ersten Computer und ihre Instruktionen
  4. Die ersten höheren Programmiersprachen
  5. Objektorientierung
  6. Programmiersprachen in der Welt von heute
  7. Was hast du gelernt? → Quiz
  8. Literaturverzeichnis



Die Anfänge des Programmierens

In der Zeit bevor es Computer gab, konnten die Menschen nicht anders als jeden Handgriff und jeden Arbeitsschritt selber zu machen. Um repetitive Aufgaben nicht immer wiederholen zu müssen, erfand man schon in der industriellen Revolution Maschinen. Diese Maschinen nahmen den Menschen viele Arbeiten vor allem im handwerklichen Bereich ab. So gab es z.B. auch Webstühle, die schon ein einfaches Muster in den Stoff weben konnten. Joseph-Marie Jacquard war ein französischer Erfinder, der versuchte die Musterwebtechnik zu mechanisieren, sodass diese nicht mehr durch Menschen auszuführen sei. 1804 erfand Jacquard letztendlich den ersten programmierbaren Webstuhl. Dieser Webstuhl konnte nun auch kompliziertere Muster durch seine Programmierung weben. Alle Informationen inklusive der Programmierung, die der Webstuhl brauchte, waren auf Lochkarten geschrieben, welche man in den Webstuhl steckte.

Lochstreifen mit Text

Aber nicht nur im handwerklichen Bereich schritt die Programmierung voran. Ein paar Jahre später heiratete Ada Lovelace William King. Dieser unterstützte, förderte sie und ermöglichte ihr Zugang zu Wissen in Form von Bibliotheken, die sie vorher nie hatte. Denn Frauen hatten im 19. Jahrhundert noch kein Zutritt zu jeglicher Form von Bildung. Lovelace’s Ehemann ging in Bibliotheken und schrieb für sie Artikel ab. Da Lovelace und ihr Mann in der Royal Society verkehrten, dauerte es nicht lang bis sie von dem Plan von Charles Babbage erfuhr. Babbage’s Plan war es, eine Rechenmaschine zu bauen, die heute als Vorläufer des Computers gilt. Lovelace war fasziniert und übersetzte einen Artikel über Babbage’s „Analytical Machine“. Diese Maschine wurde 1837 von Babbage veröffentlicht und war eine Differenzmaschine für die Lösung polynominaler Funktionen. Danach fing sie an, an einem Algorithmus zu arbeiten, mit dessen Hilfe diese Maschine die Bernoulli-Zahlen hätte berechnen können. Ada Lovelace schaffte es in den Jahren 1842 – 1845 den Algorithmus zur Berechnung der Bernoulli-Zahlen zu entwickeln. Obwohl Babbage’s Pläne für die „Analytical Machine“ fehlschlugen, haben wir heutzutage doch ein ziemlich genaues Bild für diese Maschine. Sie wäre doch Lochkarten wie der Webstuhl viele Jahre zuvor programmiert worden. Die Programmiersprache auf diesen Lochkarten ähnelt den bis heute verwendeten Assemblersprachen sehr. (Bild)

Hollerith punched card.jpg

Die ersten Computer und ihre Instruktionen

1946 entwickelten John Mauchly und John Presper Eckert den ersten ENIAC Computer. Auf dem ENIAC waren nur Hardwareverbindungen möglich.

ENIAC Computer


Der Computer wurde programmiert, in dem die Verbindungen mit Leitungen geschlossen werden. Jedes Mal, wenn die Programmierung für den Computer geändert werden sollte, musste der Programmierer gucken, wo welche Verbindungen stecken und sie umstecken. In den Speicher dieses Computers konnten nur Daten eingegeben werden. Erst nachdem der Mathematiker von Neumann eine neue Architektur beschrieben hatte, mussten keine neuen Leitungen mehr gelegt werden sondern es konnte ein Programm im Speicher gespeichert werden. 1936 entwickelten Alonzo Church und Stephen Kleene das Lambda-Kalkül (λ-Kalkül). Das Lambda-Kalkül ist eine universelle abstrakte Programmiersprache. Es lässt sich mit dem Lambda-Kalkül alles ausdrücken, was sich mit einer modernen Programmiersprache ausdrücken lässt. Es ist außerdem die formale Grundlage für viele Programmiersprachen, wie z.B. Scheme und Lisp. In den häufig verwendeten und gut ausgebauten Programmiersprachen ist er meistens zusätzlich als Modul oder Bibliothek verwendbar.



Die ersten höheren Programmiersprachen

Konrad Zuse entwickelte 1945/1946 die erste höhere Programmiersprache, die er „Plankalkül“ nannte. Plankalkül umfasst Zuweisungen, Funktionsaufrufe, bedingte Anweisungen, Schleifen, Gleitkommaarithmetik, Felder und zusammengesetzte Datentypen. Erstmals wurde Plankalkül 1972 komplett veröffentlicht. Praktisch verwendet wurde Plankalkül nicht aber es hat historische Bedeutung. Denn es hat die nachfolgenden Programmiersprachen sehr beeinflusst. Die nächste Programmiersprache, die entwickelt wurde und heute in neueren Versionen immer noch benutzt wird, ist Fortran. Fortran steht für „FORmula TRANslator“. Es wurde 1954 von John W. Backus und einem Team aus Entwicklern und Programmierern entworfen. Heutzutage ist es eine objektorientierte Programmiersprache, die insbesondere für numerische Berechnungen genutzt wird. Eine Sprache, die heute auch noch verbreitet ist, ist LISP. LISP ist eine Abkürzung für „LISt Processor“. LISP wurde 1959 von John McCarthy et al. entworfen. Sie entstand am MIT (Massachusetts Institute of Technology) in Anlehnung an das Lambda-Kalkül. LISP beeinflusste eine Reihe von Sprachen, u.a. Smalltalk, Python und Haskell. Eine wichtige Programmiersprache, die den weiteren Verlauf beeinflusst hat, ist Algol 58 bzw. Algol 60. Algol kürzt „ALGOrithmic Language“ ab. Algol 58 wurde 1958 von einem internationalen Komitee während einer Tagungsreihe entworfen, die Algorithmen dienen sollte. Die Programmiersprache wurde noch einmal überarbeitet mit dem Revised Report für Algol 60. Algol schrieb gegen den Trend der Zeit Laufzeitprüfungen vor, die erst später gewürdigt und nachgeahmt wurden. Das „Hallo Welt“-Programm in Algol 60:

Vorlage:Kasten blass

1959 wurde die Urform der Backus-Naur-Form (BNF) dargestellt. Die BNF ist eine kompakte, formale Metasprache zur Darstellung kontextfreier Grammatiken. Fast alle Programmiersprachen, die nach der BNF entwickelt wurden, benutzten sie um ihre Programmiersprache darzustellen. Es gab das erste Mal die Möglichkeit, Gültigkeitsbereiche zu definieren. Es gibt viele Varianten der BNF. Die bekanntesten Varianten sind die erweiterte Backus-Naur-Form (EBNF) und die angereicherte Backus-Naur-Form (ABNF). IBM entwickelte in den 60er Jahren PL/I. PL/I steht für „Programming Language One“. In PL/I wurde versucht, die Sprachen Algol, Fortran und Cobol zu vereinigen. PL/I wurde v.a. auf IBM-Großrechnern eingesetzt. IBM musste vor PL/I für jeden Computer andere Sprachen verwenden. Deswegen war es ganz wichtig für IBM, dass PL/I entwickelt wurde. Es gibt aber auch Versionen für Windows und UNIX. Das "Hello World"-Programm in PL/I:

Vorlage:Kasten blass

Einen ganz anderen Grund hingegen hatten die Entwickler von BASIC. BASIC steht für „Beginner’s All-purpose Symbolic Instruction Code“. Es wurde 1964 von John C. Kemeny and Thomas E. Kurtz am Dartmouth College entworfen. Es wurde konzipiert, um den Studierenden den Einstieg in die Programmierung mit Algol und Fortran zu erleichtern. Es wurde also auch mit dem Ziel entworfen, leicht erlernen zu sein.

Objektorientierung

Objektorientierung beschreibt eine Sichtweise auf komplexe Systeme, bei der ein System durch das Zusammenspiel kooperierender Objekte beschrieben wird. Diese Denkweise und die ersten Begriffe zeigten sich in Simula 67. Simula setzt sich aus „SIMUlation“ und „LAnguage“ zusammen. Simula wurde für Simulationszwecke entwickelt und war erstmals mit Compiler im Jahre 1964 einsetzbar. Simula diente außerdem als Vorbild für C++. Dies ist das "Hello World"-Programm in Simula:

Vorlage:Kasten blass

Die objektorientierten Konzepte hatten großen Einfluss auf die weitere Entwicklung von Programmiersprachen. Eine andere wichtige Programmiersprache mit Objektorientierung ist Smalltalk. Smalltalk wurde seit den frühen 70er Jahren im Xerox Palo Alto Research Center entwickelt aber erst in den 80er Jahren der Öffentlichkeit allgemein freigegeben. Smalltalk wurde als voll dynamisches System angelegt, bei dem man Objekte interaktiv erzeugen und ändern kann. Smalltalk kann Codeschnipsel als Objekt behandeln und das hilft Smalltalk dabei, diese Codeschnipsel wie jedes andere Objekt zu verwenden. Mit Smalltalk war außerdem erstmals eine Integration einer Sprache in eine innovative Benutzeroberfläche, die eine echte Interaktion ermöglichte, vorgesehen. Speziell zu Ausbildungszwecken wurden Ende der 60er und Anfang der 70er Jahre Pascal erfunden. Pascal wurde von Niklaus Wirth und Kathleen Jensen entwickelt und sie benannte die Sprache nach dem französischen Mathematiker und Philosophen Blaise Pascal. Pascal übertraf FORTRAN und ALGOL 60 in soweit, dass Pascal universell einsetzbar war. Die damaligen Versionen von FORTRAN und ALGOL waren dies noch nicht. Im Gegensatz zu BASIC, welches auch eine Programmiersprache zu Ausbildungszwecken ist, ist Pascal aber sehr viel genauer. Pascal zwingt den Programmierer dazu, diszipliniert und strukturiert zu entwickeln. Pascal wurde später weiter entwickelt und in 1978 wurde eine neue umbenannte Version Modula-2 veröffentlicht. Modula-2 und weitere Pascal Versionen existierten aber weiterhin gleichzeitig. Es existierten sehr viele Programmiersprachen in den 70er Jahren. Das Verteidigungsministerium der USA fand, dass sie zu viele Programmiersprachen intern nutzen (ca. 450 Sprachen) und entschieden, dass sie nur noch eine Sprache für alle Projekte verwenden sollten. Es war aber gar nicht so einfach, eine Sprache zu finden, die alle nötigen Kriterien abdeckte. Denn viele Programmiersprachen waren nicht standardisiert sondern vom Anbieter abhängig. Deshalb wurde Ada entworfen. Ada wurde benannt nach Ada Lovelace, die Frau, die den Algorithmus für die Bernoulli-Zahlen entwickelt hatte. Die Entwicklung von Ada wurde vom US-Verteidigungsministerium unterstützt und gefördert. Ada’s Erscheinungsbild ähnelt Pascal und Modula-2. Sie gilt als die erste standardisierte Hochsprache.

Vorlage:Kasten blass Zum Vergleich das "Hello World"-Programm in Ada


Zwei Sprachen, die Hand in Hand gehen, sind C und C++. C++ ist die objektorientierte Erweiterung von C. C wurde in 1972 entworfen für das Betriebssystem Unix. Es setzte sich gegenüber BASIC für allgemeine Anwendungsprogramme durch. Ab 1979 wurde C++ dann von Bjarne Strousturp bei AT&T als Erweiterung von C entwickelt. C++ ermöglichte eine effiziente und maschinennahe Programmierung. Sie wollten C mit der Erweiterung eines Klassenkonzepts mit Datenkapselung entwickeln. C++ erschien letztendlich 1985.

Vorlage:Kasten blass Das "Hello World"-Programm in C++

Programmiersprachen in der Welt von heute

Die Objektorientierung setzte sich als Standard immer weiter durch und weitere Versionen älterer Programmiersprachen wurden mit Objektorientierung ergänzt. Es führte oft zu Problemen, wenn Sprachen, die nicht für Objektorientierung „gebaut“ wurden, mit objektorientierten Erweiterungen erweitert werden. Es gab zu der Zeit keine Sprache, die sowohl prozedurale als auch objektorientierte Programmiermöglichkeiten stellte. Eiffel war ein früher Versuch in diese Richtung. Heute nimmt man in diesem Zuge meistens Java. Java wurde in den Jahren 1991 bis 1992 im Auftrag des US-amerikanischen Computerherstellers Sun Microsystems entwickelt. James Gosling was der Hauptentwickler von Java. Java sollte u.a. eine einfache objektorientierte, verteilte Programmiersprache sein, die sowohl sicher als auch leistungsfähig ist. C#, eine weitere Erweiterung von C und C++, verfolgt ähnliche Ziele wie Java.

Mit dem Internet in den 1990er Jahren kamen auch Skript-Sprachen wie z.B. HTML (Hypertext Markup Language) und PHP („Personal Home Page Tools“). HTML wurde das erste Mal am 13. März 1989 von Tim Berners-Lee am Cern in Genf festgelegt. Die Urversion von HTML wurde in 1992 veröffentlicht. PHP ist eine Skriptsprache, die eine an C angelehnte Syntax hat. PHP wird hauptsächlich zur Erstellung von dynamischen Webseiten oder Webanwendungen verwendet. Es wurde erstmals 1995 von Rasmus Lerdorf entwickelt und veröffentlicht.

Vorlage:Kasten blass

Das Internet ist eine völlig neue Grundlage für das Programmieren und für Software. So rückten Aspekte wie Codesicherheit und Portabilität weiter in den Vordergrund. Es gab allerdings keine fundamentalen Neuerungen in den Programmiersprachen aber es wurde mehr wert auf automatische Speicherbereinigung und starke oder statische Typisierung gelegt. Obwohl die objektorientierten Programmiersprachen an Beliebtheit keineswegs verloren haben, wurden noch weitere erfunden und es wurden auch graphische Notationsformen, wie z.B. UML (Unified Modelling Language), entworfen, die sich durch ein erhöhtes Abstraktionslevel auszeichnen.

Was hast du gelernt? → Quiz

Literaturverzeichnis