L'exerciseur du programmeurpeople.irisa.fr/Martin.Quinson/blog/2016/0316/PLM.pdf · 2016-09-29 ·...

of 25 /25

Embed Size (px)

Transcript of L'exerciseur du programmeurpeople.irisa.fr/Martin.Quinson/blog/2016/0316/PLM.pdf · 2016-09-29 ·...

  • PLM: Programmer's Learning Machine

    L'exerciseur du programmeur

    Martin Quinson

    17 mars 2016

  • La génèse de PLM: mon expérience d'enseignant

    I Enseignant d'informatique depuis ma maîtrise, au 20ième siècle

    Constat: seuls ceux qui savent programmer avant savent après

    I Les autres ont des problèmes avec if au bout de 6 mois!

    Comment aider ceux qui en ont besoin?

    I Énormes di�érences de niveaux en entrée: ceux qui savent trustent la paroleI Si seulement ils pouvaient bosser par eux-mêmes. . .

    I . . . si seulement nos TP pouvaient être moins arides et plus attirants

    PLM: Programmer's Learning Machine (2008)

    I Développée (avec G. Oster) pour une mise à niveau pseudo-autonome tutoréeI Inspirée des Buggles de F. Turbak � Wellesley College

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 2/16

  • La PLM aujourd'hui

    Exerciseur interactif dédié à la programmation

    I C'est en forgeant qu'on devient forgeron

    Mission text World view

    Interactivecontrols

    entity

    1. On lit la mission à gauche, compare à droite l'état initial et l'état désiré

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 3/16

  • La PLM aujourd'hui

    Exerciseur interactif dédié à la programmation

    I C'est en forgeant qu'on devient forgeron

    2. On tape le code, on clique sur un bouton, et ça s'anime à droite

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 3/16

  • La PLM aujourd'hui

    Exerciseur interactif dédié à la programmation

    I C'est en forgeant qu'on devient forgeron

    Code area

    console logs

    ongoing execution

    3. Boucle de feedback très courte (et motivante pour les élèves)

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 3/16

  • Juste un IDE pour débutants ?

    I Exerciseur 6= IDE: Nombreux exercices, Progressions cohérentesI Multi-langages: Java/Scala/Python (+ C/javascript/Blockly/Ruby)I Multi-langues: Anglais/Français/Brésilien (+ italien/chinois/espagnol)I Multi-univers: Di�érents types de micro-mondes

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 4/16

  • Juste un IDE pour débutants ?

    I Exerciseur 6= IDE: Nombreux exercices, Progressions cohérentesI Multi-langages: Java/Scala/Python (+ C/javascript/Blockly/Ruby)I Multi-langues: Anglais/Français/Brésilien (+ italien/chinois/espagnol)I Multi-univers: Di�érents types de micro-mondes

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 4/16

  • Notre progression pédagogique en CS0

    Objectif: tactical programming

    I Le B-A-BA de la programmation: écrire des trucs de base sans di�cultéI Que ce ne soit plus un problème quand les algos seront non-triviaux

    Implémentation agnostique point de vue langage (Java, Python, Scala)

    I Instructions & Commentaires; ConditionellesI Boucles while; switch casesI VariablesI Boucles for et do/whileI Méthodes, Fonctions et ParamètresI TableauxI De nombreux exercices d'applications

    200 exercices très scénarisés, (10 à 50+ heures)

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 5/16

  • Enseigner la récursivité en CS1

    La récursivité pour les nuls

    I Découpe le problèmeI Demande à un ami de résoudre les boutsI Fusionne les bouts de solutions

    Micro-mondes dédiésI Listes récursives: longueur(), estMembre(), etcI Tortue récursive: Arbres, fractales classiques

    I subtree() fournie pour aider à décomposer

    I Hanoï et variations pour décomposerI Linéaire, Cyclique, Bicolore, Tricolore, etc

    Conditions initiales Étape intermédiaire Objectif �nal

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 6/16

  • Enseigner la récursivité en CS1

    La récursivité pour les nuls

    I Découpe le problèmeI Demande à un ami de résoudre les boutsI Fusionne les bouts de solutions

    Micro-mondes dédiésI Listes récursives: longueur(), estMembre(), etcI Tortue récursive: Arbres, fractales classiques

    I subtree() fournie pour aider à décomposer

    I Hanoï et variations pour décomposerI Linéaire, Cyclique, Bicolore, Tricolore, etc

    Conditions initiales Étape intermédiaire Objectif �nal

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 6/16

  • Enseigner les tris en CS1

    Découverte: Implémenter une douzaine d'algos (en véri�ant le nb d'opérations)

    I Vue d'état et vue temporelles pour aider à la compréhension

    Vue d'état Tri par insertion Tri à bulle Tri par sélection

    Application: drapeau hollandais, crépier ou baseball

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 7/16

  • Questionnaire de satisfaction des apprenants

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 8/16

  • Point de vue d'enseignants

    Usages en production

    I Telecom Nancy : utilisé dans plusieurs modules (après mon départ)I Beaucoup d'intérêt, quelques usages disparates chez les collègues

    Avant de l'utiliser chez vousI Utiliser un tel outil demande un gros travail de préparation

    Tester en salle de TP, faire les exercices, anticiper les questionsI Un plan B en cellulose pour la première fois, mais c'est plaisant après

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 9/16

  • Créer des ressources

    I Traduire: Un �chier po séparé

    I Leçon: Juste un graphe d'exercices (liste + dépendances)

    I Exercice: Mission + Monde initial + Entités correction

    public class SlugTrackingEntity

    extends SimpleBuggle {

    // Some additional (hidden) code/* BEGIN TEMPLATE */boolean isFacingTrail() {

    // Write your code here

    /* BEGIN SOLUTION */if (isFacingWall())

    return false;

    forward();

    boolean res =

    getGroundColor().equals(Color.green);

    backward();

    return res;

    /* END SOLUTION */}

    /* END TEMPLATE */}

    I Micro-monde: Monde + Vue + Entité + ControlPanel + SérialisationI 400 à 1500 lignes

    https://github.com/BuggleInc/PLM/wiki

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 10/16

    https://github.com/BuggleInc/PLM/wiki

  • Créer des ressources

    I Traduire: Un �chier po séparé

    I Leçon: Juste un graphe d'exercices (liste + dépendances)

    I Exercice: Mission + Monde initial + Entités correction

    public class SlugTrackingEntity

    extends SimpleBuggle {

    // Some additional (hidden) code/* BEGIN TEMPLATE */boolean isFacingTrail() {

    // Write your code here

    /* BEGIN SOLUTION */if (isFacingWall())

    return false;

    forward();

    boolean res =

    getGroundColor().equals(Color.green);

    backward();

    return res;

    /* END SOLUTION */}

    /* END TEMPLATE */}

    I Micro-monde: Monde + Vue + Entité + ControlPanel + SérialisationI 400 à 1500 lignes

    https://github.com/BuggleInc/PLM/wiki

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 10/16

    https://github.com/BuggleInc/PLM/wiki

  • Créer des ressources

    I Traduire: Un �chier po séparé

    I Leçon: Juste un graphe d'exercices (liste + dépendances)

    I Exercice: Mission + Monde initial + Entités correction

    public class SlugTrackingEntity

    extends SimpleBuggle {

    // Some additional (hidden) code/* BEGIN TEMPLATE */boolean isFacingTrail() {

    // Write your code here

    /* BEGIN SOLUTION */if (isFacingWall())

    return false;

    forward();

    boolean res =

    getGroundColor().equals(Color.green);

    backward();

    return res;

    /* END SOLUTION */}

    /* END TEMPLATE */}

    I Micro-monde: Monde + Vue + Entité + ControlPanel + SérialisationI 400 à 1500 lignes

    https://github.com/BuggleInc/PLM/wiki

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 10/16

    https://github.com/BuggleInc/PLM/wiki

  • Créer des ressources

    I Traduire: Un �chier po séparé

    I Leçon: Juste un graphe d'exercices (liste + dépendances)

    I Exercice: Mission + Monde initial + Entités correction

    public class SlugTrackingEntity

    extends SimpleBuggle {

    // Some additional (hidden) code/* BEGIN TEMPLATE */boolean isFacingTrail() {

    // Write your code here

    /* BEGIN SOLUTION */if (isFacingWall())

    return false;

    forward();

    boolean res =

    getGroundColor().equals(Color.green);

    backward();

    return res;

    /* END SOLUTION */}

    /* END TEMPLATE */}

    I Micro-monde: Monde + Vue + Entité + ControlPanel + SérialisationI 400 à 1500 lignes

    https://github.com/BuggleInc/PLM/wiki

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 10/16

    https://github.com/BuggleInc/PLM/wiki

  • PLM et le métier d'enseignant

    I En médecine, le monitoring des patients aide au diagnostic du problèmeI Les enseignants travaillent en aveugle et demandent aux apprenants

    I PLM libère le temps d'aider ceux en di�culté, mais on ne sait plus qui c'est

    Activité sur Khan AcademyProgrès sur CodingBat

    Problèmes sur un exo (Khan)Détail du problème (Khan)

    I

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 11/16

  • PLM et le métier d'enseignant

    I En médecine, le monitoring des patients aide au diagnostic du problèmeI Les enseignants travaillent en aveugle et demandent aux apprenants

    I PLM libère le temps d'aider ceux en di�culté, mais on ne sait plus qui c'estActivité sur Khan Academy

    Progrès sur CodingBat

    Problèmes sur un exo (Khan)Détail du problème (Khan)

    ILa PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 11/16

  • Aider la recherche en didactique de l'informatique

    I Chaque tentative est enregistrée anonymementI Lien à sens unique identité → sauvegardesI Rejeu possible de chaque tentative

    I 234,975 soumissions: 56,994 réussi, 66,712 syntaxe, 111,269 erreur de logiqueI Scala: 185,960 (79%); Python: 27,872 (11%); Java: 18,849 (8%)

    I Erreurs de logique probablement très instructives

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 12/16

  • Des traces d'apprenants très riches

    Somme cumulative des étudiants ayant passé plus de X exercices

    I https://github.com/BuggleInc/PLM-data

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 13/16

    https://github.com/BuggleInc/PLM-data

  • Des traces d'apprenants très riches

    Somme cumulative des étudiants ayant écrit plus de X lignes de code

    I https://github.com/BuggleInc/PLM-data

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 13/16

    https://github.com/BuggleInc/PLM-data

  • Futures évolutions de PLM

    I Amélioration de l'ergonomie de l'interface

    Pour le prof : outil d'aide à l'enseignement

    I Éditeur d'exercices intégréI Dashboard : détection et aide au diagnostic d'élèves en di�cultéI Factorisation du code élèves à annoter

    Pour l'apprenant : vers la khan de la programmation

    I Remédiation personnalisée automatiqueI Renforcer la motivation: badges et streakI Blockly, Visualisation mémoireI Apprentissage actif: Q&A, proposer des exercices

    Pour le chercheurI Learning AnalyticsI Test A/B en double aveugle

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 14/16

  • Architecture de la PLM complétement déployée

    I De quoi résister à des centaines d'utilisateurs simultanés

    I Ou bien, exécution locale d'un double clic sur le �chier jar

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 15/16

  • Conclusions

    La PLM veut aider plusieurs publics

    I Élèves : apprennent à leur rythme dans un �jeu� sérieuxI Enseignants : simpli�e la menée d'exercices, monitoring d'élèves à aiderI Auteurs : réutilisation du code non-fonctionnel, retour par instrumentationI Chercheurs : Corpus de données, prescriptions automatiques

    Pleins de petites idées pour la suite

    I De nouveaux univers: backtracking, POO, système, HPC, DistribuéI De nouveaux langages: Tous les JSR231 et même le Caml ou le CI Finitions de l'interface et de l'ergonomie

    Mais aller vraiment plus loin est un projet de recherche

    I Multidisciplinaire et un peu balbutiant, mais passionnant !

    Join us!

    La PLM: L'exerciseur du programmeur Comment survivre à des étudiants qui programment 16/16

    IntroductionContenu