Dijkstra macht in seinem Aufsatz Über die Grausamkeit, Informatik wirklich zu unterrichten , den folgenden Vorschlag für einen Einführungskurs in die Programmierung:
Einerseits lehren wir, was wie die Prädikatenrechnung aussieht, aber wir machen es ganz anders als die Philosophen. Um den Anfänger in der Manipulation von nicht interpretierten Formeln zu schulen, unterrichten wir ihn mehr als Boolesche Algebra und machen den Schüler mit allen algebraischen Eigenschaften der logischen Verknüpfungen vertraut. Um die Verbindungen zur Intuition weiter zu trennen, benennen wir die Werte {true, false} der Booleschen Domäne in {black, white} um.
Andererseits unterrichten wir eine einfache, saubere, zwingende Programmiersprache mit einem Sprung und einer Mehrfachzuweisung als Basisanweisungen, mit einer Blockstruktur für lokale Variablen, dem Semikolon als Operator für die Anweisungskomposition, einem netten alternativen Konstrukt, einem netten Wiederholung und, falls gewünscht, Prozeduraufruf. Dazu fügen wir ein Minimum an Datentypen hinzu, beispielsweise Boolesche Werte, Ganzzahlen, Zeichen und Zeichenfolgen. Das Wesentliche ist, dass für alles, was wir einführen, die entsprechende Semantik durch die dazugehörigen Beweisregeln definiert wird.
Von Anfang an und während des gesamten Kurses betonen wir, dass es nicht nur die Aufgabe des Programmierers ist, ein Programm aufzuschreiben, sondern dass seine Hauptaufgabe darin besteht, einen formalen Beweis dafür zu erbringen, dass das von ihm vorgeschlagene Programm der ebenso formalen funktionalen Spezifikation entspricht. Während der Entwurf von Beweisen und Programmen Hand in Hand geht, hat der Student die Möglichkeit, seine manipulative Beweglichkeit mit dem Prädikatenkalkül zu perfektionieren. Um die Botschaft nach Hause zu bringen, dass es sich bei diesem Einführungskurs in die Programmierung in erster Linie um einen Kurs in formaler Mathematik handelt, stellen wir schließlich sicher, dass die betreffende Programmiersprache nicht auf dem Campus implementiert wurde, sodass die Studenten vor der Versuchung geschützt sind, ihre Programme zu testen .
Er betont, dass dies ein ernstzunehmender Vorschlag ist, und umreißt verschiedene mögliche Einwände, darunter, dass seine Idee "völlig unrealistisch" und "viel zu schwierig" ist.
Aber dieser Drachen wird auch nicht fliegen, denn das Postulat hat sich als falsch erwiesen: Seit Anfang der 80er Jahre wurde Hunderten von Studienanfängern jedes Jahr ein derartiger Einführungskurs in die Programmierung erfolgreich angeboten. [Da es meiner Erfahrung nach nicht ausreicht, dies einmal zu sagen, sollte der vorherige Satz mindestens zweimal wiederholt werden.]
Auf welchen Kurs bezieht sich Dijkstra, und gibt es andere Literatur, die darüber spricht?
Der Aufsatz erschien 1988, als Dijkstra an der Universität von Texas in Austin war, was wahrscheinlich ein Hinweis ist - sie beherbergen das Dijkstra-Archiv, aber es ist riesig und ich bin besonders daran interessiert, von anderen über diesen Kurs zu hören.
Ich möchte hier nicht diskutieren, ob die Idee von Dijkstra gut oder realistisch ist. Ich habe darüber nachgedacht, dies auf cstheory.se oder cs.se zu veröffentlichen, habe mich aber hier niedergelassen, weil a) eine Gemeinschaft von Pädagogen mit größerer Wahrscheinlichkeit jemanden hat, der leicht antworten kann, und b) Dijkstra selbst betont, dass sein Kurs "in erster Linie ein Kurs in ist formale Mathematik. " Fühlen Sie sich frei, für die Migration zu markieren, wenn Sie nicht einverstanden sind.
quelle
Antworten:
So war die Informatikausbildung an der TU Eindhoven, die von Dijkstra und Kollegen entworfen und umgesetzt wurde, von den Anfängen um 1980 bis zur Abnahme des Einflusses von Dijkstra Mitte der neunziger Jahre.
Ich habe 1982 mit dem CS-Studium an der Universität Nijmegen begonnen. ein Klassenkamerad tat dasselbe an der TU Eindhoven. Jedes Frühjahr hatte unsere alte Sekundarschule einen Tag, an dem ehemalige Schüler ihren gewählten Studienbereich den gegenwärtigen Schülern vorstellten. Wir waren beide dort, um CS vorzustellen, und verglichen unsere Erfahrungen. Sie waren sehr unterschiedlich. In Nijmegen haben wir aktuelle Erfahrungen mit aktuellen Programmiersprachen gesammelt und unsere Zuweisungsprogramme auf einem aktuellen Computer (genauer gesagt einer virtuellen VM / CMS-Maschine) ausgeführt. Nicht so in Eindhoven. Mein ehemaliger Klassenkamerad sagte mir, sie dürften im ersten Jahr keinen Computer berühren. In Eindhoven bedeutete Programmieren, mathematisch zu lernen, nachweislich korrekte Algorithmen aus mathematisch festgelegten Problemdefinitionen zu konstruieren. Auf Papier.
Diese Haltung war nach dem Weggang von Dijkstra etwas locker, aber auch in den frühen neunziger Jahren bestanden die Kurse mit der Bezeichnung Programmeren (Programming) (1 bis 9), die sich über mehrere Jahre erstreckten, aus derselben Aktivität und stellten insbesondere eine große Hürde dar die Studenten. Ich habe nie an einem dieser Kurse teilgenommen, aber ich bezweifle, dass es um die Nutzung von Computern ging.
Falls Sie sich fragen: Die heutige Informatikausbildung an der TU Eindhoven ist ganz anders.
quelle
Schauen Sie sich "Eine Programmiermethode von Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa" an. Es enthält das in den Zitaten erwähnte Material. Eine schöne Lektüre.
quelle