Enseigner une stratégie de lecture de code

Titre Clickbait: Vous ne croirez pas comment 5 minutes peuvent améliorer vos compétences en codage!

Résumé: consacrer 5 à 10 minutes à l’enseignement d’une stratégie de lecture de code peut permettre d’améliorer les performances en lecture, ce qui permet d’empêcher les personnes peu performantes d’être submergées et d'abandonner! J'ai présenté ce travail au SIGCSE 2018. Des liens vers des ressources (ressources pédagogiques, documents, diapositives) se trouvent à la fin de ce post.

Supposons que j'enseigne aux élèves de 4e année en mathématiques comment résoudre des problèmes avec différentes opérations, comme ceci:

2 x (3 + 6)

Je leur ai appris les opérations individuelles d’addition, soustraction, multiplication, division. Je leur pose donc des problèmes de pratique combinant ces opérations. Et mes étudiants assidus (?) Luttent étonnamment (?) Avec eux! Qu'est-il arrivé?

Dans ce cas, je ne leur ai pas explicitement expliqué la stratégie pour résoudre ces problèmes. C’est-à-dire que je ne leur ai pas enseigné l’ordre des opérations (également appelé ordre de priorité), par exemple en introduisant PEMDAS. Au lieu de cela, j’ai demandé à mes étudiants de créer (peut-être aveuglément) leurs propres stratégies pour résoudre leurs problèmes.

Exiger des élèves qu'ils construisent leurs propres stratégies lorsqu'ils appliquent une compétence peut entraîner une lutte improductive. Au lieu de cela, nous pouvons explicitement enseigner une stratégie et donner aux étudiants les moyens d'apprendre plus de leur pratique.

Mon exemple ci-dessus semble un peu absurde, mais c’est ce qui se passe dans beaucoup de cours de programmation actuels. Alors expliquons explicitement les stratégies de résolution de problèmes pour améliorer la façon dont les gens apprennent à lire le code!

La lecture de code, la simulation de son exécution dans votre esprit et la prévision de sa sortie sont appelées traçage de code. Cette compétence de repérage est essentielle pour la programmation, mais les novices ont du mal à le faire! C’est en partie parce qu’ils développent encore leur connaissance des constructions de code (instructions if, while while, etc.), mais aussi parce qu’ils essaient de trouver les bonnes stratégies pour résoudre le problème. Cela peut entraîner des difficultés inutiles, telles que des novices concentrant leurs efforts sur la mémorisation des valeurs de variables lors de la mise à jour ou la traduction du code en anglais (une compétence plus avancée). Pour que les novices puissent tirer le meilleur parti de leur pratique, nous devons leur fournir un échafaudage leur permettant de se concentrer sur l’apprentissage des compétences de lecture de code sans se laisser submerger.

Voici ce que je dis: fournir des instructions explicites sur une stratégie qui encourage le suivi ligne par ligne et mettre à jour une représentation externe pour suivre les valeurs des variables aide les novices à se concentrer sur la conceptualisation de la façon dont le code est exécuté et améliore leur capacité de suivi. Décrivons cette stratégie:

La stratégie comprend deux parties: une description des étapes à suivre pour résoudre une question de traçage de code et une description des tables de mémoire que les novices peuvent utiliser pour suivre les valeurs des variables. Les étapes consistent à comprendre la question, à trouver où le code commence à s'exécuter, puis à tracer le code ligne par ligne. Les instructions complètes sont ci-dessous:

En étant encouragés à tracer ligne par ligne, les novices ont une approche générale pour résoudre tout problème de traçage de code.

Parfois, les novices doivent mettre à jour une table mémoire. Un novice crée une nouvelle table mémoire chaque fois qu'une méthode est appelée. Lorsqu'une variable est déclarée dans cette méthode, ils remplissent une nouvelle ligne dans la table de mémoire. Lorsqu'une variable est mise à jour, ils trouvent cette ligne dans la table, biffent la valeur précédente et écrivent la nouvelle. Une fois qu'une méthode a fini de s'exécuter, ils barrent la totalité de la table.

En utilisant des tables de mémoire pour garder une trace des variables, les novices n’ont pas à gaspiller de la «puissance cérébrale» pour se rappeler des valeurs variables!Exemple de table mémoire après une opération d'échange de variable.

C'est donc la stratégie! Il convient parfaitement sur 2 feuilles de papier et nous n'avons passé que 5 à 10 minutes à l'enseigner aux novices (étudiants de premier cycle dans leur premier cours d'informatique).

Pour évaluer la stratégie, j'ai recruté 24 étudiants de niveau collégial âgés de 5 semaines dans leur premier cours d'informatique. En travaillant avec eux individuellement, j'ai appris la stratégie à la moitié d'entre eux. J'ai ensuite demandé à tous les participants de résoudre les 6 mêmes problèmes de traçage de code, en exprimant leurs pensées à voix haute pendant qu'ils travaillaient. Ce faisant, je suis en mesure de répondre à deux questions: 1) l’enseignement de cette stratégie améliore-t-il les performances de traçage? 2) Comment cette stratégie change-t-elle les processus de pensée des étudiants lors de la résolution de questions de traçage? Voyons les résultats!

Nous voyons que les participants qui ont appris la stratégie ont eu de meilleurs résultats et moins de variabilité que leurs camarades de classe qui n’ont pas appris la stratégie. Ceci est vrai pour les 6 questions de repérage que nous leur avons demandé de résoudre pour l’étude, mais également pour leur cours de fin d’études qu’ils ont suivis 3 à 6 jours après avoir participé à l’étude (voir les figures ci-dessous)! Avec cela, nous pouvons répondre à notre première question et dire qu'enseigner une stratégie améliore les performances de traçage du code.

RENDEMENT DES QUESTIONS CONCERNANT L’ÉTUDE: Les participants qui ont appris la stratégie exécutée sur avg. 15% de mieux et 46% moins de variabilité sur les questions de traçage de code de l'étude! (p <0,05)PERFORMANCE SUR MIDTERM: Participants ayant appris la stratégie exécutée sur moy. 7% de mieux et 42% moins de variabilité sur le parcours à mi-parcours.

Pour comprendre les processus de pensée des participants, j’analyse à haute voix les groupes de personnes peu performantes et peu performantes dans les deux situations. Les détails de l'analyse se trouvent dans mon article sur SIGCSE 2018 (lié en fin de publication), mais la conclusion la plus intéressante concerne la manière dont la stratégie a soutenu les entreprises peu performantes. Dans le groupe de contrôle, les 2 plus bas des résultats se sont écartés du traçage ligne par ligne et n’ont pas écrit les valeurs des variables. Cela les a accablés et a abandonné de nombreux problèmes sans pouvoir trouver de solution. Comparez cela aux personnes peu performantes de la condition de stratégie, qui suivaient généralement (mais pas toujours) la stratégie et suivaient généralement des tables en mémoire tracées ligne par ligne et mises à jour pour suivre les valeurs des variables. Nous en avons conclu que la stratégie aidait les moins performants à progresser et à ne pas abandonner.

Ainsi, nous trouvons la preuve que passer quelques minutes (sans avoir besoin d’un ordinateur) permet d’améliorer la capacité du débutant à retrouver le code. Cela pourrait être dû au fait que la stratégie permettait de progresser progressivement avec le traçage ligne par ligne et aidait les novices à se concentrer sur ce que faisait le code en déchargeant la charge cognitive de la mémorisation des valeurs de variables sur les tables en mémoire.

Les implications pour les instructeurs sont les suivantes: Donnez des instructions explicites pour donner aux novices des stratégies pour résoudre les problèmes! J'utilise les tables de mémoire comme outil pédagogique, mais je sais qu'elles ont également été utilisées à des fins d'évaluation.

Les implications pour la recherche sont nombreuses! J’investis dans la façon dont nous pouvons utiliser des représentations telles que des tables de mémoire pour capturer les étapes intermédiaires de la résolution de problèmes afin de mieux comprendre les processus de pensée et les idées fausses. J'ai également étudié comment traduire des tables de mémoire dans un domaine en ligne. C’est une recherche en cours, alors collaborons!

Vous trouverez ci-dessous des ressources pour vous aider à enseigner la stratégie ou à étendre l’étude, ainsi qu’un lien vers le document et les diapositives. Je répète qu’il s’agit pour moi d’une recherche en cours. Nous vous prions donc de bien vouloir nous contacter (commentaires, e-mail, tweet) si vous êtes un enseignant qui cherche à présenter cette stratégie à votre classe, un chercheur qui souhaite prolonger ce travail, ou toute autre personne. Vous devriez surtout tendre la main si vous êtes un apprenant curieux! Je suis dans l'attente de votre réponse.

  • Ressources pour la stratégie d'enseignement, étude de reproduction (GitHub)
  • Papier (ACM DL)
  • Diapositives (PDF)