Der Zoo der Programmiersprachen
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Der Zoo der Programmiersprachen
Prof. Dr. Bernd Ulmann
22. Januar 2014
1/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 20141. Einleitung
Einleitung
2/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Worum geht es? 1. Einleitung
Worum geht es? Es geht um
den Einfluss, den (Programmier-)Sprachen auf unser Denken
haben,
d.h. es geht um Programmiersprachen,
ihre Geschichte und – ein wenig – auch um
ihre Zukunft,
aber auch Poesie und Literatur sollen nicht zu kurz
kommen. . .
. . . zunächst einmal geht es jedoch um Sprachen an sich:
3/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sprachen 1. Einleitung
Was sind Sprachen im allgemeinen? Zwei von vielen, vielen
Definitionsversuchen:1
Unter Sprache versteht man die Menge, die als
”
Elemente alle komplexen Systeme der Kommunikation
beinhaltet.“
Das heisst was? :-)
Sprachen sind die Systeme von Einheiten und
” ’
Regeln, die den Mitgliedern von Sprachgemeinschaften
als Mittel der Verständigung dienen‘.“
1
Siehe http://de.wikipedia.org/wiki/Sprache, Stand 09.03.2013
4/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Anforderungen 1. Einleitung
Welche Eigenschaften müssen (brauchbare) Sprachen erfüllen?
Keine Privatsprache“ (siehe [Wittgenstein 1945]): Eine
”
solche Sprache kann nur von dem sie definierenden Individdum
verstanden werden.
Wohldefiniertheit“ von Begriffen (bei natürlichen Sprachen
”
ist das stark eingeschränkt – was verbirgt sich beispielsweise
hinter einem alltäglich verwendeten Begriff wie dem
Bewusstsein“?)
”
Vollständigkeit“ bzw. Mächtigkeit“: Die Sprache muss in
” ”
der Lage sein, auch neue, unvorhergesehene Sachverhalte
adäquat ausdrücken zu können.
Idealerweise gibt es eine Kultur“ einer bestimmten Sprache,
”
d.h. Literatur, Poesie etc.
5/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sprachklassen 1. Einleitung
Welche Sprachklassen lassen sich unterscheiden?
Natürliche Sprachen: Sprachen dieser Klasse sind das Ergebnis
einer (langen) historischen Entwicklung, die nicht
gesteuert bzw. zweckgerichtet verlief.
Konstruierte Sprachen: Solche Sprachen wurden explizit für
bestimmte Einsatzzwecke entwickelt (z.B. Toki
”
Pona“).
Formale Sprachen: Diese sind eine Untermenge der konstruierten
Sprachen und gehen aus sogenannten formalen
Grammatiken hervor – ein typisches Beispiel hierfür
sind Programmiersprachen.
6/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Warum Programmiersprachen? 1. Einleitung
Im Folgenden liegt der Fokus aus den folgenden Gründen auf
Programmiersprachen:
Natürliche Sprachen sind ungenau, chaotisch und eigentlich
langweilig. :-)
Programmiersprachen sind das, was unsere heutige Welt
zusammenhält!
Programmiersprachen prägen das Problemlöseverhalten in
vielleicht sogar größerem Maße, als das natürliche Sprachen
tun!
Programmiersprachen haben so kurze Entwicklungszyklen,
dass man durch ihre Beobachtung und Untersuchung viel über
Sprachentwicklung an sich lernen kann.
. . . und immerhin geht es hier um Informatik, also um
Sprachen für Maschinen (und auch Menschen)! :-)
7/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmiersprachen 1. Einleitung
Warum werden in der Informatik eigentlich Programmiersprachen
benötigt? Warum können nicht einfach sogenannte natürliche
Sprachen, eventuell in Form eines Sprachsubsets, eingesetzt
werden?
Edsger Wybe Dijkstra bringt das Hauptproblem natürlicher
Sprachen schön auf den Punkt:2
So-called ‘natural language’ is wonderful for the
”
purposes it was created for, such as to be rude in, to tell
jokes, to cheat or to make love in (and Theorists of
Literary Criticism can even be content-free in it), but it is
hopelessly inadequate when we have to deal
unambiguously with situations of great intricacy,
situations which unavoidably arise in such activities as
legislation, arbitration, mathematics or programming.“
2
Siehe [Dean 1995][Vorwort].
8/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmiersprachen 1. Einleitung
Was ist nun eine Programmiersprache?
A programming language is an artificial language
”
designed to communicate instructions to a machine,
particularly a computer. Programming languages can be
used to create programs that control the behavior of a
machine and/or to express algorithms precisely.“ 3
Diese Definition ist jedoch (zu) stark eingeschränkt, beispielsweise
bleiben Fragen nach Poesie, Literatur und der Schönheit von
Programmen aussen vor. . .
3
Quelle: http://en.wikipedia.org/wiki/Programming language, Stand 06.10.2011.
9/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmiersprachen 1. Einleitung
Programmiersprachen sind formale Sprachen“, d.h. es
”
existiert jeweils eine exakte Definition zulässiger Ausdrücke
sowie ihrer Bedeutung – Mehrdeutigkeiten, wie in natürlichen
Sprachen, sind nicht möglich. :-)
Programmiersprachen bilden (meist) die Schnittstelle zwischen
Mensch (Programmierer) und Maschine (Computer).
Programmiersprachen stehen im Spannungsfeld zwischen
Universalität, Anwendungs- und Maschinenorientierung!
Es gibt nicht die Programmiersprache für alle Einsatzbereiche
(obwohl IBM seinerzeit PL/1 zu der Programmiersprache
erklärt hat :-) ).
10/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sag’ mir wieviel. . . 1. Einleitung
Aktuelle Schätzungen gehen davon aus, dass es etwa 7000
natürliche Sprachen im Lauf der Zeiten gab, die aktiv gesprochen
wurden und zum Teil noch werden.
Damit stellt sich schnell die Frage, wieviele Programmiersprachen
es (in etwa) gibt. Auf einer Webseite findet sich folgende
Bemerkung:4
There are dozens of programming languages and
”
new ones are being continuously developed.“
Das ist leicht untertrieben! Wer es genauer wissen möchte, sollte
einen Blick auf HOPL5 werfen – hier finden sich viel, viel mehr als
ein paar Dutzend Programmiersprachen:
4
Siehe http://www.businessdictionary.com/definition/programming-language.html, Stand
06.10.2011.
5
Siehe http://hopl.murdoch.edu.au, Stand 06.10.2011.
11/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Der Turmbau zu Babel 1. Einleitung
8512 Programmiersprachen!
(Abbildung aus http://rzv037.rz.tu-bs.de/gis/gis/drucken/ft9.htm, Stand 06.10.2011.)
12/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Der Turmbau zu Babel 1. Einleitung
Ist das nicht erstaunlich?
In knapp 70 Jahren hat die Informatik mehr
Kunstsprachen hervorgebracht,
als der Rest der Menschheit
in all’ den Jahrtausenden zuvor!
13/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Top 10 languages 1. Einleitung
Verblüffenderweise werden gegenwärtig nur 10 Sprachen für ca. 80
Prozent aller Projekte genutzt:
(Abbildung aus http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html, Stand 03.10.2013.)
14/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Und. . . ? 1. Einleitung
Und? Welche Lehre sollte man daraus ziehen?
Was scheren mich alte, längst vergessene Sprachen?
Ich lerne Java – damit finde ich immer einen Job!
NEIN!
Ganz im Gegenteil! Unsere Geschichte, die Geschichte der
Informatik, muss bewahrt werden, um aus den Fehlern der
Vergangenheit lernen und auf den großartigen Ideen unserer
Vorgänger aufbauen zu können! Die heutige
Beinahe-Monokultur ist ein echtes Problem!
15/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Warum Geschichte? 1. Einleitung
Warum sollte man sich mit Geschichte befassen? Sollte man nicht
besser nur nach vorne schauen? George Santayana6 bemerkt dazu
Folgendes:
[. . . W]hen experience is not retained, as among
”
savages, infancy is perpetual. Those who cannot
remember the past are condemned to repeat it. In
the first stage of life the mind is frivolous and easily
distracted; it misses progress by failing in consecutiveness
and persistence. This is the condition of children and
barbarians, in whom instinct has learned nothing from
experience.“
6
Siehe [Santayana 1906].
16/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sprachengeschichte 1. Einleitung
Was kann man aus der Geschichte der Entwicklung der
Programmiersprachen lernen, was heute von Wert ist?
Klärung der Frage Warum ist ein bestimmtes Feature so, wie
”
es ist, und nicht anders?“ – zum Beispiel: Warum verwendet
”
C 0-terminierte Strings und nicht counted Strings, wie
Pascal?“
Welche Ideen haben sich nicht bewährt – diese retrospektive
Einsicht ist in der Informatik sehr schwach vertreten.7
Welche Ideen sind – vielleicht zu Unrecht – (fast) in
Vergessenheit geraten? (Beispiele: APL, Forth. . . )
Über den Tellerrand-Schauen ist essenziell! Ein wirklich guter
Programmierer muss deutlich mehr als ein oder zwei Sprachen
kennen!
7
Es gibt jedoch das Forum for Negative Results“, siehe http://page.mi.fu-berlin.de/prechelt/fnr/,
”
Stand 06.10.2011.
17/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sprachengeschichte 1. Einleitung
Schön bringt das Diarmuid Pigott auf den Punkt:8
As the world becomes increasingly and
”
overwhelmingly dependant on software, we find that the
core of that software – programming languages and
systems – remain a mystery to even their users, the
programmers. By paying attention to the origin, rise and
fall of each of the languages we may learn why they
made their decisions.“
Darum nun eine kleine Tour de Force auf den Turm zu Babel der
Programmiersprachen und deren Geschichte, um zu zeigen, wie
viele brillante Ideen es wieder zu entdecken gibt und wie
facettenreich Programmiersprachen sind. . .
8
http://hopl.murdoch.edu.au/why.html, Stand 06.10.2011.
18/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Auf den Schultern. . . 19/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014
Auf den Schultern. . . 2. Auf den Schultern. . .
. . . von Giganten!
Alle Konzepte der Informatik, und damit auch die von
Programmiersprachen, bauen letztlich auf dem gigantischen Ideen-
und Notationsgebäude auf, das Mathematik und Logik mit sich
gebracht haben.
Darum ein kurzer Blick auf mathematische Notation und deren
Einfluß auf unser Denken. . .
20/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Die erste konstruierte Sprache 2. Auf den Schultern. . .
Die mathematische Notation ist die vermutlich erst überhaupt
entwickelte Kunstsprache. Mit die frühesten bekannten
Schriftstücke behandeln erstaunlich häufig mathematische
Probleme, was zeigt, wie wichtig schon vor Jahrtausenden die
Möglichkeit war, mathematische Fragestellungen, wenngleich
zunächst sehr praxisbezogen, zu formulieren.
Ein Beispiel hierfür ist folgende Aufgabe aus einem babylonischen
Keilschrifttext:9
Länge mit 3 vervielfacht
”
Breite mit 2 verfielfacht
addiert quadratisch
Fläche [der] Länge addiert und so 4,56,40“
In heutiger Notation sähe diese Aufgabenstellung wie folgt aus:
(3x + 2y )2 + x 2 = 4, 56, 40
9
Siehe [Neugebauer 1969][S. 71].
21/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sprachen für Mathematik 2. Auf den Schultern. . .
Offensichtlich war es sehr mühsam, auch nur halbwegs komplexe
Problemstellungen dergestalt zu beschreiben – von der
Beschreibung algorithmischer Lösungsverfahren einmal ganz
abgesehen. . .
Dies dürfte mithin ein Grund dafür gewesen sein, dass die
Mathematik erst in den vergangenen wenigen Jahrhunderten zu
einem wahren Höhenflug angesetzt hat, als nämlich eine zu großen
Teilen standardisierte und anerkannte Notation vorhanden war, die
auf die Beschreibung mathematischer Sachverhalte zugeschnitten
entwickelt wurde.
Mit verbesserter Notation konnten zunehmend komplexere
Probleme beschrieben und auch gelöst werden, was wiederum
Erweiterungen der mathematischen Notation zur Folge hatte etc.
22/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Das Gleichheitszeichen 2. Auf den Schultern. . .
Einen wesentlichen Beitrag dazu leistete Robert Recorde10 ,
dem das Gleichheitszeichen zu verdanken ist:11
Die heute ungewohnten cossischen Zeichen bezeichnen hier die
nullte, erste und zweite Potenz, so dass sich in heutiger
Schreibweise Folgendes ergibt:
34x 2 − 12x = 40x + 480 − 9x 2
10
Ca. 1510–1558
11
Siehe [Reich 2010][S. 79].
23/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Heaviside und p 2. Auf den Schultern. . .
Ein kleines Beispiel, wie (Kunst-)Sprachen unser Denken
beeinflussen bzw. manche Überlegungen erst möglich machen:
Oliver Heaviside führte den p-Operator ein, um Ableitungen zu
notieren, d.h. er definierte (das Folgende ist stellenweise sehr
vereinfacht)
d
p= .
dt
Wenn p einer Ableitung entspricht, was ist dann p1 ?
Offensichtlich ist dies die Umkehrfunktion von p, da p p1 = 1, d.h.
1
p entspricht einer Integration!
Was passiert, wenn man mit p einfach rechnet“?
”
24/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014√
p 2. Auf den Schultern. . .
Da p1 einer Integration entspricht, gilt (etwas vereinfacht, ohne
Netz und doppelten Boden)
tn
Z Z
1
= . . . 1 dt =
pn n!
Und jetzt wird es auf den ersten Blick etwas esoterisch: Was ist
beispielsweise eine halbe Integration“, d.h. was ist eigentlich
”
1 1
1 = √ ?
p2 p
Mit der Gamma-Funktion Γ, die als Erweiterung der Fakultät auf
positive reelle Zahlen aufgefasst werden kann, ergibt sich für eine
halbe Integration“ Folgendes:
”
√
1 t
1 =
p2 Γ(1 + 12 )
25/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014√
p 2. Auf den Schultern. . .
Auf die Idee, eine halbe Integration“ zu betrachten, wäre man
”
ohne den Notationstrick mit p wohl nicht gekommen.
Das Verblüffendste daran ist, dass dieser Operator eine wichtige
Rolle in den Untersuchungen Heavisides zum Elektromagnetismus
spielen sollte!12
. . . und das alles nur durch Notation, d.h. in diesem Fall Sprache!
:-)
Nun aber endlich zu Programmiersprachen:
12
Siehe [Focke 1962][S. 635 ff.].
26/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmieren:
Die ersten ∼1900 Jahre
27/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Heron von Alexandria 3.1 Heron von Alexandria
Heron von Alexandria (lebte vermutlich im 1. Jahrhundert) war
nicht nur einer der schöpferischsten Ingenieure der Antike, sondern
auch einer der ersten Programmierer.
Er schuf Theatermaschinen, selbstfahrende Tempelwagen etc., die
in gewissem Sinne programmierbar waren.
Zu seiner Zeit riefen diese Maschinen sicherlich große
Verwunderung hervor, was wohl auch der Auslöser für den Bau der
Tempelwagen gewesen sein wird – Arthur C. Clarkes drittes Gesetz
vorwegnehmend:13
Jede hinreichend fortschrittliche Technologie ist von Magie nicht
”
zu unterscheiden.“
13
Siehe http://de.wikipedia.org/wiki/Clarkesche Gesetze, Stand 23.07.2011.
28/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Herons Tempelwagen 3.1 Heron von Alexandria 29/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014
Jacquard-Webstühle 3.2 Jacquard
Zu Beginn des 19. Jahrhunderts entwickelte Joseph Marie
Jacquard einen lochkartengesteuerten Webstuhl, mit dessen Hilfe
eine Massenproduktion von Textilien mit komplexen Mustern
möglich wurde.
Hauptunterschied zur Programmierung der Automaten des Heron
von Alexandria war die Möglichkeit, Programme beliebig häufig
ausführen zu lassen, da das Ablesen von Lochkarten nicht
zerstörend war (im Unterschied zur Schnurprogrammierung des
Tempelwagens etc.).
30/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Jacquard-Webstühle 3.2 Jacquard
(Abbildung von Christiane Utsch vom Atelier für Parametik, mit freundlicher Genehmigung.)
31/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Player Pianos 3.3 Player Pianos
Auch Musikinstrumente wie die Player Pianos wurden mit
Lochstreifen gesteuert:
(Abbildung aus http://www.nancarrow.de/images%201/02-Player-Piano.jpg, Stand 06.10.2011.)
32/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Babbage und Lovelace 3.4 Babbage und Lovelace
Bereits 1837 beschrieb Charles Babbage die sogenannte Analytical
”
Engine“,14 bei der es sich um einen programmierbaren
mechanischen Rechner handelte, der zu seinen Lebzeiten allerdings
nicht umgesetzt werden konnte (1991 wurde am Londoner Science
Museum auf der Basis von Babbages Plänen eine funktionsfähige
Analytical Engine gebaut, die zeigt, dass Babbages Ideen durchaus
umsetzbar und vor allem korrekt waren).
Die folgende Abbildung (Bild von Bruno Barral - mit freundlicher
Genehmigung) zeigt ein von Babbage gebautes
Experimentalmodell der Analytical Engine (ein Berater würde
heutzutage von einem Proof-of-Concept sprechen).
14
Siehe hierzu vor allem [Dotzler 1996].
33/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Die Analytical Engine 3.4 Babbage und Lovelace 34/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014
Analytical Engine, Lochkarten 3.4 Babbage und Lovelace
Programmiert wurde sie mit
Lochkarten: Die kleinen Karten
im Vordergrund sind Opera-
”
tional Cards“, d.h. sie spezi-
fizieren einzelne Instruktionen,
während die längeren Karten
Variable Cards“ darstellen und
”
die Adressen von Operanden
enthalten. Bemerkenswert ist,
dass eine Karte auf mehre-
ren Operandengruppen arbei-
ten kann – eine Vorwegnahme
der Vektorrechneridee. . .
(Bildquelle: http://upload.wikimedia.org/wikipedia/
commons/0/0d/PunchedCardsAnalyticalEngine.jpg, Stand 24.07.2011.)
35/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Die erste Programmiererin 3.4 Babbage und Lovelace
Augusta Ada King, Countess of Lovelace, die Tochter Lord Byrons,
wurde durch ihre Bekanntschaft mit Charles Babbage und ihre
Begeisterung für die Analytical Engine nicht nur zur ersten
Chronistin des Computer-Zeitalters, sondern vor allem zur ersten
Programmiererin überhaupt.
Unter Anderem entwickelte sie ein Programm zur Berechnung von
Bernoulli-Zahlen und schreckte auch vor der Idee sehr langer
Programme, die, wie sie schrieb, weit über 20000 Lochkarten
benötigen würden, nicht zurück15 und schrieb:16
We may say most aptly that the analytical engine weaves algebraic
”
patterns just as the Jacquard looms weaves flowers and leaves.“
Die folgende Abbildung17 zeigt das genannte Programm.
15
Siehe [Menabrea 1842] .
16
Siehe [Reynolds, Tymann 2008][S. 7].
17
Siehe http://www.fourmilab.ch/babbage/figures/menat6ps.zip, Stand 24.07.2011.
36/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Bernoulli-Zahlen 3.4 Babbage und Lovelace 37/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014
Bedingte Ausführung 3.4 Babbage und Lovelace
Was die Analytical Engine aus allen Entwicklungen bis etwa Mitte
der 1940er Jahre heraus ragen lässt, ist ihre Möglichkeit,
sogenannte bedingte Sprünge auszuführen.
Diese Fähigkeit einer Maschine führt zu einem nahezu
unbeschränkten Maß an Komplexität hinsichtlich ihrer Aktionen,
was sie erst zu einer wirklich universellen Maschine, einem
Computer im heutigen Sinne, werden lässt.
Ohne diese Fähigkeit zu bedingten Entscheidungen wären
Programme, die mehr als eine unabänderliche Folge von Befehlen
darstellen, nicht möglich. So gesehen stellt die Analytical Engine
einen der wichtigsten Schritte auf dem Weg zu unseren modernen
Computern dar.
38/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Lessons learned 3.5 Lessons learned
Lessons learned:
Die Idee des Programmierens ist viel älter, als meist
angenommen wird.
Mit Lochstreifen lassen sich Schleifen bauen – sogenannte
Loops“.
”
Sollen viele gleiche Operationen auf unterschiedlichen
Operanden ausgeführt werden, empfiehlt sich, nicht pro
Operandensatz eine Instruktion zu verwenden, sondern eine
Instruktion auf alle betreffenden Operanden anzuwenden.
Vorwegnahme des Vektorrechners bzw. SIMD-Prinzips!
39/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 20144. ∼1940 bis ∼1955
∼1940 bis ∼1955
40/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmieren mit Kabeln 4. ∼1940 bis ∼1955
Viele Maschinen der 1940er und 1950er Jahre verfügten zwar über
Speicherzellen, die jedoch meist nur für Variablen genutzt werden
konnten, so dass keine Speicherprogrammierung der Rechner
möglich war.
Da eine Steuerung durch Lochkarten oder -streifen der durch den
Einsatz von Röhren gesteigerten Arbeitsgeschwindigkeit nicht mehr
angemessen war, wurde die Programmierung solcher Maschinen
meist mit Hilfe einer variablen Verdrahtung vorgenommen.
Ein schönes Beispiel hierfür sind die IBM 604 und 605:
41/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmieren mit Kabeln 4. ∼1940 bis ∼1955
(Mit freundlicher Genehmigung der D. H. Ramsey Library, Special Collections & University Archives.)
42/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Ein Patchboard 4. ∼1940 bis ∼1955 43/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014
IBM 650 4. ∼1940 bis ∼1955
Einer der ersten kommerziell ausgesprochen erfolgreichen
speicherprogrammierten Rechner war die IBM 650.
Dieser vollständig röhrenbestückte Rechner verfügte über eine
Magnettrommel mit einer Kapazität von 2000 Maschinenwörten,
die sowohl für die Speicherung von Instruktionen als auch von
Daten genutzt werden konnten.
Aus heutiger Sicht nahezu unvorstellbar ist, dass mit einem so
kleinen Speicher hochkomplexe Softwaresysteme entwickelt und
betrieben werden konnten. Unter anderem wurde für die IBM 650
einer der ersten Compiler, IT“, entwickelt.
”
Die folgende Abbildung zeigt eine IBM 650:
44/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014IBM 650 4. ∼1940 bis ∼1955
(Abbildung: Lawrence Livermore Laboratory, mit freundlicher Genehmigung.)
45/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Quadratwurzelberechnung 4. ∼1940 bis ∼1955
Quadratwurzelberechnung in Assembler:18
18
Siehe [IBM 1955][S. 88].
46/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014IT 4. ∼1940 bis ∼1955
So faszinierend die Programmierung einer solchen Maschine in der
ihr eigenen Maschinensprache oder Assembler auch ist, hat sie
dennoch schwerwiegende Nachteile:
Extrem zeitaufwändig.
Vergleichsweise fehleranfällig.
Maximale Maschinennähe aber ebenso maximale
Problemferne. . .
Entsprechend früh kam die Idee auf, Hochsprachen“ zu
”
entwickeln, die von der eigentlichen Maschine abstrahieren sollten
und mit Hilfe von Übersetzerprogrammen, Compilern“, in die
”
Maschinensprache der Zielmaschine übersetzt werden.
Die folgenden beiden Folien zeigen ein Programm in einer der
ersten Hochsprachen, IT“, welches das Integral über eine
”
Funktion mit Hilfe der Simpsonregel berechnete.19
19
Siehe [Perlis et al. 1958][S. 3.30 ff.].
47/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014IT 4. ∼1940 bis ∼1955
Simpsonregel
1 SIMPS ONS RULE
2 C1 C2 RANGE AB
3 C3 ERROR
4 I1 R EAD F LINK
5 4K I 3K 0K 1K 10 0 K F
6 G5 F GET END 2
7 Y1 Z Q22 E K Y 5 X 1S2XI3Q F FUNCTION 9
8 G I2 F RETURN
9 TI3 T Y4 T C 3 T Y2 F 4
10 H F STOP
11 Y6 Z 0J F CLEAREND 5
12 Y2 Z LC2 MC1RD 2J F SET H
13 8K I 4K 1K1K 2K F END ITER
14 Y5 Z C I4 F SET P 3
15 I2 Z 8 F SET LINK
16 G I1 F TO FNCTN
17 Y6 ZY 6 S Y1 X Y 2 F COMP END 8
18 Y4 ZY6 F INIT INT
19 Y3 Z 0J F 1
20 Y7 Z C2 M Y2D 2J F
21 6 K Y5K C1SY 2K 2J XY2K Y7K F INNERSUM
22 I2 Z 6 F SET LINK 11
23 GI1 F TO FNCTN 7
24 Y3 Z Y3 S Y1 F NEXT DEL 6
25 Y7 Z Y6 S Y2 X 4J X Y3 F NEW INT
26 G10 IF C3 W ALY7 M Y4 R F CHCK END
27 Y4 Z Y7 F
28 Y6 Z J25 X Y4 S Y6 F NEXT G
29 Y2 Z Y2D 2J F NEXT H
30 G 1 F TO SET P
31 Y4 ZY 4 D 3J F INTEGRAL 10
32 G4 FF TO MASTER
Simpsonregel
48/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014IT 4. ∼1940 bis ∼1955
Simpsonregel
1 SIMPSONS RULE
2 C1 C2 RANGE AB
3 C3 ERROR
4 I1 READ F LINK
5 4, I3, 0, 1, 100, F
6 2: GOTO 5 F GET END
7 9: Y1Lochkarten 4. ∼1940 bis ∼1955
Wie sah eigentlich die Programmierumgebung dieser frühen Jahre
aus?
(Siehe [Jacobs 1986][S. 242].)
50/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Lochen 4. ∼1940 bis ∼1955
(Siehe [Jacobs 1986][S. 250].)
51/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Programmausführung 4. ∼1940 bis ∼1955
(Siehe [Jacobs 1986][S. 252].)
52/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Output 4. ∼1940 bis ∼1955
(Siehe [Jacobs 1986][S. 256].)
53/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Analyse und Debugging 4. ∼1940 bis ∼1955
(Siehe [Jacobs 1986][S. 258].)
54/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Fertiges Programm 4. ∼1940 bis ∼1955
(Siehe [Jacobs 1986][S. 200].)
55/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Lessons learned 4.1 Lessons learned
Lessons learned:
Wechselnde Verdrahtung hat Vorteile: Kein von
Neumann-Flaschenhals etc.
Vorwegnahme von Datenflussmaschinen und FPGAs, könnte
in naher Zukunft wieder sehr interessant werden!
Assembler ist gar nicht die schlechteste Art, einen Computer
zu programmieren. :-)
Man braucht keine bunte IDE, um wirklich guten Code
schreiben zu können. :-)
Wenig Speicher/CPU-Leistung erzwingt effizienten Code!
(Davon könnte Microsoft einmal etwas lernen!)
56/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 20145. Einige frühe Hochsprachen
Einige frühe Hochsprachen
57/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014FORTRANSIT 5. Einige frühe Hochsprachen
Schon etwas abstrakter, d.h. problemnäher, war FORTRAN, 1956
von John Backus entwickelt, hier eine Matrixmultiplikation in
FORTRANSIT, einem FORTRAN-Dialekt:
Matrixmultiplikation
1 C RECTANGULAR MATRIX
2 C MULTIPLICATION
3 DIMENSION A(4,5), B(5,3)
4 READ 1,A,B
5 READ 1,N,M,L
6 DO 4 J=1,N
7 DO 4 I=1,M
8 SUM=0.0
9 DO 3 K=1,L
10 3 SUM = SUM+A(I,K) * B(K,J)
11 4 PUNCH 1, SUM, I,J
12 END
Matrixmultiplikation
58/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014FORTRAN 5. Einige frühe Hochsprachen
Interessant an FORTRAN sind die folgenden Punkte:
Die Sprache wird noch immer im
technisch/naturwissenschaftlichen Bereich eingesetzt.
FORTRAN besticht durch gute Standardisierung (FORTRAN
66, 77, 8x, 90, . . . ).
Es ist definitiv keine schöne oder besonders innovative
Sprache!
Offenbar setzt sich nicht immer die bessere Idee durch, wie das
folgende Beispiel APL zeigen wird:
59/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014APL 5. Einige frühe Hochsprachen
1957 entwickelte Ken Iverson (IBM) eine neue mathematische
Notation, die er in einem Buch A Programming Language“
”
beschrieb. Zunächst war APL“ wirklich nur als neue, konsistente
”
Notationsform gedacht, die unter anderem bei IBM zur formalen
Beschreibung der Architektur der Baureihe /360 genutzt wurde.
1963 wurde eine erste Implementation der Sprache auf einer IBM
1620 umgesetzt, weitere Interpreter (!) für IBM-Großrechner
folgten in den nächsten Jahren.
Was ist an APL besonders? Bis heute zählt APL zu den
außergewöhnlichsten Programmiersprachen überhaupt und ist in
manchen Bereichen noch immer führend. Der Hauptvorteil von
APL ist der extrem hohe Abstraktionsgrad von den Gegebenheiten
der zugrunde liegenden Maschine und die hohe Problemnähe:
60/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014APL-Beispiel 5. Einige frühe Hochsprachen
Als kleines Beispiel diene die Berechnung der Summe
100
X
i.
i=1
In FORTRAN könnte das wie folgt geschehen:
PROGRAMM GAUSS
IMPLICIT NONE
INTEGER*4 I, SUMME/0/
C
DO 10 I = 1, 100
10 SUMME = SUMME + I
WRITE(*,*) SUMME
END
61/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014APL-Beispiel 5. Einige frühe Hochsprachen
Man sieht, dass man sich in FORTRAN um eine ganze Reihe von
Dingen kümmern muss, die mehr mit der Maschine und weniger
mit dem eigentlich zu lösenden Problem zusammen hängen.
Ganz anders in APL – hier lässt sich die gegebene Aufgabe wie
folgt lösen:
+/ι100
Elegant, nicht wahr? Der Trick steckt hier im Reduktionsoperator
/.
(Die APL-Lösung läuft letztlich darauf hinaus, einen Vektor der
Form (1, 2, 3, . . . , 100) zu bilden und dann daraus
(1 + 2 + 3 + · · · + 100) zu berechnen.)
62/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Primzahlen 5. Einige frühe Hochsprachen
Lassen Sie uns eine Liste von Primzahlen erzeugen – das Sieb des
Eratosthenes bietet sich hierfür an. In C könnte das wie folgt
aussehen:
primes.c
1 #include
2 #define R 100
3 int main()
4 {
5 int i, j, v[R + 1];
6
7 for (i = 2; iPrimzahlen in APL 5. Einige frühe Hochsprachen
(∼ R ∈ R ◦ . × R)/R ← 1 ↓ ιR
64/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Primzahlen in APL 5. Einige frühe Hochsprachen
Wie funktioniert das?
Erst einmal ohne explizite Schleifen!
Grundidee ist, eine Multiplikationstabelle aufzustellen (Spalten
und Zeilen laufen von 2 bis 100).
Auswahl aller Elemente eines Vektors mit den Elementen 2 bis
100, die nicht in der Matrix enthalten sind.
Diese Elemente sind offensichtlich Primzahlen.
Es geht aber auch ganz anders – während APL eine komplexe
Syntax besitzt, kann man auch Programmiersprachen fast ohne
Syntax entwickeln, die dennoch – oder gerade darum – sehr
leistungsfähig sind:
65/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014LISP 5. Einige frühe Hochsprachen
1958 entwickelte John McCarthy die Programmiersprache LISP, die
ebenfalls interpretiert ausgeführt wurde und die erste
homoikonische“ Programmiersprache darstellt, d.h. die erste
”
Sprache, in der Programme in der gleichen Datenstruktur (Form)
ausgedrückt wurden, welche die grundlegende Struktur der Sprache
selbst ist.
Im Falle von LISP handelt es sich bei dieser Datenstruktur um
Listen – (fast) alles in einem LISP-Programm ist letztlich eine Liste
– auch das Programm selbst, was es erlaubt, Metaprogramme zu
schreiben, die ihrerseits Programme schreiben oder modifizieren. . .
Die folgende Folie zeigt ein LISP-Programm aus dem Jahre 1959:20
20
Quelle: http://funcall.blogspot.com/2011/02/early-lisp-programi .html, Stand 31.07.2011.
66/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014LISP-Beispiel 5. Einige frühe Hochsprachen
TST M948-371-P. FOX-EXERCISE 1
DEFINE
(((COLLAPSE,(LAMBDA,(L),(COND,
((ATOM,L), (CONS,L,NIL))
((NULL,(CDR,L)),
(COND,((ATOM,(CAR,L)),L),(T,(COLLAPSE,(CAR,L)))))
(T,(APPEND,(COLLAPSE,(CAR,L)),(COLLAPSE,(CDR,L))))
))))) ()
COLLAPSE ((((A,B),((C))),((D,(E,F)),(G),((H))))) ()
COLLAPSE ((A,(B,(C,(D,(E))),F,(G,(H,J))))) ()
COLLAPSE ((((((A),B),C),D),E)) ()
STOP))))))))))STOP
FIN M948-371-P. FOX-EXERCISE 1
67/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014JOSS 5. Einige frühe Hochsprachen
Eine weitere verblüffende Entwicklung war JOSS“, das
”
JOHNNIAC Open Shop System“ – eines der ersten interaktiven
”
Timesharingsysteme überhaupt, dessen erste Version 1963 fertig
gestellt wurde.
Die beiden folgenden Abbildungen zeigen einen JOSS-Nutzer (nach
[Gruenberger 1968][S. 20]) sowie das Protokoll einer typischen
JOSS-Sitzung (nach [Shaw 1965][S. 5]):
68/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014JOSS-Anwender 5. Einige frühe Hochsprachen 69/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014
JOSS-Beispiel 5. Einige frühe Hochsprachen
(Siehe [Shaw 1965][S. 5].)
70/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Lessons learned 5. Einige frühe Hochsprachen
Lessons learned:
Nur, weil eine Programmiersprache schon alt ist – APL blickt
auf über 50 Jahre Entwicklung zurück –, heißt dies noch lange
nicht, dass man nichts von ihr lernen könnte.
APL ist hinsichtlich seiner Ausdrucksstärke und damit auch
Prägnanz bis heute eigentlich unübertroffen!
Viele Probleme, die man traditionell mit einer Schleife lösen
würde, lassen sich mit einem anderen Ansatz ohne Schleifen,
ohne Bedingungen etc. lösen – solche Ansätze sind nicht nur
interessant, sondern oftmals sicherer!
Unsere heutigen Shells etc. basieren zu einem großen Teil auf
JOSS.
Es ließen sich noch viel mehr interessante Beispiele aufzählen, aber
das wäre eigentlich Stoff für ein ganzes Semester. . .
71/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 20146. Literatur und Poesie
Literatur und Poesie
72/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Literatur und Poesie 6. Literatur und Poesie
Nun noch ein kleiner Ausblick auf Literatur und Poesie: Ist beides
auch in Programmiersprachen möglich? Ja! Wer einmal ein schönes
Programm gelesen hat, weiss, dass Programme durchaus Literatur
sein können.
John Bentley fragte einmal Folgendes:
“When was the last time you spent a pleasant evening
in a comfortable chair, reading a good program?”21
Donald E. Knuths The Art of Computer Programming ist
nicht nur aus algorithmischer Sicht hochinteressant und spannend,
sondern auch einfach eine Fundgrube schönen Codes. . .
Und Poesie?
21
See [Bentley 1986].
73/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Perl Poetry 6. Literatur und Poesie
# Black Perl, adapted for Perl 5 by Jonadab.
# Adapted from Black Perl, as seen in the Camel,
# 2nd ed., p 553
BEFOREHAND: close door, each window & exit; wait until time;
open spell book; study; read (spell, $scan, select); tell us;
write it, print the hex while each watches,
reverse length, write again;
kill spiders, pop them, chop, split, kill them.
unlink arms, shift, wait and listen (listening, wait).
sort the flock (then, warn "the goats", kill "the sheep");
kill them, dump qualms, shift moralities,
values aside, each one;
die sheep; die (to, reverse the => system
you accept (reject, respect));
next step,
kill next sacrifice, each sacrifice,
wait, redo ritual until "all the spirits are pleased";
do it ("as they say").
do it(*everyone***must***participate***in***forbidden**s*e*x*).
return last victim; package body;
exit crypt (time, times & "half a time") & close it.
select (quickly) and warn next victim;
AFTERWARDS: tell nobody.
wait, wait until time;
wait until next year, next decade;
sleep, sleep, die yourself,
die @last
. . . es wurde sogar eine Poetry Optimization“ in Perl eingeführt,
”
um Perl Poetry zu vereinfachen. . .
74/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 20147. Ausblick
Ausblick
75/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Ausblick 7. Ausblick
Was lässt sich zusammenfassend feststellen und raten?
Programmiersprachen haben einen immensen Einfluss darauf,
wie man die Welt wahrnimmt und beschreibt.
Wenn man nur einen Hammer hat, sieht jedes Problem wie
”
ein Nagel aus!“, d.h. man sollte mehr als einen Hammer in
seinem Werkzeugkasten haben (und keinen Vorschlaghammer
nutzen, wenn eine Fliegenklatsche genügt).
Welche Sprachen sollte man wenigstens in Grundzügen
kennen, um ein guter Programmierer zu werden (das ist
notwendig, nicht hinreichend!)?
Mindestens eine imperative Sprache: C, Fortran, . . .
Mindestens eine OO-Sprache: C++, C#, Java (, Simula), . . .
Mindestens eine dynamische Sprache: Perl, Python, . . .
LISP oder Scheme
Prolog
APL
Forth
76/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Ratschläge 7. Ausblick
Ratschläge an die nächste Programmierergeneration:
Lassen Sie sich nicht von Managern einreden, dass Java für
jeden Anwendungsfall das geeignete Mittel ist (meiner
Meinung nach ist Java eigentlich für keinen Anwendungsfall
das geeignete Mittel, aber das nur am Rande).
Seien Sie multilingual!
Spielen Sie mit unterschiedlichen Sprachparadigmen (apropos
Spielen“: Lesen Sie beispielsweise [Barski 2011]. :-) ).
”
Entwickeln Sie einmal selbst eine Sprache – nicht nur den
x-ten Compiler für PL/0 oder etwas in der Art.
Vergessen Sie nie, dass Sie für eine Maschine mit sehr
begrenzten Ressourcen programmieren!
Programmieren Sie eine Sprache so, wie es ihr angemessen ist!
Nichts ist schlimmer als das FORTRAN in any
”
language“-Syndrom!
77/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Vielen Dank! 7. Ausblick
Vielen Dank für Ihre
Aufmerksamkeit!
(Der Autor kann unter ulmann@vaxman.de erreicht werden.)
78/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 20148. Bibliographie
Bibliographie
79/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Bibliographie 8. Bibliographie
[Barski 2011] Conrad Barski, LAND OF LISP – Learn to Program
”
in Lisp, One Game at a Time!“, no stach press, San Francisco,
2011
Jon Bentley, “Programming pearls: literate programming”, in
Communications of the ACM, Volume 29, Issue 5, May 1986
[Dean 1996] C. N. Dean, M. G. Hinchey (Eds.), Teaching and
Learning Formal Methods, Academic Press, 1996
[Dotzler 1996] Bernhard Dotzler (Hrsg.), Babbages
”
Rechen-Automate“, Springer-Verlag, 1996
[Focke 1962] Joachim Focke, Distributionen und
”
Heaviside-Kalkül“, in Wissenschaftliche Zeitschrift der
Karl-Marx-Universität Leipzig, 11. Jahrgang, 1962, S. 627–629
80/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Bibliographie 8. Bibliographie
[Gruenberger 1968] F. J. Gruenberger, The History of the
”
JOHNNIAC“, The RAND Corporation, MEMORANDUM
TK-5654-PR, October 1968, http://www.rand.org/pubs/
research memoranda/2005/RM5654.pdf
[IBM 1955] IBM, 650 – magnetic drum data-processing machine,
”
manual of operation“, International Business Machines
Corporation, 1955, Form 22-6060-1
[Jacobs 1986] John F. Jacobs, The SAGE Air Defense System – A
”
Personal History“, The MITRE Corporation Bedford,
Massachusetts, 1986
[Menabrea 1842] L. F. Menabrea, Sketch of the Analytical Engine
”
Invented by Charles Babbage“, Bibliothéque Universelle de Genéve,
October, 1842, No. 82
81/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Bibliographie 8. Bibliographie
[Neugebauer 1969] O. Neugebauer, Vorlesungen über
Geschichte der antiken mathematischen Wissenschaften, Erster
Band, Vorgriechische Mathematik, Zweite, unveränderte Auflage,
Springer-Verlag, 1969
[Perlis et al. 1958] A. J. Perlis, J. W. Smith, H. R. VanZoeren,
INTERNAL TRANSLATOR (IT) A COMPILER FOR THE 650“,
”
Computation Center Carnegie Institute of Technology, 1958
[Reich 2010] Ulrich Reich, Wer hat das Gleichheitszeichen
”
erfunden?“, in Forschung aktuell 2010, Hochschule Karlsruhe
Technik und Wirtschaft, S. 79–80
[Reynolds, Tymann 2008] Carl Reynolds, Paul Tymann, Principles
”
of Computer Science“, Schaum’s Outlines of Principles of
Computer Science, McGraw-Hill, 2008
82/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Bibliographie 8. Bibliographie
[Santayana 1906] George Santayana, The Life of Reason or the
”
Phases of Human Progress“, Vol. 1 of 4 ( Introduction and Reason
”
in Common Sense“), London, Archibald Constable & Co. Ltd.,
1906, S. 284
[Shaw 1965] J. C. Shaw, JOSS: EXPERIENCE WITH AN
”
EXPERIMENTAL COMPUTING SERVICE FOR USERS AT
REMOTE TYPEWRITER CONSOLES“, THE RAND
CORPORATOIN, P-3149
[Wittgenstein 1945] Ludwig Wittgenstein, Philosophische
Untersuchungen, http://www.geocities.jp/mickindex/
wittgenstein/witt pu gm.html, retrieved 24.07.2013
83/83 Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann 22. Januar 2014Sie können auch lesen