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.