Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Programmer par blocs au lycée et en IUT
Article mis en ligne le 7 avril 2017
dernière modification le 2 juillet 2017

par Patrick Raffinat

A) Introduction

L’arrivée du codage au collège à la rentrée 2016 m’a conduit, pendant plusieurs numéros de MathémaTICE, à consacrer mes articles à la réforme du collège. Pour autant, je n’ai pas cessé de m’intéresser à l’enseignement de la programmation (textuelle) au lycée, dont j’ai dénoncé les tares dans les numéros 46 et 47 [1] : donc, après cette parenthèse sur la réforme du collège, je me penche à nouveau au chevet de ce grand malade.

Il y a certes eu depuis des nouveautés en matière de l’enseignement de l’informatique, que je résume en reproduisant quelques phrases empruntées à l’éditorial de septembre 2016 de l’EPI (Association Enseignement Public & Informatique) [2] :

Cette rentrée 2016 voit l’extension de l’option de spécialité de Terminale S « Informatique et sciences du numérique » en 1ères ES, L et S sous forme d’un enseignement facultatif « Informatique et création numérique ». De l’informatique figure dans les nouveaux programmes des cycles 2, 3 et 4, pour le cycle 4 dans les cours de mathématiques et de technologie. Ces nouveautés viennent rejoindre l’option ISN de Terminale S créée en 2012, l’enseignement de l’informatique pour tous les élèves de CPGE scientifiques introduit en 2013 et l’enseignement d’exploration « Informatique et création numérique » mis en place en classe de Seconde en 2015.

L’EPI y voit une « avancée réelle », mais déplore que les nouveaux enseignements au lycée ne soient proposés que sous forme optionnelle. L’EPI se montre même critique pour celui d’ICN en classe de Première :

L’accent est mis sur les méthodes pédagogiques alors que les contenus, eux, se retrouvent relégués bizarrement en annexe dans une formulation peu détaillée en termes de notions scientifiques … Les projets proposés sont intéressants, mais trop ambitieux.

Ce grand malade qu’est l’enseignement de l’informatique au lycée ne guérira pas tant que l’Education Nationale s’obstinera à nier la nécessité de la mise en place d’une continuité pédagogique en informatique. Au lieu de cela, elle empile les enseignements facultatifs … ce qui ne risque guère de faire progresser les nombreux lycéens qui ne les suivront pas !

C’est principalement à ces « élèves oubliés » que je m’intéresserai dans la première partie de cet article, en cherchant à convaincre leurs enseignants qu’un peu de programmation visuelle avec Blockly peut être très profitable à leurs élèves. Et comme je suis réaliste, je chercherai également à démontrer que cette introduction est facile à mettre en œuvre : pour cette année scolaire 2016-2017, 40 % de mes étudiants d’IUT ayant eu leur bac en 2016 m’affirment n’avoir utilisé que leur calculatrice au lycée…

Dans une seconde partie, je reviendrai sur l’introduction de la programmation visuelle que j’ai expérimentée en première année d’IUT : j’en avais exposé les motivations et les grandes lignes dans le N°53, mais sans en tirer de conclusions puisque je n’avais pas terminé cette expérimentation.

B) Blockly au lycée

Introduction

Dans le numéro 48 de MathémaTICE, j’ai écrit un article intitulé « Programmation visuelle avec Blockly et réforme du collège ». A cette occasion, j’avais eu la curiosité de chercher sur internet si Blockly était utilisé au lycée : j’avais eu plusieurs réponses liées à la robotique, mais une seule liée à l’enseignement des mathématiques au lycée.

C’est bien peu, mais je me console en me disant que cela a débouché [3] dans le numéro 52 sur un article intitulé « Géométrie et algorithmique en seconde » où trois enseignants de mathématiques (P. Byache, D. Beaubiat et C. Spaier) décrivent une expérimentation novatrice associant ces deux enseignements :

Notre parti-pris essentiel consiste à ne pas considérer l’algorithmique comme une simple illustration de quelques points du cours de mathématiques, mais comme une science qui met en application plusieurs notions du programme de mathématique de seconde. L’algorithmique est un élément de motivation pour les élèves, d’abord par sa forme : elle permet de faire bouger des objets comme dans un jeu vidéo ; mais elle est également motivante sur le fond, parce qu’elle participe à donner une raison d’être aux notions mathématiques enseignées en classe de seconde.

Le mot jeu vidéo ne doit pas effrayer puisque les activités proposées sont avant tout des mathématiques ludiques, qui ne font pas sortir les enseignants de leur sphère de compétences comme au collège (bataille navale, pong…) :

Nous avons fait travailler nos élèves à plusieurs reprises au cours de l’année sur cette question. Il leur a été demandé d’afficher à l’écran des objets simples comme un disque rouge ou un rectangle vert, de les faire se déplacer, de faire déclencher certains événements comme des explosions à des moments bien précis, de faire rebondir les objets sur les parois de la zone graphique ou encore de leur faire suivre des trajectoires paraboliques. A chaque fois, le travail permettait d’apporter une amélioration dans la programmation des mouvements et utilisait les notions mathématiques qui étaient en cours de travail.

Cela montre qu’il est possible, même avec le programme officiel actuel, de donner une vision positive de l’algorithmique au lycée : n’utiliser qu’une calculatrice, comme 40 % de mes étudiants arrivant du lycée, n’est donc pas une fatalité !

Les auteurs de « Géométrie et algorithmique en seconde » invitent les lecteurs à prolonger l’expérience dans leur propre contexte et à leur faire part des réflexions, suggestions et critiques qu’elle suscite. J’espère qu’ils seront entendus, mais je crains que seuls des enseignants très motivés ne s’engagent dans une voie nécessitant un investissement important.

Donc, pour convaincre le plus grand nombre de collègues à introduire un peu de programmation visuelle avec Blockly au lycée, je préfère miser sur d’autres suggestions :

  • associer programmation visuelle et tableur
  • associer programmation visuelle et programmation textuelle

Blockly et tableur

Dans le numéro 49 de MathémaTICE, j’ai illustré quelques atouts du duo Blockly / tableur Xcas au collège et au lycée. Pour le lycée, j’avais présenté deux exemples  [4] : moyenne d’un tableau et suites récurrentes. Pour mémoire, voici le premier exemple, où la trace affichée en colonne B permet de mieux comprendre l’algorithme :

Les enseignants ayant peu de séances sur ordinateur peuvent même, grâce au regroupement du tableur de Xcas et de Blockly dans la suite logicielle Mathém@ALGO, envisager des séances mixtes avec des activités purement mathématiques (tableur) et des activités algorithmiques (Blockly).

Blockly et langages textuels

L’apprentissage d’un langage textuel peut être facilité par l’utilisation conjointe de Blockly :

  • les élèves commencent par programmer avec Blockly, évitant ainsi les écueils syntaxiques d’un langage textuel.
  • un traducteur leur fournit le code équivalent dans un langage textuel.
  • les élèves complètent éventuellement le code textuel avant de l’exécuter.

Dans le N°50 de MathémaTICE (voir Mathém@ALGO, une suite logicielle très polyvalente), j’ai montré comment mettre en oeuvre cette approche. Je l’ai testée brièvement lors d’un atelier découverte avec des lycéens, en passant de Blockly à AlgoBox (voir onglet « Atelier »).

Mais l’approche Blockly/AlgoBox a peut-être du plomb dans l’aile si, comme certaines rumeurs le laissent entendre, Python devient le langage recommandé (imposé ?) par l’Education Nationale en Seconde. Heureusement, j’avais eu la bonne idée de permettre aussi l’approche Blockly/Python dans Mathém@ALGO ! A ce sujet, je signale que depuis l’article du N°50 j’ai développé (hors Mathém@ALGO) un outil plus ergonomique destiné à des élèves en situation de handicap : voir lien.

La passerelle entre Blockly et Python est mono-directionnelle : le programme Blockly peut être transformé en un programme Python, mais le programme Python ne peut pas être transformé en un programme Blockly. Cela correspond à l’ordre naturel d’apprentissage du codage : on s’initie d’abord à la programmation visuelle avant de passer à la programmation textuelle. Néanmoins, il peut être utile pour un élève débutant en Python de visualiser sous forme de blocs son code Python, ce que permet partiellement le logiciel BlockPy :

Atelier découverte

Récemment, un enseignant de mathématiques de Terminale S a sollicité mon département d’IUT (Statistique et Informatique Décisionnelle à Pau) pour qu’il organise plusieurs ateliers de découverte en mathématiques et en informatique. La classe a été divisée en deux groupes pour que chaque élève ait un ordinateur à sa disposition et chaque groupe a suivi trois ateliers d’une demi-heure :

  • applications statistiques avec divers logiciels (dont R).
  • simulation probabiliste avec un tableur et application pour l’estimation du nombre π.
  • initiation à la programmation visuelle avec Blockly et son extension tortue.

C’était la première fois que j’animais un atelier d’informatique pour lycéens. Son déroulement avec les deux groupes a été conforme à mes espérances : la thématique de l’atelier a été particulièrement appréciée, ce qui n’est guère étonnant puisque « cette bonne vieille tortue » séduit depuis des lustres.

Durant l’atelier, les élèves avaient quelques figures à réaliser, à choisir dans une liste que je leur proposais après leur avoir montré les rudiments de la manipulation par blocs (à partir de la première démonstration disponible sur Mathém@ALGO) :

Certains élèves ont bien sûr eu la curiosité de télécharger d’autres exemples pour les tester. Il y a même eu une lycéenne, qui mue par je ne sais quelle inspiration, a changé certains paramètres du second exemple disponible pour obtenir le surprenant résultat suivant (consulter).

S’il y a des enseignants désirant faire une séance découverte de Blockly dans leur lycée, je mets à leur disposition le document papier que j’avais distribué en début d’atelier. On peut y noter qu’avant d’aborder la programmation visuelle avec la tortue, j’avais tenu à montrer comment passer d’un programme visuel à un programme textuel (Python, Javascript et AlgoBox) avec Mathém@ALGO : je ne l’ai bien sûr pas dit aux participants (élèves et professeur), mais j’espère que le bouche à oreille contribuera à ce que leur lycée travaille dans cette direction les prochaines années...

document distribué lors de l’atelier

C) Expérimentation Blockly en IUT

Rappels

Comme je l’ai expliqué dans un article du numéro 53 intitulé « Algorithmique : pourquoi compliquer quand on peut faire simple ? », j’ai pour la première fois intégré la programmation visuelle dans mon module d’initiation à l’algorithmique en IUT :

  • en cours, mes exemples ont été illustrés avec trois notations (algorithmique, Javascool et programmation visuelle).
  • en travaux pratiques (séances avec ordinateur), j’ai consacré 3 séances à la programmation visuelle et 7 séances à la programmation Javascool.

L’autre nouveauté, avec la programmation visuelle, a été d’introduire de nombreux exercices portant sur la tortue Logo : des exercices sur papier avec des notations algorithmiques (travaux dirigés) et des exercices sur machine avec l’extension Sofus de Blockly (travaux pratiques). Ces exercices ont été posés en première semaine (avec des boucles « Répéter n fois ») et en cinquième semaine (avec des sous-programmes).

Bilan

Chaque année, je suis habitué à avoir des élèves au niveau très hétérogène. Il m’est donc difficile de savoir si le niveau moyen a progressé, si ce n’est sur un point sur lequel je reviendrai : les sous-programmes.

Un rien peut toujours déstabiliser certains étudiants, comme ce premier exercice de travaux pratiques de la semaine 4 (boucles en Javascool) :

Ecrivez un programme Javascool qui demande à l’utilisateur un nombre de départ, et qui ensuite affiche les dix nombres suivants. Par exemple, si l’utilisateur entre le nombre 17, le programme affichera les nombres de 18 à 27.

Je ne les ai pas comptés, mais il me semble qu’il y en a environ 20% ! Je n’ai pas d’élément de comparaison avec les années précédentes, car je n’avais pas posé cet exercice a priori évident, mais ce n’est qu’une demi-surprise : j’ai l’habitude depuis de nombreuses années de voir des étudiants ne pas savoir traiter d’autres questions que je pensais simples...

Un point très positif de mon expérimentation est que, grâce aux exercices avec la tortue (semaine 1 et semaine 5), l’implication des étudiants a été bien supérieure à celle des années précédentes. Cela vaut aussi pour les exercices sans tortue, même si l’augmentation de la motivation n’a pas été aussi spectaculaire.

Lors de la seconde moitié du module, j’ai abandonné tortue et programmation visuelle pour revenir à des exercices plus classiques et, hélas, plus austères : pour former des étudiants d’IUT dans la spécialité « Statistiques et informatique décisionnelle », je ne peux quand même pas me contenter de faire de l’informatique ludique ! Et là, le retour sur terre a été brutal, avec ce premier exercice de travaux pratiques de la semaine 6 (sous-programmes en Javascool) :

Introduisez une procédure affichant tous les entiers compris entre deux bornes (paramètres de la procédure), puis utilisez-la dans un programme principal qui demande à l’utilisateur un nombre de départ, et qui ensuite affiche les dix nombres suivants.

L’exercice a en effet été conceptuellement difficile pour la moitié (au moins) des étudiants, ce qui confirme le faible niveau d’abstraction constaté (en informatique et en mathématiques) par mes collègues et moi depuis plusieurs années.

Cela me conforte donc dans le choix d’avoir décidé cette année d’aborder les sous-programmes avec la tortue : j’ai ainsi pu illustrer pratiquement l’intérêt du découpage en sous-programmes, sans être pénalisé par le faible niveau d’abstraction des étudiants. Dans la suite du module, il a donc été ensuite moins difficile que d’habitude de les convaincre de faire des efforts pour surmonter leurs difficultés d’abstraction concernant les sous-programmes...

Compléments

Notations algorithmiques et programmes visuels

Dans mes cours, il m’est arrivé à plusieurs reprises d’accompagner mes notations algorithmiques de programmes visuels, ce que je vais justifier à partir de l’exemple suivant :

Le programme visuel, que je trouve plus intuitif [5], me permet également de justifier l’indentation de l’algorithme : elle correspond au niveau d’imbrication des blocs.

Le programme visuel est également plus adapté lorsque je dois expliquer comment traduire des instructions conditionnelles en Javascool :

  • j’explique que chaque sous-bloc d’un bloc « Si » est délimité par une accolade ouvrante et une accolade fermante en Javascool.
  • je n’ai plus à fournir de « recettes bancales » du style : « alors » est traduit en « { », « sinon » est traduit en « } else { » et « FinSi » en « } ».

Sous-programmes

Dans le numéro 53 de MathémaTICE, vous trouverez les énoncés de plusieurs séances de travaux pratiques, dont celui de la semaine 5 (sous-programmes avec la tortue). Dans l’exercice 2 de cette séance fondamentale, mes étudiants devaient aboutir à un programme Blockly dessinant ce lotissement (dont les maisons sont très stylisées !) :

La séance avait en partie été préparée en cours avec des notations algorithmiques :

  • définition des procédures « carré » et « triangle », puis d’une procédure « maison » les utilisant.
  • utilisation de la procédure « maison » pour afficher une maison, puis pour afficher une rangée de 5 maisons à l’aide d’une boucle.

La première phase de l’exercice en travaux pratiques a été de finaliser avec Blockly le travail de préparation effectué en cours. Dans la seconde phase, j’ai demandé aux étudiants de passer d’une boucle affichant 5 maisons à une procédure dessinant une rangée de maisons, procédure paramétrée par la taille d’une maison et le nombre de maisons. Pour éviter qu’ils ne jugent inutile de faire cet effort de conceptualisation, j’avais décidé de faire utiliser la procédure dans un programme principal non trivial avec un lotissement de 3 rangées (une de 5 maisons, puis une de 4 maisons, puis une de 5 maisons).

corrigé du TP 5

Le programme Blockly final peut être récupéré en dézippant le fichier ci-dessous, afin d’être testé avec Mathém@ALGO :

programme Blockly final

D) Conclusion

La programmation visuelle est pertinente non seulement au collège, mais aussi au lycée : c’est pourquoi je me suis efforcé de convaincre mes collègues de lycée d’introduire un peu (beaucoup n’est pas interdit !) de programmation visuelle avec Blockly dès à présent, sans attendre l’arrivée d’élèves ayant eu des enseignements d’informatique en cycle 3 et en cycle 4.

Je suggère de débuter en seconde par quelques applications avec l’extension « tortue Sofus » de Blockly, comme je l’ai fait lors d’un atelier avec des lycéens : il est en effet fondamental de donner une vision attractive du codage aux lycéens, ce qui n’est hélas pas toujours le cas actuellement...

Ensuite, avant de passer à la programmation textuelle, je suggère de traiter (sans tortue) quelques algorithmes plus classiques avec Blockly : autant éviter l’écueil syntaxique de la programmation textuelle dans un premier temps, sans oublier l’intérêt pédagogique de blocs manipulant une variable (augmenter, augmenter d’un pourcentage...). Bien sûr, l’intérêt de la programmation visuelle sera renforcé si on dispose d’un traducteur de Blockly vers le langage textuel enseigné en classe.

La programmation visuelle peut également être profitable ponctuellement en première et en terminale, après l’utilisation d’un langage textuel en seconde : je songe notamment à l’extension Xcas de Blockly, qui permet de combiner algorithmique et tableur dans un cadre mathématique.