Présentation d’un langage de programmation créé en mars 2014 à destination des grands débutants en algorithmique et/ou en programmation.
par Christophe Gragnic
Professeur de mathématiques et d’informatique, j’ai eu l’occasion d’utiliser plusieurs langages ou outils pédagogiques pour enseigner l’algorithmique ou la programmation. Mais n’étant pas pleinement satisfait par ce qui était alors à ma disposition vers le printemps 2012, j’ai décidé de créer MicroAlg.
Présentation de MicroAlg
Une citation de John Maeda qui correspond tout à fait à MicroAlg [1] :
Les débutants en programmation n’ont pas besoin d’un énorme camion toutes options. Ils veulent juste une simple trottinette qu’ils comprennent tout de suite.
MicroAlg est donc un langage de programmation en français dédié à l’algorithmique et à son enseignement. Assez jeune (développé depuis mars 2014) et extrêmement simple (des parenthèses et des guillemets pour seule syntaxe), il permet l’apprentissage des concepts les plus importants de l’algorithmique et de la programmation impérative [2].
De par sa simplicité, il est principalement destiné aux grands débutants. D’un côté, on pourrait dire que quelqu’un qui sait utiliser une structure conditionnelle et une structure répétitive astucieusement n’a pas besoin de MicroAlg et peut passer à un langage plus évolué, mais d’un autre côté, les non-débutants auront aussi quelque chose à apprendre de MicroAlg, de par sa syntaxe inhabituelle et pourtant si limpide : l’arbre des instructions y apparaît tout naturellement.
Fonctionnalités
Une des forces de MicroAlg est qu’il est utilisable dans un navigateur. En voici la preuve :
Non seulement le programme ci-dessus peut être exécuté en cliquant sur le bouton OK
, mais aussi modifié avant d’être exécuté à nouveau, sans avoir à télécharger et installer quoi que ce soit ! Essayez vous-même de modifier la valeur 18 dans le programme ci-dessus.
Si vous pouvez publier vous-même des pages sur Internet, vous pouvez donc y incorporer des échantillons de code interactifs. Si vous ne pouvez pas, la galerie est faite pour vous. Non seulement elle vous permet de publier votre propre contenu sur Internet (des séances, des exemples…), mais elle permet aussi à des élèves de faire parvenir leur travail à leur enseignant. Voici un exemple de scénario :
- une élève « poste » sur la galerie un programme qu’elle veut faire vérifier par son professeur
- elle communique à son enseignant l’adresse du programme ;
- l’enseignant se rend sur la page et peut étudier le programme directement dans le navigateur (exécution, modification…), sans rien télécharger ni installer ;
- l’enseignant communique à son élève des remarques sur le travail ;
- tout ceci jusqu’à ce que les deux parties s’accordent.
De plus, MicroAlg peut aussi être utilisée de manière traditionnelle, avec un éditeur de texte pour travailler sur des fichiers à organiser comme bon vous semble.
Sur cette copie d’écran, un programme est en cours de rédaction. Il a été testé une fois (on voit le résultat sur la droite) et une ligne est en cours de rédaction (celle qui commence par (Definir…
). Dès que l’éditeur reconnaît une commande, il propose une petite fenêtre d’aide qui rappelle le rôle de la commande et ses paramètres.
Sans reprendre tout ce que dit le site officiel, je résume ce qui me semble être les principaux atouts de MicroAlg :
- une syntaxe simplissime, qui s’appuie sur la notation polonaise
(commande argument1 argument2 …)
.2x+1
doit être écrit(+ (* 2 x) 1)
, ce qui indique bien que cette expression est une somme.
Les seuls caractères spéciaux sont les parenthèses et les guillemets. - Des mots-clés en français et en nombre réduit (voir la doc)
- les plus courants :
+
-
*
/
%
**
^
!!!
=
=/
<
<=
>
>=
Affecter_a
Afficher
Alors
Concatener
Definir
Demander
Entier@
Et
Faire
Faux
Initialiser
Longueur
Nombre
Non
Ou
Retourner
Rien
Si
Sinon
Tant_que
Texte
Vrai
- commandes graphiques :
AV
BC
LC
TD
TG
Cercle
Contour
Ellipse
Epaisseur
RAZ
Rectangle
Remplissage
Segment
Triangle
- et pour une utilisation avancée :
1000Cosinus
1000Sinus
Aide
Ajouter_a
credit_iterations
En_position
Exemples_de
Initialiser@
Liste
Millisecondes
Nieme
Nieme@
Queue
Retirer_de
sequence_tirages@
Tester
Tete
Type
Vide?
- les plus courants :
- une utilisation possible dans un navigateur (entre autres) ;
- une plateforme d’édition destinée aussi bien aux professeurs qu’à leurs disciples : la galerie ;
- la possibilité de programmer en déplaçant des blocs (ou briques) (voir plus bas) ;
- une intégration possible à peu près partout : version JavaScript pour le navigateur, version Java pour travailler dans un éditeur de texte normal et peut-être un jour communiquer avec Geogebra ou un robot, version C pour embarquer dans une Arduino ou autre. Depuis tout récemment (début juillet 2015), MicroAlg peut dessiner des formes géométriques grâce à une communication avec Processing.
Plus précisément, en comparant avec ce que j’utilisais avant :
- Algobox peut être lourd à manipuler (par exemple pour déplacer des instructions vers l’intérieur d’un Si Alors Sinon). Avec MicroAlg, les blocs comme le texte sont assez maniables. De plus, Algobox n’a pas vraiment de version web ni d’espace d’échange, contrairement à MicroAlg. [Mise à jour du 12 décembre : on me fait remarquer que proglab.fr propose une version Algobox en ligne et de quoi partager des programmes. Ce que je voulais dire, c’est que le travail sur navigateur ne faisait pas partie du projet originel, même si un export vers HTML était déjà possible il y a bien longtemps].
- Scratch n’a pas d’interface textuelle. MicroAlg peut être utilisé avec des blocs comme avec du texte, sachant qu’il est très facile de passer de l’un à l’autre.
- Python ou JavaScript étant de « vrais » langages, ils ont une syntaxe bien trop subtile et un nombre d’instructions bien trop élevés pour que les grands débutants soient à l’aise.
Un tableau comparatif a été mis en place afin de visualiser plus facilement les différences des quelques outils. Une des choses qui manque encore à MicroAlg est la possibilité de placer ou tracer dans un repère de façon simple. C’est possible, mais pas simplement.
Programmation visuelle
Cette possibilité de programmer avec des blocs sera appréciée si les élèves sont souvent impressionnés par le code et par le risque de faute de frappe. Cette facilité qui est offerte n’enferme pas pour autant les élèves dans la programmation visuelle car MicroAlg offre la possibilité de passer facilement des blocs au code source textuel.
Dans quel but ? Le code source textuel est plus souple et plus puissant. C’est grandir que de passer de la programmation visuelle à la programmation textuelle.
De quelle manière ? Notez comme sur l’échantillon précédent le code textuel du programme est mis à jour en direct lorsque que l’on attache ou détache des blocs. De plus, le jeu de blocs utilisables reflète exactement celui des commandes textuelles disponibles, c’est en quelque sorte le même langage : à chaque commande textuelle correspond un bloc et inversement.
Les blocs ont toutefois un avantage car leur forme indique si la commande qui leur correspond :
- accepte des paramètres et si oui, leur nombre (ce sont les « prises femelles » sur la droite),
- retourne une valeur (une « prise mâle » sur la gauche),
- peut suivre ou précéder une autre commande (les petites prises en haut et en bas des blocs).
Leur utilisation est donc intéressante pour débuter avec MicroAlg, même si les élèves sont à l’aise avec la programmation textuelle.
Expérimentation grandeur nature en BTS SIO
MicroAlg a été testée en situation réelle, avec une promotion de 36 étudiants en Section de Technicien Supérieur, plus précisément en première année de Services Informatiques aux Organisations (SIO). Ces étudiants avaient une heure par semaine d’algorithmique (U22) en demi-groupe. Un rapport décrivant cette première année scolaire d’utilisation est en cours de rédaction : rapport 2014/2015.
La progression retenue est archivée sur cette page de la galerie et résumée à la fin de cet article en annexe.
Attention, MicroAlg n’impose aucune progression ! Au contraire ! MicroAlg a surtout été conçue pour être incorporée à différents systèmes. Un enseignant ayant déjà un site professionnel peut y inclure des échantillons interactifs de code. Et si vous n’avez pas de site, la galerie a été créée pour vous.
Algorithmique et mathématiques
Puisque cet article apparaît sur un site de matheux, c’est l’occasion de parler des liens entre algorithmique et mathématiques !
Des contenus mathématiques
Dans les tutoriels officiels (par exemple celui-ci), j’ai essayé de repousser le plus possible le travail sur les nombres et les calculs, afin de ne pas brusquer les apprenants qui seraient rebutés par cela. Je pense en effet que l’algorithmique est assez riche pour ne pas avoir à recourir tout de suite aux nombres.
Bien sûr, les boucles de MicroAlg nécessitent de savoir manipuler les nombres et les variables (il n’y a que les commandes Tant_que… Faire…
et Faire… Tant_que…
dans MicroAlg, peut-être bientôt une commande Repeter
, mais pas de commande Pour
), mais il est possible de travailler les conditionnelles sans nombres, comme dans la section Si du tutoriel officiel.
Malgré cela, le peu de temps disponible pour l’algo en classe de seconde ne permettra pas de beaucoup travailler sur le texte, peut-être seulement quelques exemples littéraires pourront aider les élèves à changer de cadre. Sinon, on pourrait aller plus loin en créant des jeux littéraires avec MicroAlg (peut-être en AP ?). Ici quelques exemples presque triviaux :
De plus, que ce soit pour les plus jeunes ou même les moins jeunes, travailler avec les commandes graphiques permet de faire des maths sans s’en apercevoir. Voir le tutoriel des commandes graphiques.
Un langage fonctionnel ?
Attention, cette partie dépasse le strict cadre de l’algorithmique au collège et au lycée. C’est une ouverture.
MicroAlg est un Lisp, et fait donc partie d’une grande famille très ancienne (voir la page Wikipedia de Lisp). Beaucoup de langages de cette familles sont dits fonctionnels (voir la page Wikipedia sur la programmation fonctionnelle), c’est-à-dire reposent sur le concept de fonction, au sens mathématique du terme. Elle s’oppose à la programmation dite impérative que l’on voit traditionnellement en algorithmique au lycée. Les principales idées directrices sont la place des fonctions et les types.
- D’une part ces fonctions n’interagissent pas avec l’extérieur (ne vont pas y chercher des informations et n’ont pas d’effets secondaires, comme des fonctions mathématiques), et d’autre part, elles peuvent être stockées dans des variables et passées à des commandes, comme on peut le faire pour des nombres ou du texte.
- Les langages dits fonctionnels accordent aussi une grande importance aux types des valeurs (nombre, texte, fonction de nombres vers nombres, de nombres vers « fonction de nombre vers nombre »…). Les types permettent de mieux raisonner sur les programmes et aident le compilateur à trouver certaines erreurs avant même de lancer le programme.
Disons-le tout net, MicroAlg n’est pas un langage fonctionnel. Mais…
- Une importance a été accordée aux types, mais avec MicroAlg, il n’y a pas d’analyse statique. C’est un langage interprété : les erreurs de typage n’apparaîtront qu’à l’exécution seulement, et il n’y a pas de vérification de la pureté de certaines commandes.
- Aussi, il est prévu d’emprunter certains des concepts des langages fonctionnels. On peut déjà passer des commandes en paramètre (voir cet exemple sur la galerie). Il est aussi prévu de pouvoir créer des fonctions à la volée, sans utiliser la commande
Definir
, de composer des commandes…
Même si le but premier n’est pas de faire des maths, il n’est pas interdit d’en faire sans le dire, et de chercher à faire raisonner. Une ouverture du langage MicroAlg vers le fonctionnel me paraît souhaitable.
Conclusion
Il faut aussi savoir que même si MicroAlg est déjà utilisable, le projet est encore assez jeune et attend ses utilisateurs et contributeurs. En effet, si un projet pédagogique me semble intéressant, je suis prêt à écouter (voire passer en priorité !) des idées de direction de travail.
Annexes
Progression en première année de BTS SIO
Elle a consisté en :
- Jouer au Robot Lumineux une petite demie-heure pour repérer les capacités des apprenants.
- Suivre le tutoriel par blocs jusqu’à la structure
Tant_que… Faire…
incluse, puis suivre le tutoriel textuel jusqu’à la structureTant_que… Faire…
incluse. Finir à la maison. - Préparer le terrain pour la suite de Syracuse en demandant à créer un algorithme « pair ou impair », puis un algorithme « compte à rebours ».
- Mettre en place l’algorithme de base de la suite de Syracuse, qui demande un nombre à l’utilisateur et affiche les termes de la suite en s’arrêtant au premier 1. Incorporer ensuite, si possible dans un même algorithme, le temps de vol, l’altitude maximale puis le temps de vol en altitude.
- Travailler sur les fonctions pures.
- Travailler sur les listes puis sur les listes de listes.
- Travailler sur la récursion.
Tout ceci va sans doute être reconduit avec la prochaine promotion. La sortie graphique n’était pas en place pendant cette année scolaire, mais elle permettra l’année prochaine de travailler avec une tortue, comme introduite par le langage Logo.