Evaluation des savoir-faire algorithmiques,
un projet en innovation pédagogique
(support écrit pour l'audition du 26 janvier 2017)
gilles.hunault "at" univ-angers.fr
Cette page fait suite à la réponse positive donnée à la lettre d'intention du projet (lettre déposée en décembre 2016). Pour mémoire, les modalités du projet définies par Atlanstic sont ici.
Ce texte a été validé par l'ensemble des participants déclarés au projet, à savoir : S. Quiniou, B. Duval, B. Da Mota, A. Goeffon, D. Lesaint, V. Barichard, F. Lardeux, G. Hunault.
Les "transparents" de l'audition sont dans le fichier audition.pdf.
Table des matières cliquable
1. Rappel des objectifs du projet
2. Pourquoi une algorithmique en français simplifié ?
4. Faisabilité du projet et ressources nécessaires
1. Rappel des objectifs du projet
Le projet, prévu pour une durée de 12 mois, consiste à
implémenter une base de données d'exercices de «programmation algorithmique» suffisamment paramétrés au niveau des entrées et des sorties pour assurer une évaluation de l'exécution du code et de la résolution exhaustive du problème posé ;
implémenter des listes de progression pédagogique pour évaluer, suivre et guider les étudiant(e)s dans leur acquisition de compétences ;
développer une interface d'écriture, de dépot, d'analyse, d'exécution et de suivi de progression dans la réalisation des exercices.
mettre en place une base de données des étudiant(e)s pour assurer le suivi de l'évaluation.
La visée pédagogique du projet est de fournir aux étudiant(e)s un environnement pour apprendre les bases de la programmation impérative fondamentale via une liste d'exercices gradués menant à une certification de compétences algorithmiques.
La première innovation réside dans le fait qu'on fournit suffisamment à la fois des exercices paramétrés mais aussi des moyens de tester si "on a bon" de façon à pouvoir s'auto-évaluer et valider ses compétences plutôt que ses connaissances.
La seconde innovation consiste à s'abstraire d'un langage "réel" comme le C, le JAVA ou le PHP via l'utilisation d'un langage algorithmique simplifié "universel"en français.
La troisième innovation est liée au mode d'évaluation par adéquation à un cahier des charges plutôt que par QCM.
Classiquement les connaissances sont évaluées en automatique par des QCM. Ici, nous proposons des listes d'exercices, des entrées/sorties paramétrées et des contraintes de résolution :
pour garantir une compréhension de la notion de cahier des charges, de test unitaire, de résolution exhaustive ;
pour assurer un suivi de la progression dans la compréhension de la programmation algorithmique ;
pour attester d'un niveau reconnu de compétences.
Le public visé à court terme est, bien sûr, nos étudiants de licence, en première année, semestre 1 (introduction à l'algorithmique), dans une suite logique et complément des cours et des TD. A plus long terme, on peut envisager comme public toute personne plutôt post-bac (tout "citoyen" selon le ministère et DIGCOMP) souhaitant tester et valoriser ses compétences en programmation algorithmique, que ce soit en formation initiale, en formation continue, en auto-didacte, en formation distancielle...
2. Pourquoi une algorithmique en français simplifié ?
Lorsqu'on apprend la programmation, on est confronté en général à deux domaines de compétences très distincts :
savoir mettre en place de façon très codifiée un enchaînement d'actions compréhensibles par la machine (l'algorithme) ;
apprendre à traduire cet algorithme dans un langage existant et à l'exécuter.
Trois grands types de difficultés surviennent rapidement. Tout d'abord se pose la question de savoir comment créer l'algorithme à partir de "rien", c'est-à-dire comment inventer la suite des actions à exécuter. Ensuite vient la partie codification. Classiquement la rédaction se fait dans un "vrai langage", prévu pour un ordinateur, avec une syntaxe non naturelle et non agréable, qui utilise des symboles qu'on ne manipule pas d'habitude, comme les accolades {, les crochets [ et le double égal ==, ce qui fait qu'il est difficile de se relire et de se corriger soi-même. Enfin reste la partie exécution et validation avec la rigueur/stupidité de l'ordinateur où une seule lettre, un seul point-virgule manquant fait que rien ne fonctionne du premier coup et qu'on a souvent du mal à trouver d'où vient l'erreur.
Pour pallier ces difficultés, nous sommes convaincus qu'il faut recourir à un langage algorithmique simplifié en français couplé à un analyseur et un exécuteur «intelligent» d'algorithmes qui écrit ses messages en français :
Avec un langage en français, la débutante et le débutant comprennent plus facilement les actions à faire exécuter par la machine.
Si on restreint le vocabulaire à moins d'une dizaine de verbes (CALCULER, TESTER, BOUCLER...), alors il suffit de se demander par quel mot on doit débuter la phrase, comme s'il s'agissait d'une langue étrangère, pour savoir par où commencer l'algorithme. Utiliser des mots français est plus "rassurant", l'apprenant maitrise sans doute plus facilement BOUCLER que WHILE.
Avec un langage simplifié, la syntaxe est lisible.
Imaginons par exemple qu'on doive accorder un point au score d'évaluation d'un questionnaire si la réponse de l'utilisateur est OUI et zéro point pour les autres réponses. Voici un algorithme possible en français simplifié :
TESTER si reponse="OUI" alors AFFECTER score <-- 1 # sous-entendu : 1 point sinon AFFECTER score <-- 0 # ici, 0 point finsiAvec un langage informatique classique, comme C ou PHP, la traduction n'a que peu de rapport avec le français et comporte de nombreuses idiosyncrasies telles que le double égal et la construction avec ? et : illustrées dans le code suivant qui réalise la même action que l'algorithme :
$score = ($reponse=="OUI") ? 1 : 0 ; // unité : le pointIl est clair que cette "traduction" est très peu accessible au débutant(e) car elle est très éloignée du code en français.
Via un analyseur qui indique les «fautes d'orthographe» et les erreurs de syntaxe, il est plus aisé de se corriger soi-même.
Imaginons qu'on oublie d'indiquer la fin de si dans l'algorithme (ou son équivalent, l'accolade fermante dans un code C ou PHP). Si l'analyseur indique fin de si manquante détectée en ligne 8, il est relativement facile de savoir de quel type d'erreur il s'agit (et sans doute à peu près où se situe la faute). En comparaison, un message traditionnel comme syntax error, unexpected end of file line 44 n'explique pas d'où vient le problème mais dit que le fichier ne devrait pas finir ainsi, ce qui est juste du point de vue informatique car on ne peut pas ouvrir une accolade sans la fermer, mais ce n'est pas très explicite ni compréhensible par un(e) débutant(e).
Si on utilise un langage simplifié prévu pour un être humain, de nombreux pièges classiques sont évités. Ainsi, pour réaliser l'action algorithmique proposée, une autre syntaxe en PHP est possible, qui "colle" plus aux mots SI, ALORS, SINON indiquée ci-dessous :
if ($reponse=="OUI") { $score = 1 # point } else { $score = 0 ; # point } ; # fin siMalheureusement, seuls une programmeuse ou un programmeur expérimentés verront de suite que l'analyse de ce texte aboutira au message incompréhensible au débutant syntax error, unexpected '}' vu que ce message dit qu'il ne faut pas d'accolade fermante ! En fait, bien sûr, il manque un point-virgule à l'affectation qui précéde cette accolade, ce qui la rend inacceptable, mais il est clair que cette subtilité échappe toujours quand on débute dans un "vrai" langage. Utiliser un langage sans point-virgule (et c'est bien sûr possible) nous semble être incontournable.
Via un exécuteur qui indique si "on a bon", il est possible de valider son travail et de s'auto-évaluer.
Lorsqu'un algorithme ou un programme s'exécute sans erreur, cela ne prouve pas que l'algorithme est juste, qu'il calcule exactement ce qu'il faut. Cela indique seulement qu'il s'exécute, qu'il produit des résultats. C'est une étape nécessaire mais non suffisante pour "prouver" que le problème a été résolu. Avec le temps, les programmeuses et programmeurs savent prévoir les cas simples et triviaux, les erreurs faciles à tester et construisent des exemples de situations à vérifier, pour être convaincu(e) que l'algorithme est à la fois correct et robuste, c'est-à-dire qu'il calcule juste et bien dans tous les bons cas de figure. Par exemple on peut imaginer que le programme s'exécute correctement avec des nombres positifs mais qu'il est incorrect avec des nombres négatifs. L'algorithme est juste mais la résolution sera incomplète.
Il faut donc en plus d'un éditeur et d'un analyseur d'algorithmes un exécuteur qui connaisse les bonnes réponses pour des entrées bien choisies afin de pouvoir indiquer si le code écrit correspond bien à la résolution exhaustive du problème. Dans de nombreux cas, même en initiation, un problème peut demander de nombreux jeux d'essais différents afin de couvrir tous les cas possibles. Apprendre à programmer, c'est aussi apprendre à "tout prévoir" et à "tout tester". Avoir un système automatisé qui fournit des problèmes et qui "connait" tous les cas à tester permet d'indiquer à l'utilisateur les cas qu'il a couverts et ceux qui ne sont pas encore pris en compte par son algorithme.
Enfin, pour savoir "si on sait programmer", il faut passer par de nombreux exercices, souvent de difficulté croissante. Ce n'est pas à l'apprenant de choisir ces exercices ni leur progression. C'est bien à une équipe pédagogique qu'il revient de construire ces séries d'exercices, parfois de même nature car nous pensons qu'apprendre à programmer, c'est comme apprendre à parler une langue : seule une pratique assidue vérifiée et validée peut permettre de considérer que les compétences sont acquises. Seul un environnement automatisé permet de laisser l'apprenant essayer et ré-essayer encore, jusqu'à tant qu'il ou elle réussisse un exercice avant de passer au suivant et, au final, disposer d'un certificat qui atteste de ses efforts et de sa compétence via une pratique jugée suffisante par une équipe pédagogique.
Un exemple d'une telle progression est présentée dans la séquence didactique nommée PMG (Petit Moyen Grand) qui consiste, étant données 3 variables d'entrée a,b,c non nécessairement numériques, à écrire au moins 5 algorithmes avec des contraintes différentes pour réussir à mettre dans les 3 variables de sortie p,g,m respectivement la plus petite valeur, la plus grande et celle du milieu. La page liée à ce problème algorithmique est ici.
3. Quel type de plate-forme ?
Une interface à distance de type LMS, disons à la Moodle, à la MarkUs ou à la Sakai est sans doute le type de plate-forme le plus simple à réaliser et à utiliser. Nous avons déjà indiqué que l'apprenant devra réussir l'écriture et l'exécution de nombreux exercices avant de disposer d'une attestation de compétence en algorithmique. Cela implique donc d'avoir d'une part une base de données d'exercices et des listes de progression pédagogique et d'autre part une base de données des apprenants et de leurs essais afin d'assurer le suivi de la réalisation des exercices.
Les plate-formes actuelles à la Moodle sur Internet sont suffisamment au point quant au stockage et à la restitution des informations pour garantir à la fois un accès facile pour l'apprenant et un suivi pratique pour l'enseignant. Utiliser une telle plate-forme ne requiert qu'un navigateur sur ordinateur sans doute -- plutôt qu'une tablette, à cause de la saisie de texte -- ce qui rend cette solution "simple et universelle".
Le point fort de cette solution est qu'il n'y a aucun logiciel ni langage à installer sur ordinateur. Il n'y a donc pas de risque qu'un apprenant ne réussisse pas à utiliser la plate-forme. De plus les interfaces à la Moodle semblent être bien intégrées aujourd'hui aux enseignements de licence, ce qui signifie que les apprenants n'auront besoin d'aucun temps d'apprentissage supplémentaire pour utiliser cette interface.
Par contre, et contrairement à l'usage traditionnel restreint de Moodle, il faudra que cette plate-forme puisse être utilisée en accès libre par tout internaute, étudiant angevin ou pas, afin de permettre de tester cette plate-forme par de nombreux utilisateurs.
4. Faisabilité du projet et ressources nécessaires
La question la plus cruciale du projet est sans doute «Est-il possible de faire analyser du code et l'exécuter par un ordinateur à distance ?».
Heureusement, la réponse est OUI.
Il existe déjà en effet sous Moodle au moins une plate-forme d'exécution de contenu, désignée par le terme de VPL (Virtual Programming Lab). Historiquement développée en 2012 pour le langage C++ (voir l'article fondateur), le plugin développé en Espagne a notamment été utilisé en France à Grenoble pour l'enseignement du langage Java dans le cadre du projet CaseInE.
La version 3.2 de ce VPL supporte de nombreux langages de programmation dont PERL et il ne reste sans doute qu'à interfacer notre script d'analyse et d'exécution pour le langage algorithmique GALG pour disposer d'un environnement opérationnel servant de preuve de concept une fois que les premiers exercices algorithmiques et les premières listes de progression auront été rédigés.
La première ressource nécessaire à ce projet est donc des enseignants-chercheurs pour concevoir les exercices et les listes de progression. Il nous semble que le nombre de participants actuels est suffisant pour créer ces listes. Il faudra sans doute rajouter un ingénieur pédagogique ou un chargé de mission pour mettre en forme ces exercices et ces listes.
Les ressources informatiques à déployer ne sont pas très importantes non plus : Moodle est déjà installé à l'université d'Angers et à Nantes. Il faut "juste" un développeur PHP confirmé ou un ingénieur pédagogique sachant programmer pour interfacer Moodle afin d'intégrer les bases de données d'exercices, de progression et de suivi des étudiants et mettre en place l'interface d'analyse et d'exécution.
Enfin, les ressources financières n'ont pas besoin non plus d'exiger un budget très conséquent et ne devraient pas dépasser trois mille euros. Nous n'avons besoin que de payer quelques déplacements et rencontres, peut-être pour faire venir le développeur du plugin ou une enseignante de Grenoble afin de profiter de leur expertise et de leur retour d'expérience. Voici, à titre très approximatif, une répartition envisageable de la somme à dépenser :
environ 1 500 euros pour des déplacements internationaux car le développeur du plugin VPL est espagnol ;
environ 900 euros pour des déplacements nationaux pédagogiques, des EC de Grenoble utilisent déjà ce VPL pour le langage Java ;
environ 600 euros pour des déplacements nationaux stratégiques (COMUE,académie, région, ministère...).
En ce qui concerne la partie informatique et développement, deux pistes de cofinancement sont à l'étude. D'une part l'appel à projets de pédagogies innovantes de l'université d'Angers (printemps 2017), d'autre part une collaboration avec la DDN-UA et le LAB-UA. Une réunion a déjà eu lieu le 17 janvier 2017 avec des représentantes de ces structures angevines. Une machine virtuelle pour supporter l'éxécution à distance des algorithmes sera sans doute mise à disposition et une évaluation du temps de programmation à prévoir pour l'interfaçage avec Moodle est en cours...
5. Feuille de route non calendaire
Il est difficile de prévoir quel temps mettra le développeur pour fournir une intégration complète du plugin VPL pour Moodle. Toutefois il est raisonnable de penser qu'à la fin du premier semestre nous disposerons à la fois d'une base de données intégrant des exercices avec leurs listes de progression, d'une base de données permettant le suivi de la progression des apprenants et d'au moins une interface d'exécution des algorithmes. Le second semestre viendra ajouter une interface "pédagogique" à l'analyse des algorithmes avant exécution, une gestion fine des erreurs d'exécution et de la progression à effectuer et, si le temps le permet, l'intégration d'un éditeur "intelligent" d'algorithmes.
En ce qui concerne les contenus pédagogiques, le nombre important de participants permet d'assurer l'écriture de nombreux exercices et de listes de progression pour que la plate-forme soit suffisamment alimentée une fois opérationnelle. Il est prévu une réunion mensuelle sur l'avancement de ces contenus. Les participants se sont aussi engagés pour servir de beta-testeurs de la plate-forme au cours du deuxième semestre.
6. Pas de concurrence et une extension nationale possible
A notre connaissance, il n'y a aucun projet similaire, même si :
il y a des tentatives d'enseignement de l'algorithmique avant l'université via Scratch, les "class codes", mais pas d'évaluation des compétences.
au niveau post-bac, il y a des plate-formes d'exécution distante, des plate-formes de dépot et de suivi pour des langages donnés, mais pas de certification de compétences algorithmiques.
Il semblerait que le C2I (certificat informatique et internet) instauré ministériellement par la circulaire du 30 avril 2002 soit remplacé/complété par un nouveau cadre national de certification et de positionnement car «les B2I (scolaires et adultes) et C2I (étudiants et niveau 2) ont été évalués comme étant des certifications riches mais insuffisamment connues et reconnues». La mise en place de ce nouveau cadre a commencé en janvier 2016. Il est issu d’une réflexion européenne, le DIGCOMP.
Le développement de l'outil de positionnement numérique nommé PIX a débuté mi-juin 2016 avec une startup d'Etat : pix.beta.gouv.fr. PIX est «un service d'évaluation et de certification des compétences numériques, qui vise à stimuler et à accompagner la formation nécessaire à la transformation digitale de nos sociétés» comme indiqué sur le site ecolenumerique.education.gouv.fr.
En conformité avec le cadre de référence européen DIGCOMP, PIX est un projet public de plate-forme en ligne dont l'objectif est de "Mesurer, développer et valoriser ses compétences numériques".
Après évaluation du site mis à disposition en version beta il nous semble que ce site n'est pas vraiment adapté à l'évaluation de compétences algorithmiques, ne serait-ce que par le format des questionnaires en QCM, même si le terme évaluation de compétence algorithmique est employé sur ce site.
Il serait intéressant, avec un peu d'ambition, de coupler la plate-forme de notre projet à un référentiel national d'enseignement et de la faire valider par un organisme national "sérieux" comme la SIF (société informatique de France) afin d'en faire un outil d'aide à l'apprentissage en ligne de la programmation, en tant que complément à un enseignement de la programmation algorithmique en présentiel ou en distanciel.
En conclusion, une fois la preuve de concept démontrée, notre projet sera une alternative crédible pour une "vraie" évaluation de compétences algorithmiques et pourra faire place à un projet national.
Retour à la page principale de (gH)