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.