J'ai enseigné la programmation d'introduction au niveau collégial. C’était un cours de pain et beurre, tous les professeurs l’ont fait, et je pense que nous l’avons très bien fait. Nous avons suivi un texte commun et passé des examens communs, mais nous avions chacun notre propre méthode de classe qui fonctionnait. Cela fait longtemps depuis, mais il m'est parfois arrivé de donner des cours à des enfants en programmation, et la situation est à peu près la même.
La façon dont je le fais est de commencer par le bas, le plus concret possible. Ce que les élèves savent est une structure. Ils ont déjà beaucoup de concepts. Je construis d’autres concepts en plus de ceux-ci, et j’élague les concepts qu’ils pourraient former, qui sont contre-productifs. En même temps, je les fais apprendre par la pratique .
J'avais construit un petit ordinateur avec une puce Intel 8008, de la mémoire EPROM et quelques circuits. Je l'avais programmé pour jouer un petit duo lorsque la puce d'E / S était connectée à quelques haut-parleurs. Je voudrais expliquer le fonctionnement du petit programme, avec une boucle interne pour décompter un compteur. Cela agirait comme un retard. Ensuite, il basculerait le bit de sortie et le referait. Il ferait cela pendant un moment, puis passerait à un autre délai, en donnant un autre ton, etc. La puce de mémoire avait une petite minuterie, et si je rangeais un conducteur de condensateur sous l’une des entrées de la minuterie, le programme fonctionnerait lentement . La classe pouvait entendre les conférenciers cliquer, cliquer, cliquer ... Je voulais que la classe comprenne que l'ordinateur faisait des choses très simples, une étape à la fois.. Ensuite, je déconnecterais le condensateur et la "musique" éclaterait. (applaudissements)
Ensuite, j’avais construit un simulateur pour un ordinateur décimal très simple, comportant 1 000 emplacements de mémoire, chacun contenant un nombre décimal signé à 4 chiffres. Il y avait des opcodes très simples comme "ajouter à l'accumulateur", "sauter si négatif", etc. Je leur ferais écrire de petits programmes dans ce "langage machine", comme ajouter deux nombres ou une liste de nombres. Ensuite, ils pourraient le regarder fonctionner en marchant seul ou en maintenant la touche Entrée enfoncée pour le regarder courir "rapidement".
L'objectif était de mettre en place le concept selon lequel les ordinateurs ne peuvent effectuer qu'un très petit nombre d'opérations de base différentes, et ils les effectuent une à la fois. C'est pour contrer l'impression qu'ils ont que les ordinateurs sont compliqués, et qu'ils font tout en même temps, et lisent dans leur esprit.
Nous avons ensuite programmé dans un "vrai" langage (BASIC :), en commençant par des programmes très simples mais intéressants, en passant par les conditions, les boucles, les tableaux, les fichiers, la fusion, etc. L'objectif était de mettre en place un ensemble de compétences suffisant pour qu'ils puissent entreprendre un projet de leur choix, car c'est la seule chose qui rend la programmation intéressante - l'utilisation à laquelle vous pouvez le consacrer. Je jetais quelques idées de projets, puis ils partaient de là. Je voudrais demander des idées écrites, puis des rapports d'activité, pour les empêcher de le reporter à la dernière minute et ensuite de paniquer. Je pense que les projets étaient la meilleure partie, car ils apprenaient par leurs propres moyens.
Cette connaissance initiale très concrète de ce que font les ordinateurs a rendu beaucoup plus facile l’enseignement ultérieur de concepts qui seraient autrement de véritables ralentisseurs, comme des tableaux ou (dans un cours ultérieur) des pointeurs. Nous avons tendance à glorifier le concept d '"abstraction" en tant que chose merveilleuse, mais il doit être construit sur des fondations concrètes, pas sur des ondes.