Evaluation des savoir-faire algorithmiques,
un projet en innovation pédagogique
gilles.hunault "at" univ-angers.fr
1. Algorithmique, programmation et évaluation
Il faut sans doute, soyons prudents, distinguer la programmation au sens strict et celle au sens large. Ce que nous nommons la programmation au sens strict consiste en la traduction d'un algorithme déjà décidé en un programme dans un langage déjà choisi. A l'opposé, la programmation au sens large ou «développement informatique» laisse la place aux problèmes d'analyse et de conception, à la discussion algorithmique, au choix du ou des langages à utiliser, à la définition des tests unitaires, au design de l'interface utilisateur, aux documentations comme le manuel de l'utilisateur, le manuel du programmeur et le livret des exemples.
L'enseignement de l'algorithmique impérative fondamentale qui constitue le socle initial de l'apprentissage de la programmation est souvent difficile, que ce soit en formation classique ou continue. Classiquement, les étudiants sont confrontés à au moins deux difficultés récurrentes majeures : écrire les algorithmes en français et tester les résultats de leurs programmes (pas des algorithmes). Il est en général impossible de tester un algorithme car la plupart du temps il est traduit dans un langage. Il est souvent compliqué pour les étudiants de savoir si un programme produit les résultats corrects car lorsqu'ils exécutent leurs programmes, les étudiants débutants se contentent en général d'une ou deux vérifications sommaires «dans les bons cas et avec des données minimales».
Evaluer le savoir-faire algorithmique est donc souvent relégué à une place secondaire dans l'enseignement universitaire classique où on vient plutôt tester des programmes que des algorithmes sans avoir de temps à consacrer ni aux tests unitaires ni à la documentation ou aux interfaces utilisateur.
Il y a donc ici deux innovations à la clé : une évaluation des savoir-faire au lieu de l'évaluation classique des connaissances et une analyse des algorithmes en dehors de leur traduction dans un langage.
2. Un projet pour une telle évaluation
Afin de fournir une place suffisamment conséquente à l'algorithmique fondamentale et s'affranchir au moins partiellement des langages -- le temps d'apprendre l'algorithmique, il pourrait être intéressant de développer, dans une première étape, 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 couplée à une interface de dépot, d'analyse, d'exécution et de suivi de progression dans la réalisation des exercices.
Un exemple de tel exercice est celui nommé problème algorithmique 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.
Le détail des contraintes pour la séquence didactique de cet exercice est fourni sur la page PMG.
L'interface de dépot, d'analyse et d'exécution d'algorithmes pourrait être développée autour d'un langage algorithmique comme GALG via le plugin pour Moodle nommé VPL.
3. Appel à partenariat et extensions du projet
Nous recherchons pour ce projet des enseignants intéressés par la mise en commun d'exercices algorithmiques et de séquences didactiques afin de pouvoir définir des programmes de certification en algorithmique comme par exemple :
Certification niveau 1 : affectations, tests, boucles, tableaux et sous-programmes élémentaires...
Certification niveau 2 : structures de données, expressions régulières, tableaux associatifs, récursivité...
Nous recherchons aussi des personnes ayant l'expérience de dépot et d'évaluation «à la MarkUs» ou «à la Moodle» pour définir cette plate-forme de dépot, d'analyse, d'exécution et de certification.
A plus long terme, dans la mesure où il s'agit d'exécuter et d'évaluer du code dont les entrées et sorties sont connues et normalisées, il pourrait être possible d'étendre cette plate-forme à l'analyse de programmes informatiques en plus de l'analyse d'algorithmes, pour fournir éventuellement un cadre commun d'écriture de code et de benchmarks, de mettre en place une correction automatique des algorithmes, une évaluation de la qualité des algorithmes et des programmes. Toutes les compétences en génie logiciel sont donc les bienvenues.
Retour à la page principale de (gH)