L'exerciseur du programmeurpeople.irisa.fr/Martin.Quinson/blog/2016/0316/PLM.pdf · 2016-09-29 ·...
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