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.
la source
Réponses:
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.
la source
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.
la source