Der Zoo der Programmiersprachen

Die Seite wird erstellt Darian Fritz
 
WEITER LESEN
Der Zoo der Programmiersprachen
Der Zoo der Programmiersprachen

                        Prof. Dr. Bernd Ulmann

                              22. Januar 2014

1/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann   22. Januar 2014
Der Zoo der Programmiersprachen
1. Einleitung

                          Einleitung

2/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann             22. Januar 2014
Der Zoo der Programmiersprachen
Worum 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 2014
Der Zoo der Programmiersprachen
Sprachen                                            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 2014
Der Zoo der Programmiersprachen
Anforderungen                                         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 2014
Der Zoo der Programmiersprachen
Sprachklassen                                         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 2014
Der Zoo der Programmiersprachen
Warum 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 2014
Der Zoo der Programmiersprachen
Programmiersprachen                                        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 2014
Programmiersprachen                                          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 2014
Programmiersprachen                                       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 2014
Sag’ 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 2014
Der 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 2014
Der 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 2014
Top 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 2014
Und. . . ?                                         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 2014
Warum 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 2014
Sprachengeschichte                                            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 2014
Sprachengeschichte                                         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 2014
Auf 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 2014
Die 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 2014
Sprachen 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 2014
Das 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 2014
Heaviside 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 2014
Programmieren:
        Die ersten ∼1900 Jahre

27/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann   22. Januar 2014
Heron 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 2014
Herons 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 2014
Jacquard-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 2014
Player 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 2014
Babbage 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 2014
Die 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 2014
Die 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 2014
Bernoulli-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 2014
Lessons 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 2014
4. ∼1940 bis ∼1955

              ∼1940 bis ∼1955

40/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Programmieren 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 2014
Programmieren 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 2014
Ein 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 2014
IBM 650                                    4. ∼1940 bis ∼1955

        (Abbildung: Lawrence Livermore Laboratory, mit freundlicher Genehmigung.)
45/83               Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Quadratwurzelberechnung                                 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 2014
IT                                     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 2014
IT                                   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 2014
IT                                     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:    Y1
Lochkarten                                   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 2014
Lochen                                    4. ∼1940 bis ∼1955

        (Siehe [Jacobs 1986][S. 250].)
51/83             Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Programmausführung                               4. ∼1940 bis ∼1955

        (Siehe [Jacobs 1986][S. 252].)
52/83             Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Output                                    4. ∼1940 bis ∼1955

        (Siehe [Jacobs 1986][S. 256].)
53/83             Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Analyse und Debugging                              4. ∼1940 bis ∼1955

        (Siehe [Jacobs 1986][S. 258].)
54/83             Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Fertiges Programm                                4. ∼1940 bis ∼1955

        (Siehe [Jacobs 1986][S. 200].)
55/83             Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann          22. Januar 2014
Lessons 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 2014
5. Einige frühe Hochsprachen

        Einige frühe Hochsprachen

57/83     Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann              22. Januar 2014
FORTRANSIT                              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 2014
FORTRAN                               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 2014
APL                              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 2014
APL-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 2014
APL-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 2014
Primzahlen                            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; i
Primzahlen 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 2014
Primzahlen 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 2014
LISP                              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 2014
LISP-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 2014
JOSS                              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 2014
JOSS-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 2014
Lessons 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 2014
6. Literatur und Poesie

          Literatur und Poesie

72/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann              22. Januar 2014
Literatur 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 2014
Perl 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 2014
7. Ausblick

                             Ausblick

75/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann            22. Januar 2014
Ausblick                                            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 2014
Ratschlä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 2014
Vielen 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 2014
8. Bibliographie

                      Bibliographie

79/83   Der Zoo der Programmiersprachen – Prof. Dr. Bernd Ulmann             22. Januar 2014
Bibliographie                                     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 2014
Bibliographie                                      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 2014
Bibliographie                                     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 2014
Bibliographie                                      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 2014
Sie können auch lesen