zu „Über die Grausamkeit, Informatik wirklich zu unterrichten“


33

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.


2
Ich bin mir ziemlich sicher, dass der Dijkstra einen bestimmten Stil kritisiert, wie Mathematik gelehrt wurde (einer, der alles im Bourbaki-Stil aus Axiomen aufbaut) und der als Satire gedacht ist . Ich habe jedoch keine Beweise dafür (woher der Kommentar, anstatt zu antworten).

lol "Wir sorgen dafür, dass die fragliche Programmiersprache nicht auf dem Campus implementiert wurde, sodass die Studenten vor der Versuchung geschützt sind, ihre Programme zu testen." scheint er sich auf eine Klasse zu beziehen, die er selbst unterrichtet / konzipiert hat?
Erinnert

4
@LoopSpace Ich glaube nicht, dass Dijkstra für seine starken Meinungen berüchtigt ist, und er war definitiv auf der mathematischen Seite von CS.
Raphael

1
Haben Sie die Kurse überprüft, die er selbst gegeben hat? Ein unspezifischer Hinweis wie dieser deutet wahrscheinlich auf seine eigene Erfahrung hin.
Raphael

4
es ist anscheinend keine satire. Dijkstra war ein Befürworter / Befürworter der hier speziell angeführten Ideen. Übrigens duplizieren
vzn

Antworten:


18

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.


Tolle Antwort, ich hätte fast die Hoffnung auf diese Frage verloren, aber es klingt, als hättest du sie. Irgendeine Idee, wo ich mehr über den Kurs der TU Eindhoven 80s CS finde, auf den Sie sich beziehen?
Matthew Towers

Nicht sicher. Ich bin mir auch nicht sicher, ob meine Antwort die beste ist - ich war zu der Zeit nicht da.
Reinierpost

1
Ich besitze eine Kopie des Lehrplans Programmeren 1 en 2 vom August 1982, die aus Dijkstras Handschrift stammt. Die Bibliothek der TU Eindhoven hat einen Scan online. 1984 entwickelten Dijkstra und Feijen daraus ein 1988 in englischer Sprache herausgegebenes Buch: A Method of Programming .
Reinierpost

Haben Sie einen Link zur Online-Version, @reinierpost?
AdrianN


2

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.


Handelt es sich bei dieser Literatur um den Inhalt eines Kurses, wie er von Dijkstra vorgeschlagen wurde? Wenn ja, geben Sie bitte eine Zusammenfassung / Einführung zu der von Ihnen angegebenen Quelle an. Wenn nicht, sind Sie sicher, dass dies die Frage beantwortet?
Diskrete Eidechse

@ Discretelizard: es ist der Kurs.
Yves Daoust
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.