Systematisches Programmieren 1972
|
über Wirth:
|
Bildquelle: Wikipedia |
Erfinder von der Programmiersprache Pascal
Niklaus Wirth war seit 1968 ordentlicher Professor für Computerwissenschaften (später Informatik) der ETH Zürich und emeritierte im Ende April 1999. Niklaus Wirth diplomierte 1959 als Elektroingenieur an der ETH. Danach studierte er an der Université Laval, Kanada. Er doktorierte 1963 an der University of California in Berkeley mit Hilfe eines Stipendiums der Ford Foundation bei Professor H. D. Huskey. Von 1963 bis 1967 lehrte er als Assistenzprofessor an der Stanford University und danach an der Universität Zürich. 1968 wurde er zum Professor für Computerwissenschaften (später Informatik) an die ETH Zürich gewählt. Seine Interessen galten der Software-Technik und ihren Werkzeugen, vorab den Programmiersprachen. 1970 definierte er die Sprache Pascal, 1980 Modula-2 und 1988 Oberon. Er ist Konstrukteur des Rechners Lilith, 1986 des Rechners Ceres. Später befasste er sich mit dem Bau von Werkzeugen für den Schaltungsentwurf mit programmierbaren Bauteilen. Niklaus Wirth ist Mitglied der Association for Computing Machinery (acm), der Computer Society (IEEE), der Schweizerischen Akademie der Technischen Wissenschaften (SATW), der US National Academy of Engineering, der Berlin-Brandenburgischen Akademie und des Ordens Pour le mérite. Er ist Ehrendoktor der Universitäten von York, Linz, Laval (Quebec) und Novosibirsk, der Open University sowie der ETH Lausanne. 1984 erhielt er den acm Turing Award und 1987 den Computer Pioneer von IEEE. |
Algol 1961 -8im Wirth-Interwiew der Wikipedia)
er war in Berkely in einem Team das den Compiler erfunden hat, ab 1963 Ass.Prof in Standfort
1964 kam er in die Algol-Gruppe (wozu auch Ruttishauser gehörte, der auch vor allem Mathematiker war, das war zuviel Theorie vom Mathematikern)
er wollte etwas Praktisches, nützlich für Anwemndungen
1968 kam er an die ETH um Computerscience einzuführen
in Zürich war Fortran und Algol (Basic gabs auch, aber das ist primitiv)
daraus entstand Pascal
N. Wirth schreibt über grundlegende Texte von E. Dijkstra und C. Hoare, zwei Taylors der Informatik, die erkannt haben, dass Programmieren "wissenschaftlicher Behandlung und Darlegung zugänglich ist" und damit ein "Revolution" in der Programmierung bahnten: "Beide Artikel argumentieren überzeugend, dass viele Programmierfehler vermieden werden können, wenn man den Programmierern die Methoden und Techniken, die sie bisher intuitiv und oft unbewusst verwendeten, zur Kenntnis bringt" (Wirth, 1983, S. 7).
Die "Erfindung der Programmiersprache" besteht also in der Erfindung, den Steuermechanismus so zu konstruieren, dass seine Bedienung sprachhaft wird. Deshalb kann N.Wirth, der Erfinder von vielen Programmiersprachen, sagen: "Eine Programmiersprache stellt einen abstrakten Computer dar, der die Ausdrücke dieser Sprache verstehen kann" (Wirth, 1983,19).
”Programmieren ist eine konstruktive Tätigkeit” (Wirth,1983,10).
”N.Wirth (...) vergleicht das Programmieren weniger mit dem Schreiben in einer Sprache als vielmehr mit dem Konstruieren einer neuen Maschine auf der zugrundeliegenden Allzweckmaschine” (N.Wirth, zit.in: Ebeling,1988,169).
Damit sich nicht wieder neue quasi sekundäre Abbildungsnotwendigkeiten einschleichen konnten, wie sie sich in Flussdiagrammen und Struktogrammen andeuteten, wurde von Programmiersprachen zunächst hohe Selbsterläuterung gefordert, was Fortran und Cobol begründete. Noch weiter war die Erkenntnis fortgeschritten, als mit der wegweisenden Sprache Pascal von N.Wirth Programme mit möglichst wenig explizitem Dokumentationsbalast ermöglicht wurden. Pascal ist keineswegs eine leicht erlernbare Programmiersprache, wie etwa Duden schreibt (Duden, Informatik,1988,432), sondern verlangt im Gegenteil eine wesentlich tiefere gedankliche Durchdringung als etwa Basic oder Cobol. Natürlich lassen sich anspruchsvolle Aufgaben mit höher entwickelten Sprachen - wenn man sie beherrscht - einfacher lösen.
Wo die Zeichen der Maschinensprachen nicht dadurch wirklich "verzwischenmenschlicht" werden, dass sie als Anweisungen an Menschen gerichtet werden, sind sie keine Symbole, obwohl sie häufig "Symbole" genannt werden. So bezeichnet beispielsweise auch N.Wirth die Entitäten des Vokabulars seiner Sprache "Modula-2" mit dem Ausdruck "Symbole", obwohl er dafür bereits "Token" vereinbart hat und der Ausdruck "Symbol" auch für ihn zusätzliche Missverständnisse hervorzurufen scheint.
”Each sentence (programm) is a finite sequence of symbols from a finite vocabulary. The vocabulary of Modula-2 consists of identifiers, numbers, strings, operators, and delimiters. They are called lexical symbols or tokens, and in turn are composed of sequences of characters” (Wirth, 1978,5). Der von N.Wirth angefügte Hinweis ”(Note the distinction between symbols and characters)” ist sehr doppelsinnig.
Viele Informatiker bezeichnen die "Zeichen" des verwendeten Alphabets als "Zeichen" (characters) und die im Programm verwendeten, aus einem oder mehreren "Alphabetzeichen" bestehenden "Zeichen" als "Symbole". Eine vollständigere Redeweise, die ohne den Ausdruck "Symbol" auskommt, schlägt beispielsweise N.Wirth in der Grundlegung von Modula-2 vor (s. Anm. 155). Seine Programmtexte bestehen aus "tokens" (realisierte Vertreter einer Kategorie) eines "types" (Kategorie), die im "Vokabular" der Sprache enthalten sind. "Typen" sind - neben Namen, Zahlen und Zeichenketten, die natürlicherweise aus einem oder mehreren Zeichen bestehen - Operatoren und Begrenzer.
Von der Reduktion des Programmieraufwandes durch Programmiersprachen, welche IBM mit Fortran anstrebte, dürfte ein wesentlicher Anteil darin bestehen, dass die Programmierer, die dem Computer Befehle geben, praktisch nichts vom Computer wissen müssen. Was es alles zu wissen gäbe, erläutert N.Wirth anhand des vermeintlich einfachen Beispiels, wie die Position eines Objektes im Computer darzustellen ist. Das Problemchen wäre in modernen Computer ohne Programmiersprachen gewaltig. ”Deshalb kann von einem Programmierer kaum verlangt werden, dass er über die zu verwendende Zahlendarstellung oder gar über die Eigenschaften der Speichervorrichtung entscheidet. (...) In diesem Zusammenhang wird die Bedeutung der Programmiersprachen offensichtlich” (Wirth, 1983,18f).
Wirth, N.: Algorithmen und Datenstrukturen, Stuttgart 1983
Project Oberon (New Edition 2013)
http://www.inf.ethz.ch/personal/wirth/ProjectOberon/index.html
[ A Brief History of Software Engineering ../text_e/IEEE-Annals.pdf ]
N. Wirth beklagt, dass Softwareengeering keine Disziplin wurde, auch weil sich kaum jemand für dessen Geschichte interessiere. Dann schreibt er (trotzdem) seine Geschichte zu dieser Geschichte.
Er beginnt nicht irgendwo und schon gar nicht am Anfang, sondern dort, wo seiner Meinung nach wichtige Weichen gestellt wurden, ohne dass der Zug darauf gefahren wäre. Er schreibt seine eigene Geschichte als Geschichte des Softwarengineerings.
Nur nebenbei: Ich habe ein paar Jahre lang seinen Studenten an der ETH etwas Computer-Geschichte unter soziologischen Gesichtspunkten vorgelesen. Er hat mich dann mal "eingeladen", ihm meine Geschichte zu begründen, weil ihm diese Geschichte - oder was ihm davon zu Ohren kam - nicht passte. Jedenfalls mussten seine Studenten danach meine Vorlesung nicht mehr besuchen.
In seiner Geschichte sind Computer immerhin Maschinen. "Computer systems are machines of large complexity. This complexity can be mastered intellectually by one tool only: Abstraction." Er meint, sie seien komplex, ich würde dagegen von kompliziert sprechen. Er sieht in der Geschichte drei Phasen, weil er drei Programmiersprachen entwickelt hat.
Dijkstra hat das stukturierte Programmieren erfunden. Deshalb hat er eine strukturierte Programmiersprache, nämlich Pascal entwickelt. Dann hat Parnas die Modularisierung erfunden. Deshalb hat er eine modulare Programmiersprache, nämlich Modula entwickelt. Und schliesslich hat Dahl die Objekte erfunden. Deshalb hat er Oberon entwickelt. Das sind die historisch guten Seiten der Entwicklung, aber die Entwicklung hat leider immer den schlechten Weg genommen.
Kaum war die Hardware massenfähig, wurden anstelle der Mainframes Kleincomputer mit Unix auf den Markt gebracht und damit verbunden die Programmiersprache C, deren Konzeptlosigkeit als Freiheit der Programmierer verkauft wurde. Kurze Zeit später wurde es noch schlimmer, weil mit den Windows und der Maus die Ansprüche an die Programmierung noch erheblich grösser wurden. Hinzu kam eine nicht kontrollierbare Entwicklung von OpenSource und durch das Internet die Apps in Java, was wiederum konzeptlose Programmiersprachen zu grosser Verbreitung geholfen hat.
Ein Hauptproblem sieht N. Wirth in der vermeintlichen Lösung des Problems, die darin besteht, dass die Hardware immer schneller und billiger wird und so unsauberes Programmieren immer mehr verzeiht und mithin unterstützt.
N. Wirth hat sozusagen eine reine Lehre, die sich nicht um vordergründige Bedürfnisse von Microsoft-verseuchten Benutzern kümmert und von den Programmierern viel mehr Denkarbeit verlangt, was allenthalben anhand von "goto" diskutiert wurde. L. Torvald entgegnete, dass N. Wirth den frigging clue auch nicht gefunden habe.
Ich wundere mich auf einer anderen Ebene. Wenn ich mich nicht um kommerzielle Zusammenhänge kümmere, sondern um mit N. Wirth zu sprechen, um akademische, dann verstehe ich die Begrenzung auf Softwareengineering nicht. Dann würde ich von Technologie sprechen und mich dabei um eine Begrifflichkeit bemühen, die in welcher das Softwareengineering als solches begriffen werden kann. N. Wirth gibt dazu etliche Ansätze, wo er Computer als Maschinen begreift und das Programmieren als Handwerk (craft), das in einen Wissensprozess umschlägt, so dass in den Programmen, die zunächst nur der Steurung von Maschinen dienten, immer mehr Text sichtbar wird, der der mathematischen Vernunft unterliegt.
Ich wundere mich darüber, wieso wir uns auf mathematische Vernunft beschränken sollten, respektive darüber, warum Informatiker nicht auch in gesellschaftlichen Zusammenhängen denken sollen, wo sie im Zentrum der Produktivkraftentfaltung stehen. Kybernetik muss sich nicht auf Oberoncomputer beschränken.