Vous trouverez sur cette page mon retour d'expérience et les ressources associées sur la mise en place d'une classe inversée pour l'enseignement « Programmation Python 1 » 🐍 à l'université. J'y explique comment j'ai implémenté cette classe inversée (sans vidéo) pour apprendre à programmer (presque sans ordinateur).

J'ai présenté ce retour d'expérience lors du congrès sur les classes inversées et les pédagogies actives, CL!C 2020, qui a eu lieu du 30 octobre au 1er novembre 2020.

Diaporama de la présentation et la vidéo (32') :


Un peu de pub

👋 Vous êtes débutant ou plutôt confirmé en classe inversée ?

Voici 10 règles simples (en anglais) que nous proposons pour implémenter une classe inversée. Merci de prendre quelques minutes pour nous dire ce que vous en pensez en répondant à ce sondage : questionnaire 10 règles simples pour la classe inversée


Contexte de l'enseignement

L'enseignement « Programmation Python 1 » a eu lieu de septembre à décembre 2019 (donc avant la Covid-19). Il a été suivi par 29 étudiants de master 1 du cursus de bio- et chimie-informatique de l'Université de Paris. Tous ces étudiants étaient débutants en programmation. Le volume horaire total pour cet enseignement était de 30 h réparti en 7 séances de cours magistraux (CM) de 2h et 8 séances de travaux pratiques (TP) de 2 h, en salle informatique.

Un polycopié (papier) du cours était distribué à tous les étudiants au début du semestre.

De plus, l’apprentissage de la programmation Python et de la programmation en général, peut être associé à 3 niveaux d'abstraction et de difficulté (pas forcément croissants) :

  1. Programmer nécessite de manipuler des concepts particuliers comme la notion de variable, de boucles, de test... Si vous souhaitez en savoir plus, j'ai réalisé en 2020 une vidéo d'introduction à la programmation qui aborde ces concepts.
  2. Programmer, en Python cette fois, suppose l'acquisition d'un vocabulaire et de règles spécifiques à ce langage de programmation.
  3. Enfin, programmer est une activité qui nécessite la manipulation d'un ordinateur et d'outils informatiques (terminal, éditeur de texte, mini-serveur web Jupyter...). Contrairement à ce qu'on pourrait supposer de nos étudiants, leur alphabétisation (ou fluence) numérique (computer literacy) n'est pas forcément très bonne (y compris dans un cursus de master en bioinformatique).

Contexte personnel

J'enseigne la programmation Python depuis plus de 10 ans à l'université. Je dispose d'un support de cours mature que nous avons créé avec mon collègue Patrick Fuchs et que nous mettons à jour régulièrement. Ce cours est disponible en ligne sous licence libre et a récemment été publié chez Dunod.

Par ailleurs, j'ai suivi une formation à la pédagogie de 2017 à 2019. Cette formation est animée et proposée par le Service d’Accompagnement aux Pédagogies Innovantes et à l’Enseignement Numérique de Sorbonne Paris Cité (SAPIENS). À l'issue de cette formation, j'ai obtenu le certificat de pédagogie CertifiENS.

Motivation pour la classe inversée

J'ai souhaité faire évoluer mon enseignement, notamment en cours magistral, pour recentre les sessions de cours vers les étudiants et les rendre plus actifs. J'avais également besoin que les étudiants produisent des traces de leurs apprentissages.

Au début de ma carrière, mes cours magistraux consistaient essentiellement à diffuser un diaporama qui couvraient toutes les notions à apprendre par les étudiants. Je ponctuais ce cours par des « démos » sur ma machine pour illustrer mes propos ou répondre aux questions des étudiants.

J'ai progressivement abandonné le diaporama au profit d'un cours complet en « live coding », c'est-à-dire que je construisais mon cours uniquement avec une démonstration des différentes commandes Python, exécutées sur ma machine et diffusées à toute la classe avec un vidéoprojecteur. Cette méthode favorisait les interactions avec les étudiants. Je pouvais leur demander de prédire le résultat d'une commande, de corriger une erreur que j'aurai pu faire, de me suggérer des solutions alternatives que je testais immédiatement. Avec ce type d'enseignement, les étudiants observaient, en temps réel, comment je programmais, à quelle vitesse je tapais et aussi toutes les erreurs de typo que je faisais (et j'en fais beaucoup !).

J'ai ensuite voulu faire évoluer la posture des étudiants, les faire passer d'observateurs à acteurs et producteurs. J'ai donc profité d'un support de cours robuste et mature pour mettre en place une classe inversée (Bergmann & Sams, 2012) pour cet enseignement, notamment dans les sessions de cours magistraux. Je voulais utiliser les sessions de cours, où les étudiants n'avaient pas accès à un ordinateur, pour travailler avec eux les deux premiers niveaux d'abstraction énoncés précédemment, à savoir les concepts généraux de programmation ainsi que le vocabulaire et la grammaire spécifiques au langage Python.

Mise en place de la classe inversée

En septembre 2019, je me suis donc lancé dans l’aventure de la classe inversée 🚀. J’ai bénéficié pour cela de l'accompagnement d'Antoinette Bouziane et Marine Lanteri, conseillères pédagogiques à SAPIENS.

Ma classe inversée est basée sur un modèle de classe inversée de type I de Lebrun (Lebrun et al., 2016), pour lequel l'enseignant fournit l'essentiel du contenu pédagogique, les étudiants travaillent leur cours en dehors de la classe (chez eux, à la bibliothèque universitaire...), vérifient et consolident leurs apprentissages avec l'enseignant, en classe.

Présentation aux étudiants et syllabus

J'ai pris le temps de présenter l'organisation de l'enseignement aux étudiants lors de la première séance de cours. Les principaux éléments était repris dans un syllabus, distribué également lors de la première séance, puis rendu disponible sur la plateforme d'enseignement Moodle.

En amont du cours

En dehors de la classe, les étudiants devaient lire entre 2 et 3 chapitres du cours, disponibles sous la forme d'un polycopié papier ou du cours en ligne. Pour chaque chapitre travaillé, les étudiants réalisaient une fiche mémo (manuscrite, A4, recto uniquement) qui résumait les notions abordées. Les étudiants déposaient la photo ou le scan de ces fiches sur la plateforme d'enseignement en ligne (Moodle) de l'université avant le cours.

Ce travail permettait aux étudiants de découvrir puis de se familiariser avec le contenu nouveau et ainsi de mobiliser les niveaux cognitifs (Bloom, 1956 ; Anderson et al., 2001) mémorisation et compréhension.

Exemples de fiches mémo produites par un étudiant (merci Léo) :

Fiche mémo 1 Fiche mémo 2

En cours magistral

J'ai utilisé plusieurs outils empruntés aux pédagogique active pour développer et approfondir les notions abordées dans le polycopié ainsi que pour manipuler les concepts liés à la programmation. En cours magistral, les étudiants n'ont pas accès à un ordinateur. La majorité des activités font appel aux niveaux cognitifs de type application et analyse voire de synthèse et d’évaluation.

Les étudiants ont ainsi travaillé selon des modalités variées.

Discussions entre pairs

Les étudiants venaient en cours avec leurs fiches mémos. En début de séance, les étudiants échangeaient entre eux leurs fiches, puis corrigeaient et complétaient éventuellement les fiches de leurs binômes.

L'espace disponible pour la fiche mémo était très contraint (1 page contre 6 à 8 pages sur le polycopié) et nécessitait de faire des choix sur la présence de telle ou telle notion sur la fiche. Ces choix étaient l'occasion de discussions entre les étudiants.

Quiz

J'ai utilisé la plateforme en ligne WooClap pour proposer aux étudiants des questions à choix multiples (QCM) et des questions ouvertes.

Les QCM sont intéressants car ils permettent d'évaluer très rapidement la compréhension des étudiants sur un aspect donné. Dans l'exemple ci-dessous, je demandais aux étudiants ce que produisait le script suivant :

import sys
print(sys.argv[1:])

lancé avec la commande

python toto.py  1 8   souris    3.14

WooClap QCM

Dans cet exemple, on remarque que la réponse correcte (la deuxième) n'a pas été majoritairement trouvée par les étudiants. Une occasion parfaite pour discuter de la pertinence de chaque réponse et corriger un apprentissage erroné sur ce point.

Les questions ouvertes sont très utiles pour réaliser un brainstorming, par exemple en début de séance, pour faire le point sur les commandes introduites dans un chapitre particulier. Les réponses produites par les étudiants sont alors résumées et visualisées sous la forme d'un nuage de mots. Dans l'exemple ci-dessous, les étudiants indiquaient les principales instructions qu'ils avaient retenues d'un chapitre sur les chaînes de caractères :

WooClap nuage de mots

Ces activités étaient autant d'occasions d'ouvrir des discussions, voire des débats, sur les réponses produites et ainsi fournir de la remédiation quand cela était nécessaire.

Association d'idées

Je demandais aux étudiants d'associer un objet ou un concept à un chapitre donné, puis de partager avec le groupe cette association. Par exemple : une liste peut être représentée par un meuble à tiroirs où chaque élément est le contenu d'un tiroir, une boucle par un perroquet qui répète plusieurs fois la même chose...

Scripts à trous

Partant d'une mise en situation, je proposais aux étudiants un script que j'avais imprimé mais pour lequel, malheureusement, l'imprimante avait laissé des blancs. Les étudiants devaient alors compléter les trous.

J'aime beaucoup cet exercice car il demande aux étudiants de s'adapter à un contexte existant (le script à trous) pour répondre à un problème. Suivant le trou à remplir, les étudiants ont soit une totale liberté pour le compléter (par exemple une variable qui est définie dans un premier trou puis utilisée dans un second), soit au contraire, ils doivent déduire du contexte ce qui doit être dans le trou (par exemple une variable déjà définie précédemment ou une instruction Python).

Exemple de mise en situation : Construction d'une spirale.

Objectif à atteindre et une partie de l'énoncé :

Spirale 1 Spirale 2

Script à trous proposé aux étudiants (vue globale et zoom) :

Spirale 1

Spirale 1

Scripts tournants

Cette activité est inspiré des « tableaux tournants » de Jean-Charles Cailliez (Cailliez, 2020).

Partant d'une mise en situation, les étudiants rédigent sur une feuille vierge les premières étapes du script. Après 10 ou 15 minutes, ils échangent leur feuille avec d'autres étudiants et poursuivent la construction du script.

Cet exercice est difficile car il demande aux étudiants d'écrire un script sur du papier (ce qu'ils ne font jamais) mais aussi de comprendre ce qui a été écrit par les autres étudiants. Pour autant, cet exercice est intéressant. Écrire un script sur papier, donc sans éditeur de texte (ni indentation automatique, ni auto-complétion), demande à l'étudiant de réfléchir à chaque caractère qu'il va écrire, notamment de faire attention à la casse (utilisation des minuscules et des majuscules), les deux-points et l'indentation pour marquer les blocs d'instructions... Poursuivre et compléter un script déjà initié par une autre personne, nécessite d'être capable de comprendre un contexte existant et de s'y adapter. En effet, l'étudiant qui reprend un début de script ne doit par le réécrire complètement mais seulement le corriger si besoin est et le poursuivre.

Question suivante

Cette activité, tirée des jeux Thiagi, consiste à rédiger des fiches de questions / réponses puis à se défier entre groupes.

J'ai expliqué en détails cette activité dans une vidéo créée avec Danielle Cabrera, ingénieure audiovisuel à SAPIENS :

D'autres explications sont disponibles ici.

Voici les étudiants travaillant en groupe et les questions / réponses sur des post-its :

Question suivante, travail en groupe

Question suivante, post-its

Lors de cette activité, les étudiants ont conçu des questions / réponses puis se sont évalués entre eux. Pour motiver les étudiants, j'ai annoncé aux étudiants au début de l'activité que les meilleures questions se trouveraient dans l'examen de QCM qui avait lieu la semaine suivante (ce qu'évidemment j'ai fait).

En travaux pratiques

En travaux pratiques, les étudiants ont travaillé, enfin, sur ordinateur pour mettre en application concrète les notions découvertes à la maison puis développées en cours. Les exercices étaient de difficulté croissante et le plus possible en relation avec la biologie. Ici, la plupart des exercices correspondaient aux niveaux cognitifs d’application, de synthèse et d’analyse.

En TP, chaque étudiant disposait d'un ordinateur. Pour favoriser le travail en équipe et développer l'aspect « social » de la programmation. Les étudiants étaient encouragés à travailler en pair programming. En binôme sur une seule machine, les étudiants alternaient les rôles de « conducteur » et de « navigateur ». Le conducteur est celui qui contrôle le PC, tape les différentes instructions pour répondre au problème. Le navigateur est celui qui prend plus de hauteur, repère les éventuelles fautes de frappe et oriente le conducteur sur la marche à suivre.

Voici une illustration tirée de Wikimedia (Bdecarne, CC BY-SA), avec le navigateur à gauche et le conducteur à droite :

Programmation en binôme

Évaluation sommative

Toutes les activités présentées précédemment constituent pour moi autant de traces d'apprentissage. Mais elles constituent aussi, pour les étudiants, autant d'évaluations formatives qui fournissent aux étudiants un retour sur leurs apprentissages.

L'évaluation sommative des étudiants était constituée de plusieurs éléments :

  • préparation des cours, dépôt des fiches mémo sur la plateforme d'enseignement Moodle (en autonomie) ;
  • examen QCM (en présentiel, sur machine, sans internet, sans document) ;
  • résolution de problèmes de bioinformatique sur le site en ligne Rosalind (en autonomie) ;
  • résolution de problèmes de bioinformatique pour l'évaluation finale (en présentiel, sur machine, sans internet mais avec documents, dont le polycopié et les fiches mémo).

Retour des étudiants

À la fin du cours, j'ai demandé aux étudiants de remplir une « évaluation de l'enseignement par les étudiants » (EEE) sur Moodle.

Les activités préférées des étudiants étaient le script à trous, les quiz sur WooClap, le script tournant et la question suivante.

Evaluation de l'enseignement par les étudiants

Les associations d'idées et les fiches mémos sont relativement peu plébiscitées.

Des avis contrastés pour les fiches mémos se retrouvent dans les commentaires libres :

  • Je pense qu'il faudrait donner une "fiche squelette" pour faire les fiches mémos. Il est assez difficile de faire ces fiches lorsque le chapitre devient plus grand ou plus dense en information. Rosalind est vraiment une bonne idée de mini projet pour débuter sur python.

  • J'ai trouvé l'échange de fiches à chaque CM, ennuyant à la fin. Le cours est bien structuré et comprehensible, j'ai trouvé du plaisir à le lire. Je retiens du positif dans ce cours, il m'a fait découvrir et aimer la programmation.

  • Sans les fiches memo à faire je n'aurai jamais lu le poly correctement. Faire plus de script à trous ça nous force à réfléchir sur les variables à manipuler.

Effectivement, réaliser une fiche mémo, donc une synthèse, est difficile, mais nécessite de lire complètement le chapitre à résumer 😉.

In fine, la pédagogie inversée a été, me semble-t-il, plutôt appréciée. L'affirmation « La classe inversée m'a aidé dans l'appropriation des concepts de programmation en Python. » a par exemple obtenu le score moyen de 4,1, sachant que le score de 1 signifie « vous n'êtes pas d'accord » et 5 « vous êtes tout à fait d'accord ».

Conclusion

Cette expérience a été très positive pour moi. Bénéficiant d’un support de cours construit et déjà rodé, je souhaitais redynamiser mon enseignement et redéfinir le rôle des étudiants.

La classe inversée m’a permis d’impliquer les étudiants dans leur apprentissage : préparation du cours en amont, réalisation d’une fiche mémo, participation à des activités en séance de cours, résolution de problèmes en cours (sans ordinateur) et en TD (avec ordinateur), projets fil rouge (Rosalind) tout au long du semestre et en autonomie. Toutes ces activités ont constitué autant de preuves d'apprentissage régulièrement fournies par les étudiants.

Pour ne pas perdre le Nord, j’ai essayé d’être le plus explicite possible dans mes intentions, tant avec les étudiants (diffusion d’un syllabus au début du semestre, énoncé des objectifs pédagogiques à chaque début de séance) qu’avec moi-même (construction d’un scénario pédagogique détaillant le déroulé de chaque séance, accompagnement par deux conseillères pédagogiques). Cette explicitation continue m'a rendu plus vigilant sur l'alignement pédagogique entre mes objectifs (pédagogiques), les activités que je pouvais demander aux étudiants (en cours, en TP ou en autonomie) et les modalités d'évaluation.

Du point de vue des étudiants, une grande majorité d'entre eux considère que la classe inversée les a aidé dans l’appropriation des concepts en programmation Python. Les activités réalisées en cours qu’ils ont préférées sont : les quiz et les nuages de mots, les scripts à trous, les scripts tournants et la question suivante. De manière générale, l’interactivité en cours a été appréciée, comme en témoigne un/e étudiant/e :

Selon moi le gros point fort est l'interactivité des cours, possible grâce à la pédagogie inversée, il faut absolument garder cette interactivité car c'est ce qui rend ce cours passionnant. Les activités en groupe de 2/3/4 sont aussi à garder car c'est une façon de nous faire travailler de manière ludique sans qu'on ait l'impression de travailler, et surtout cela donne l'envie d'aller plus loin dans la programmation.

Je crois que je vais continuer à explorer les classes inversées. 😎

Bonus 🎁 : le script puzzle

Je partage ici une activité que je n'ai (encore) faite avec mes étudiants en programmation Python mais que j'ai testée avec d'autres étudiants, également grands débutants en programmation.

J'ai appelé cette activité le « script puzzle ». Partant d'une mise en situation (un problème), je fournis aux étudiants le script qui répond aux questions posées mais pour lequel toutes les lignes sont dans le désordre. Les étudiants doivent alors reconstituer le script correct en remettant les lignes dans le bon ordre. Bien entendu, chaque ligne, prise individuellement est correcte. Au total, le script complet fait 15 à 20 lignes.

Cette activité fonctionne très bien en présentiel, notamment en groupe. Le script en désordre est imprimé sur une feuille, les étudiants découpent avec des ciseaux les différentes lignes puis essaient de reconstitué le script correct. Cette activité peut aussi s'adapter au distanciel. Cette fois le script en désordre est fourni dans un fichier texte ou un document partagé en ligne type Google Docs. Les étudiants copient / collent les lignes pour les remettre dans le bon ordre. En bonus et si l'environnement informatique le permet, ils peuvent vérifier que leur solution fonctionne en exécutant leur script.

Je trouve cette activité très intéressante car, pour des débutants en programmation, l'objectif immédiat n'est pas nécessairement qu'ils sachent écrire un script complet. De ce que j'ai pu observer, la structure du programme et les instructions à utiliser posent problème. Ici, les instructions sont fournies donc les étudiants se concentrent uniquement sur la structure du programme : la construction des boucle et des tests, la déclaration d'une variable avant son utilisation...

Bibliographie / webographie

Anderson et al., 2001
LW Anderson, DR Krathwohl, PW Airasian, KA Cruikshank, RE Mayer, PR Pintrich, J Raths & MC Wittrock, A Taxonomy for Learning, Teaching, and Assessing. Addison Wesley Longman, Inc., 2001

Bergmann & Sams, 2012
J Bergman & A Sams, Flip Your Classroom: Reach Every Student in Every Class Every Day. International Society for Technology in Education, 2012

Bloom, 1956
BS Bloom, Taxonomy of Educational Objectives. Longmans, 1956

Cailliez, 2020
JC Caillez, Innovez dans votre classe… faites tourner les tableaux !, consulté le 17/02/2020.

Lebrun et al., 2016
M Lebrun, C Goffinet & C Gilson, Vers une typologie des classes inversées. Contribution à une typologie des classes inversées : éléments descriptifs de différents types, configurations pédagogiques et effets.
Education & Formation, Vol. e-306, no.2, p. 125-146, 2016.