sur “Sur la cruauté d'enseigner réellement l'informatique”

33

Dijkstra, dans son essai sur la cruauté de véritablement enseigner l'informatique , fait la proposition suivante pour un cours d'initiation à la programmation:

D'une part, nous enseignons ce qui ressemble au calcul des prédicats, mais nous le faisons très différemment des philosophes. Afin de former le programmeur débutant à la manipulation de formules non interprétées, nous l'enseignons plus sous forme d'algèbre booléenne, familiarisant ainsi l'étudiant avec toutes les propriétés algébriques des connecteurs logiques. Pour couper plus avant les liens vers l'intuition, nous renommons les valeurs {true, false} du domaine boolean {black, white}.

D'autre part, nous enseignons un langage de programmation simple, propre et impératif, avec un saut et une affectation multiple comme instructions de base, avec une structure de bloc pour les variables locales, le point-virgule en tant qu'opérateur pour la composition de l'instruction, une belle construction alternative, une répétition et, si vous le souhaitez, appel de procédure. À cela, nous ajoutons un minimum de types de données, par exemple des booléens, des entiers, des caractères et des chaînes. L'essentiel est que, peu importe ce que nous introduisons, la sémantique correspondante soit définie par les règles de preuve qui l'accompagnent.

Dès le début et tout au long du cours, nous soulignons que la tâche du programmeur n'est pas simplement d'écrire un programme, mais que sa tâche principale est de prouver formellement que le programme qu'il propose répond à la spécification fonctionnelle tout aussi formelle. Lors de la conception des épreuves et des programmes, l’élève a amplement l’occasion de perfectionner son agilité de manipulation avec le calcul des prédicats. Enfin, afin de bien faire comprendre à tous que ce cours d’introduction à la programmation est avant tout un cours de mathématiques formelles, nous veillons à ce que le langage de programmation en question ne soit pas implémenté sur le campus, ce qui protège les étudiants de la tentation de tester leurs programmes. .

Il souligne qu'il s'agit d'une proposition sérieuse et expose diverses objections possibles, notamment que son idée est "tout à fait irréaliste" et "beaucoup trop difficile".

Mais ce cerf-volant ne volera pas non plus, car le postulat s'est avéré faux: depuis le début des années 80, un tel cours d'initiation à la programmation a été donné avec succès à des centaines d'étudiants de première année d'université chaque année. [Parce que, selon mon expérience, dire cela une fois ne suffit pas, la phrase précédente devrait être répétée au moins deux fois.]

À quel cours Dijkstra fait-il référence et existe-t-il une autre littérature disponible qui en parle?

L’essai a été publié en 1988, alors que Dijkstra était à l’Université du Texas à Austin, ce qui est probablement un indice: ils hébergent les archives de Dijkstra, mais c’est énorme, et j’entends beaucoup plus parler de ce cours.

Je ne veux pas discuter si l'idée de Dijkstra est bonne ou réaliste ici. J'ai envisagé d'afficher ceci sur cstheory.se ou cs.se mais je me suis décidé ici car a) une communauté d'éducateurs aurait probablement plus de chances d'avoir quelqu'un qui puisse répondre facilement, et b) Dijkstra lui-même souligne que son cours est "essentiellement un cours de mathématiques formelles. " N'hésitez pas à signaler la migration si vous êtes en désaccord.

Matthew Towers
la source
2
Je suis à peu près sûr que le Dijkstra est en train de critiquer un style particulier de la manière dont les mathématiques ont été enseignées (un modèle qui construit tout, à la Bourbaki, à partir d'axiomes) et que cela est conçu comme une satire . Cependant, je n'ai aucune preuve à l'appui de cela (d'où le commentaire plutôt que de répondre).
lol "nous veillons à ce que le langage de programmation en question ne soit pas implémenté sur le campus, de sorte que les étudiants soient protégés de la tentation de tester leurs programmes." semble-t-il se référer à un cours qu'il a lui-même enseigné / conceptualisé? me rappelle "l'enseignement de CS sans ordinateurs"
vzn
4
@LoopSpace Je ne pense pas que Dijkstra soit connu pour ses opinions fortes, et il était définitivement du côté mathématique de CS.
Raphaël
1
Avez-vous vérifié les cours qu'il a lui-même donnés? Une référence non spécifique comme celle-ci renvoie probablement à sa propre expérience.
Raphaël
4
ce n'est apparemment pas une satire. Dijkstra était un partisan / défenseur des idées spécifiquement citées ici. btw duplicate
vzn

Réponses:

18

C’est à peu près ce que l’enseignement informatique de la TU Eindhoven, conçu et mis en œuvre par Dijkstra et ses collègues, ressemblait à partir du moment où il a commencé, vers 1980, jusqu’à ce que l’influence de Dijkstra commence à s’affaiblir, à peu près au milieu des années 1990.

J'ai commencé à étudier la CS à l'Université de Nimègue en 1982; un camarade de classe a fait la même chose à TU Eindhoven. Chaque printemps, notre ancienne école secondaire organisait une journée au cours de laquelle les anciens élèves présentaient le domaine d’étude choisi aux étudiants actuels. Nous étions tous les deux présents pour présenter la CS. Nous avons donc comparé nos expériences. Ils étaient très différents. À Nimègue, nous avons acquis une expérience réelle des langages de programmation réels, en exécutant nos programmes d’affectation sur un ordinateur réel (une machine virtuelle VM / CMS, pour être plus précis). Pas si à Eindhoven. Mon ancien camarade de classe m'a dit qu'ils n'étaient pas autorisés à toucher un ordinateur la première année. La programmation, à Eindhoven, signifiait apprendre à construire mathématiquement des algorithmes parfaitement corrects à partir de définitions de problèmes énoncées mathématiquement. Sur papier.

Cette attitude était quelque peu relâchée après le départ de Dijkstra, mais même au début des années 90, les cours appelés Programmeren (Programmation), numérotés de 1 à 9, s'étalant sur plusieurs années, consistaient toujours en cette même activité, et l'un d'eux constituait un obstacle majeur pour les étudiants. Je n'ai jamais suivi aucun de ces cours, mais je doute que des ordinateurs aient été utilisés.

Au cas où vous vous poseriez la question suivante: la formation en informatique à la TU Eindhoven est très différente.

Reinierpost
la source
Excellente réponse, j'avais presque perdu espoir pour cette question, mais vous avez tout à fait raison. Avez-vous une idée de l'endroit où vous pourrez en savoir plus sur le cours CS TU Eindhoven des années 80 auquel vous faites référence?
Matthew Towers,
Pas certain. Je ne suis pas sûr que ma réponse soit la meilleure, non plus - je n'étais pas là à l'époque.
reinierpost
1
Je possède un exemplaire du programme Programmeren 1 en 2 daté d’août 1982, écrit à partir de l’écriture manuscrite de Dijkstra. La bibliothèque TU Eindhoven a un scan en ligne. En 1984, Dijkstra et Feijen développèrent cela dans un livre, publié en anglais en 1988: A Method of Programming .
Reinierpost
Avez-vous un lien vers la version en ligne, @reinierpost?
adrianN
2

Regardez "Une méthode de programmation par Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa". Il contient le matériel évoqué dans les citations. Une lecture délicieuse.

Yves Daoust
la source
Cette littérature traite-t-elle du contenu d'un cours tel que celui proposé par Dijkstra? Si tel est le cas, veuillez fournir un résumé / une introduction de la source que vous fournissez. Si non, êtes-vous sûr que cela répond à la question?
Lézard discret
@ Discretelizard: c'est le cours.
Yves Daoust