Clé d'accès :
Ci-dessous le brouillon,
un encadré où apparaissent les résultats affichés par des algorithmes
que l'on exécute.
Ingénieur ECP spécialisé en Informatique
Professeur agrégé de Mathématiques
Cet article a été essentiellement mis au point d'octobre 2018 à janvier 2019 suite à une demande de Guy MOREL, secrétaire et membre fondateur du GRIP, décédé le 24 février 2019. Je le dédie à sa mémoire, celle de l'ami et du collègue, celle d'un homme qui a toujours combattu l'obscurantisme et les dérives de l'enseignement. Il a donc été publié via le site du GRIP.
En quelques années le mot algorithme
est devenu une sorte de totem,
connu de tout le monde via des articles de presse
qui disent absolument tout et n'importe quoi, surtout dans l'objectif de faire peur,
confondant allégrement les algorithmes avec les logiciels,
en particulier ceux dits d'intelligence artificielle
, ce qui n'a rien à voir, ou si peu.
Alors soit on crie au génie, soit on tremble d'effroi, de façon irrationnelle.
On a même pu voir paraître en 2016 un ouvrage de Cathy O'Neil, au titre éloquent : Weapons of Math Destruction
(Armes de Destruction Mathématique). Il est paru en français en 2018 sous un titre aussi
percutant, Algorithmes : la bombe à retardement
, mais en évacuant curieusement les mathématiques
de l'annonce apocalyptique. L'ouvrage traduit étant
préfacé par Cédric Villani, l'escamotage pose question…
Chacun peut s'en poser en effet, en lisant un simple extrait de son introduction
(c'est Cathy O'Neil qui parle) :
Mais à l'automne 2008, un peu plus d'un an après mon arrivée, tout s'est brusquement effondré.
Le krach financier a révélé avec la plus grande clarté que les mathématiques, mon refuge de toujours, étaient non seulement intimement mêlées aux problèmes du monde, mais alimentaient également nombre d'entre eux. En récitant leurs formules magiques, les mathématiciens s'étaient rendus complices de la crise de l'immobilier, de la chute d'institutions financières majeures, de la montée du chômage. Grâce aux extraordinaires pouvoirs que je vénérais tant, les mathématiques s'étaient associées à la technologie pour décupler le chaos et le malheur, conférant une ampleur et une efficacité redoutables à des systèmes que je savais désormais défectueux.
On pourrait alors philosopher sur la responsabilité des concepteurs d'outils (matériels ou conceptuels) dans l'usage qu'on en fait, la guerre en particulier, mais là n'est pas notre propos.
On est malgré tout enclin à se demander quel est le lien entre les Mathématiques et l'Algorithmique, surtout lorsqu'on sait que cette dernière fait partie de l'enseignement des Mathématiques en Seconde depuis les programmes de 2009 au lycée et même au collège depuis 2015 (cycle 4), surtout avec l'application des nouveaux programmes depuis septembre 2019.
Bref, le mot algorithme
est mis à toutes les sauces de l'enseignement et des médias, sans que
le béotien puisse comprendre finalement de quoi on parle, alors que ce dernier peut être parent d'un élève
à même de l'utiliser régulièrement, en classe et dans son travail à la maison.
Rassurons tout de suite le lecteur : un algorithme n'est en rien un emblème porteur d'un pouvoir destructeur de quoi que ce soit, même par le truchement des Mathématiques.
Mais alors pourquoi tant de passion autour d'un mot si galvaudé ? Que signifie-t-il en réalité ?
Comme nous allons le voir, c'est un mot dont la popularité prend sa source
dans celle de la programmation, donc avec l'avènement des
ordinateur
, tablette
, smartphone
ou calculatrice
.
Mais alors quel rapport avec les Mathématiques et son enseignement du CP à la Terminale ?
L'objectif de cet article est donc triple : préciser la notion d'algorithme, somme toute élémentaire,
expliquer le lien entre l'
Les explications fournies étaieront alors une conclusion sous forme d'une critique des programmes de Mathématiques de Seconde qui incluent l'algorithmique dans leur propos, c'est à dire celui de 2009 originellement, son aménagement de 2017 et le texte officiel paru en janvier 2019 et appliqué à partir de la rentrée de septembre 2019.
Comme on peut le découvrir aisément
dans le TLFi, le mot
algorisme
désignait au XVIe siècle le procédé de calcul arithmétique avec les chiffres arabes.
Ensuite le mot algorithme
a été utilisé juqu'au XVIIIe siècle dans le sens de procédé arithmétique
,
ou encore pour désigner la pratique de l'algèbre,
comme on le constate dans l'Encyclopédie de Diderot :
ALGORITHME, s. m. terme arabe, employé par quelques Auteurs, & singulierement par les Espagnols, pour signifier la pratique de l’Algebre. Voyez Algebre.
Il se prend aussi quelquefois pour l’Arithmétique par chiffres. Voyez Arithmetique.
L’algorithme, selon la force du mot, signifie proprement l’Art de supputer avec justesse & facilité ; il comprend les six regles de l’Aritmétique vulgaire. C’est ce qu’on appelle autrement Logistique nombrante ou numérale. V. Arithmetique, Regle, &c.
Ainsi l’on dit l’algorithme des entiers, l’algorithme des fractions, l’algorithme des nombres sourds.
En fait, la construction de ce mot part d'un premier ouvrage écrit contenant la notion d'algèbre (الجبر : al-jabr en arabe), rédigé au IXe siècle par l'astronome et mathématicien al-Khwarizmi : il y explicitait des procédés de résolution d'équations.
Le nom de ce dernier a ainsi permis aux européens de forger le mot algorithme
,
disons dès le XIIIe siècle,
avec un sens resté très longtemps lié au calcul arithmétique d'une part, et aux méthodes
algébriques de résolution des équations simples d'autre part.
Si l'algorithmique reste de nos jours intimement liée aux nombres et à la résolution exacte ou approchée de problèmes mathématiques, il n'en va pas de même pour la programmation, comme nous le verrons plus loin.
Les procédés de calcul arithmétique à la main, qu'on baptise encore de nos jours
algorithmes
, ont permis à l'ensemble de l'humanité de savoir calculer,
surtout à partir de l'ouvrage de Simon Stevin écrit en 1585 : La Disme était une apologie du
Comme quoi l'algorithme est historiquement un bienfait, pas un fléau.
Si le mot algorithme
est resté confiné pendant des siècles dans les applications
des Mathématiques élémentaires (arithmétique et algèbre), il s'est paré d'une autre acception
avec l'arrivée des calculateurs électroniques au milieu du XXe siècle.
Si son sens moderne a été donné au milieu du XIXe siècle, bien avant l'apparition
des calculateurs programmables, il est de nos jours appliqué la plupart du temps
à rebours de l'Histoire. Ce qui est clairement
expliqué dans l'ouvrage Histoire d'Algorithmes
(p. 4 dans l'édition de 1993) :
Bien avant l'apparition d'un terme servant à les désigner, les algorithmes existaient déjà, profondément enracinés dans le désir de transmettre des moyens efficaces pour obtenir certains résultats en partant de certains ingrédients et en les transformant selon des directives simples, appliquées systématiquement, étape par étape.
Ainsi on peut parler de recettes, de règles, de techniques, de procédés, de procédures, de méthodes, un même mot pouvant s'appliquer à des domaines variés.
Ainsi, dans une première approche des algorithmes au sens qui nous intéresse ici,
on peut dire qu'un algorithme est
Voici un exemple de processus qu'on peut baptiser algorithme
,
instructions
destinées
à un être humain équipé d'une ressource, un couteau, et manipulant du pain et du beurre,
des
Cet exemple hors contexte informatique
C'est avec un exemple similaire que le Professeur Jean-Pierre Zanotti, de l'université de Toulon, introduit la notion d'algorithme dans le chapitre I de son cours d'Algorithmique.
En Informatique, plus précisément en programmation,
notre première définition du mot reste convenable, en précisant toutefois les choses, car
il ne s'agit plus de faire manipuler des objets réels à un humain, mais des
Ainsi un algorithme, au sens informatique du terme, peut être défini simplement
en s'inspirant fortement de la page 2 de l'ouvrage Petite introduction à l'algorithmique
de Pierre Damphousse (Ellipses 2005) :
Un algorithme est une suite
C'est à dire qu'étant donné une entrée particulière,
il produit la même sortie à chaque fois qu'on l'exécute,
la machine passant toujours par la même suite d'états pour le jeu de données considéré.
En programmation un programme est non déterministe dès qu'il exploite une fonction
retournant un nombre aléatoire,
comme on peut le constater sur le programme en Javascript suivant composé de deux instructions
(
Avant d'imaginer élaborer des algorithmes en Informatique,
c'est leur essence même qu'il est fondamental de comprendre.
En effet, d'une part ceux-ci exploitent un
En pratique, un algorithme est concrétisé par un
La difficulté de mise au point d'un algorithme dépend donc du jeu d'instructions adopté,
donc
Même l'algorithme d'une recette de cuisine dépend du matériel disponible, donc de la machine
sur lequel on l'exécute. Ainsi lorsqu'on dispose
d'un Thermomix,
bien des potages, sauces et gâteaux deviennent très simples à réaliser.
Ainsi avec ce matériel, spécifierdans la recette de la pâte à crêpes, on trouve la séquence d’instructions :
mettre la farine dans le bol ; faire un puits ; mettre les œufs dans le puits
, n'est pas adapté.
Comme on le voit souvent écrit pour illustrer l'introduction
d'un cours d'algorithmique. On peut remarquer que cet outil de cuisine est aussi
une machine, capable d'exécuter une tâche donnée, programmée à l'aide de touches sur sa façade.
Un chef cuisinier saura évidemment tirer parti de tout contexte pour concevoir un algorithme
adapté et efficace, que ce soit avec ou sans Thermomix, différent dans chaque cas.
Mais n'est pas chef
qui veut…
Il est bien connu que, même dans la vie de tous les jours, un même problème est résolu de manière
variée selon les ressources disponibles. D'où l'expression courante,
conçue au sein des navires à voile : avec les moyens du bord
.
Il n'y a donc aucune peur à avoir d'un algorithme : il est inoffensif puisque c'est seulement la description d'une suite d'instructions à exécuter dans le but de résoudre un problème précis, avec des ressources données.
En revanche les logiciels, eux, peuvent être nuisibles. Comme par exemple ceux utilisés pour le trading à haute fréquence, pouvant parfois engendrer des crises financières comme celle évoquée par Cathy O'Neil dans son ouvrage, sans même le besoin d'une intervention humaine. Mais ces logiciels ne font qu'utiliser intensivement des notions mathématiques de calcul de statistiques et de probabilités. Ce qui explique peut-être en partie pourquoi, lors de sa traduction en français déjà mentionnée, les mathématiques sont passées sous silence du titre de l'ouvrage, donnant d'emblée le mauvais rôle aux algorithmes. À tort…
On ne peut donc condamner un algorithme comme s'il était nuisible car il n'est que la traduction d'un but à atteindre. Seul ce dernier peut être nuisible, pas les moyens mis en œuvre.
Il nous faut maintenant faire le lien entre les algorithmes et les logiciels : la programmation, seul moyen de produire des logiciels dont l'action peut parfois être considérée comme nuisible.
Nous allons expliquer dans cette section ce qu'il est
Pour avoir une idée de la notion de machine théorique et de langage de bas niveau, on peut en étudier une que le Professeur Zanotti a définie convenablement, comme le jeu d'instructions qui va avec et qu'on peut expérimenter via un simulateur tout à fait pertinent.
algorithmecomme synonyme de
programme, tel Monsieur Jourdain avec la prose, sans pour autant se détacher du langage choisi.
pseudo-codealgorithmique qui s'affranchirait d'une machine théorique, sauf si on impose une syntaxe qui rappelle les langages les plus populaires, supposés déjà pratiqués par les apprenants et qu'ils sont donc censés utiliser en programmation, par exemple C, C++, PHP, Java et Javascript. Mais alors on doit définir la liste des instructions utilisables, a priori compréhensibles par toute machine sous-jacente.
La notion de
On peut déjà sentir la ressemblance énorme entre un algorithme et un programme, mais le premier est théorique, s'exécutant par la pensée sur une machine théorique elle aussi, tandis que l'autre est pratique, destiné à être exécuté sur une machine physique.
La machine physique en question est presque toujours un
Mais ce peut aussi être une
Finalement, celui qui écrit des programmes pour construire des logiciels fait de l'Algorithmique comme M. Jourdain faisait de la prose : sans effort particulier, sans même s'en rendre compte, et c'est bien pourquoi il est préférable de commencer par programmer avant de s'intéresser à l'algorithmique.
On a cru quelque temps qu'on pouvait définir un langage algorithmique universel, qui
serait facilement traduisible dans tous les langages de programmation, mais on a vite compris que c'était
illusoire. De toute façon, si un tel langage avait pu être mis au point
il aurait
Un langage algorithmique ne peut donc être que
Un enseignement de l'algorithmique n'a donc de sens bien défini
Ce qui devrait être le cas lorsque cet enseignement est dévolu aux professeurs de Mathématiques, comme dans les lycées français depuis septembre 2009.
Néanmoins, même sans machine théorique bien définie et pour un langage donné, comme Python,
le débutant a tout intérêt à comprendre ce qui se passe en
On peut alors remplacer la machine théorique au jeu d'instructions bien
défini, par une machine définie évasivement en disant simplement qu'elle
Si le cours de Zanotti, déjà cité, est intéressant par son contenu, certes, il l'encore plus encore par un constat a priori surprenant, mis en avant par l'enseignant :
Je constate d'année en année que les étudiants en informatique programment de moins en moins en
dehors du cadre scolaire. Depuis que j'ai pris conscience de cette évolution, je pose chaque année
la question rituelle Programmez vous chez vous ?
et les réponses sont de plus en plus alarmantes.
Je suis passé progressivement du oui
unanime, au non
quasi unanime (j'ai eu deux promotions dans
lesquelles
Un nombre croissant d'étudiants en informatique se fourvoient dans cette voie par rejet des autres sciences et en particulier des mathématiques, ce qui est aussi saugrenu que de vouloir devenir chef d'orchestre en étant allergique au solfège. Beaucoup sont persuadés que la facilité avec laquelle ils manipulent des objets de haute technologie et leur goût prononcé pour ces mêmes technologies leur tient lieu de savoir.
Cette diminution de l'activité de programmation a été constatée pendant la montée en puissance d'un soi disant enseignement informatique au Lycée, avec une algorithmique introduite dans toutes les filières, y compris de management et gestion (STMG). Nous reviendrons sur ce paradoxe apparent.
En revanche il est clair que l'apprentissage de l'algorithmique doit s'accompagner d'une
pratique régulière de la programmation
.
En outre, dans la préface d'un ouvrage de référence (p. XI)
on donne les deux Vous devez avoir une expérience de la programmation
et
Vous devez être familiarisé avec les démonstrations mathématiques, surtout le raisonnement
par récurrence
.
On peut donc en déduire que l'algorithmique s'appuie sur les Mathématiques et non l'inverse,
et qu'elle doit faire plus partie d'un cursus universitaire que d'un cycle secondaire, puisque
la notion de récurrence n'est abordée qu'en Terminale à vocation scientifique
C'est à dire la Terminale S jusqu'en juin 2020 et ensuite toute terminale dans laquelle on aura regroupé des élèves de spécialité Mathématiques.
Donc l'algorithmique doit être vue au lycée, encore plus au collège, comme un implicite conceptuel, mis en œuvre uniquement dans une certaine pratique de la programmation.
C'est bien pourquoi il est tout à fait légitime de s'interroger sur le bien-fondé d'un enseignement
de l'algorithmique au secondaire censé débuter par le biais
d'un usage de l'environnement Scratch, conçu en 2003 par le Media Lab du MIT,
puis continuer au lycée avec l'usage du langage Python, un langage professionnel,
conjointement à un pseudo-langagenaturel
.
On dit aussi pseudo-code
, parfois en association au mot étrange
d'algorigramme
, évoquant immédiatement à tout informaticien expérimenté des méthodes de développement
obsolètes.
Le programme officiel est donc a priori ambitieux et vertueux, mais
Et ce n'est pas avec l'enseignement des SNT (sciences numériques et technologie
),
La SIF (Société Informatique de France) avait pourtant bien signalé ce côté volatil du programme prévu, dès novembre 2018…
Finalement, cet enseignement français de l'algorithmique et de la programmation en Secondaire n'est-il pas, lui aussi, un simple fantasme ?
Alors que l'algorithmique
comme enseignement relève finalement plutôt des classes post-Baccalauréat,
comment peut-on imaginer, sans prévoir au moins les moyens horaires et matériels à cet effet,
mettre les élèves en situation de algorithme
(compris ici au sens de programme
en Python) conçu par eux et non simple copié-collé de celui du professeur,
simplement modifié à la marge ?
En fait il s'agit d'un fantasme, peut-être promu par une vélléité politique de tenter de réagir à la suprématie américaine incontestable en matière de logiciels, sans doute dû à une naïveté dans la connaissance de la capacité d'assimilation des élèves, mais certainement impardonnable lorsque qu'il perdure. C'est plutôt un tour d'illusionniste dont les citoyens sont les spectateurs sidérés.
Voyons dans les détails, là où le diable se tapit.
Dejà dans le programme de Mathématiques du lycée de 2009
(B.O n° 30 du 23 juillet 2009), à la rubrique Algorithmique (objectifs pour le lycée)
il était spécifié ce qui suit :
La démarche algorithmique est, depuis les origines, une composante essentielle de l’activité mathématique. Au collège, les élèves ont rencontré des algorithmes (algorithmes opératoires, algorithme des différences, algorithme d’Euclide, algorithmes de construction en géométrie). Ce qui est proposé dans le programme est une formalisation en langage naturel propre à donner lieu à traduction sur une calculatrice ou à l’aide d’un logiciel. Il s’agit de familiariser les élèves avec les grands principes d’organisation d’un algorithme : gestion des entrées-sorties, affectation d’une valeur et mise en forme d’un calcul.
Dans le cadre de cette activité algorithmique, les élèves sont entraînés :
Aucun langage, aucun logiciel n’est imposé.
L’algorithmique a une place naturelle dans tous les champs des mathématiques et les problèmes posés doivent être en relation avec les autres parties du programme (fonctions, géométrie, statistiques et probabilité, logique) mais aussi avec les autres disciplines ou la vie courante.
À la lumière des sections précédentes on comprend aisément qu'il est tout à fait abusif de dire que
la démarche algorithmique est, depuis les origines,
une composante essentielle de l’activité mathématique
et aussi que l’algorithmique a une place naturelle dans tous les champs des mathématiques
,
puisqu'on confond plusieurs acceptions d'un même terme, avec un rebours historique tout à fait
discutable.
C'est donc plus un effet d'annonce promotionnelle qu'une définition de programme scolaire.
Parler de formalisation en langage naturel
n'a aucun sens : pour formaliser on utilise
un… langage formel
La formalisation d'un langage constitue à en définir le vocabulaire et la grammaire formelle,
permettant une
Parler de gestion des entrées-sorties
laisse rêveur : tout dépend d'une part de
l'environnement informatique physique,
et d'autre part des ressources logicielles de gestion des IHM (Interfaces Homme-Machine) !
C'est donc, une fois de plus, de la langue de bois.
Donc n'imposer aucun langage était, dans cette perpective, une grave erreur. D'autre part
c'était un obstacle fondamental pour assurer la continuité des enseignements :
un professionnel ne passe pas si facilement d'un langage à l'autre
C'est l'ingénieur qui parle, ayant une expérience de plusieurs dizaines de milliers de lignes de programmation, écrites en une douzaine de langages (Fortran, Pascal, C, BASICs, PHP, Python, SmallTalk, TI-BASIC (avec calcul formel), Javascript et assembleurs).
La notion de langage symbolique
est une chimère en Informatique : on y parle de langages
Enfin, ce programme de 2009, malgré une ambition folle dans les généralités, réduisait nettement la voilure dans les détails :
À l’occasion de l’écriture d’algorithmes et de petits programmes, il convient de donner aux élèves de bonnes habitudes de rigueur et de les entraîner aux pratiques systématiques de vérification et de contrôle.
Les élèves, dans le cadre d’une résolution de problèmes, doivent être capables :
Les élèves, dans le cadre d’une résolution de problèmes, doivent être capables :
Bref, ce programme de 2009 concernant l'algorithmique était d'avance voué à l'échec,
par manque de connaissance et de pratique du sujet de la part de ses concepteurs,
d'autant plus, rappelons-le avec force, qu'
On a corrigé un peu le tir dans un amendement de 2017, mais si peu.
En mai 2017, dans la circulaire n° 2017-082, apparaît un amendement au programme de 2009,
donnant a priori plus d'importance à l'algorithmique, en l'accompagnement du mot qui aurait dû
être incontournable dès la première version : programmation
.
On a donc perdu huit ans, uniquement par faute de se fier aux professionnels du développement, à ceux de l'enseignement des langages de programmation et de l'algorithmique, ou ne tenant pas compte de leurs avertissements.
Mais passons, par irénisme.
Algorithmique et programmation constituent désormais,
Le programme est divisé en quatre parties :
Cet amendemant annonce de plus : Le travail sur l’algorithmique et la programmation doit être réinvesti
dans les trois autres parties
.
Quelle prégnance dans cet enseignement, alors que d'une part
Mais, une fois encore, le diable est tapi dans les détails. En effet, on découvre ensuite
précisément cette quatrième partie (Algorithmique et programmation
) :
La démarche algorithmique est, depuis les origines, une composante essentielle de l’activité mathématique. Au cycle 4, en mathématiques et en technologie, les élèves ont appris à écrire, mettre au point et exécuter un programme simple. Ce qui est proposé dans ce programme est une consolidation des acquis du cycle 4 autour de deux idées essentielles :
Dans le cadre de cette activité, les élèves sont entraînés :
Un langage de programmation simple d’usage est nécessaire pour l’écriture des programmes. Le choix du langage se fera parmi les langages interprétés, concis, largement répandus, et pouvant fonctionner dans une diversité d’environnements.
Outre l'effet d'annonce déjà souligné, on mélange toujours algorithmique et programmation,
tout comme on parle de la description d'un algorithme en langage naturel
, ce qui,
nous l'avons expliqué, a peu de sens. Apparemment on ne se rend toujours pas compte que programmer
c'est
De plus, parler de langage de programmation textuel
ne veut rien dire en Informatique,
d'autant qu'on ne voit pas comment un langage pourrait ne pas être textuel,
à moins de ne communiquer qu'à l'oral.
On subodore simplement la volonté de bannir l'usage d'environnements de programmation comme
Scratch, pourtant recommandé au collège
Dans la version de novembre 2018 du programme du cycle 4, on est d'ailleurs passé de Scratch,
clairement exprimé initialement, à (p. 142) : Ils peuvent être initiés à programmer avec un langage de programmation couplé
à une interface graphique pour en faciliter la lecture.
La conception, la lecture, et la modification de la programmation sont réalisées au travers
de logiciels d’application utilisant la représentation graphique simplifiée des éléments constitutifs de
la programmation.
.
Ce qui autorise aussi Snap!
(Berkeley University)
et Blockly (Google), concurrents de Scratch (MIT),
ajoutant ainsi à la confusion, d'autant plus que le MIT collabore avec Google…
Autre invention terminologique : on parle de langage concis
, ce qui n'a aucun sens précis en
Informatique. On pourrait seulement imaginer qu'on veut parler ici de la taille de la grammaire formelle
décrivant le langage, mais alors on voit mal quel professeur de Mathématiques peut comprendre la phrase qui
contient l'expression ! Les seuls langages historiquement conçus pour avoir une concision souhaitée
dans leur grammaire formelle sont Lisp (List processing, un langage fonctionnel de traitement
de listes) et SmallTalk (Petit Discours
en français !)
conçu en 1971, et toujours utilisé de nos jours.
Sauf à se référer au principe de Huffman, visant le langage Perl, qui s'appuie sur des affirmations tout à fait discutables puisque trop de concision peut aussi nuire à la lisibilité, limitant ainsi son intérêt pratique dans la productivité du développement logiciel. Le lecteur curieux pourra donc s'intéresser au langage Perl ; voire au langage APL le champion de la concision, mais aussi celui de l'hermétisme…
Cette confusion entre algorithme et programme d'une part, et entre les notions similaires en Informatique et Mathématique d'autre part, est prégnante dans l'extrait suivant :
À l’occasion de l’écriture d’algorithmes et de petits programmes, il convient de transmettre aux élèves l’exigence d’exactitude et de rigueur, et de les entraîner aux pratiques systématiques de vérification et de contrôle. En programmant, les élèves revisitent les notions de variables et de fonctions sous une forme différente.La notion d'écriture d'algorithmes en langage naturel
, si elle avait un sens,
interdirait en effet l'exigence d'exactitude et de rigueur
,
car il n'y aaurait aucun moyen se savoir si ce qu'on fait est correct ou non…
Sauf en programmant afin de tester les algorithmes conçus, donc avec un langage bien défini !
Donc les affirmations de ce programme scolaire amendé
n'ont toujours pas vraiment de sens.
Quant au fait de revisiter les notions de variables et de fonctions sous une forme différente
,
on sent qu'on a oublié un élément essentiel : le temps !
Si les mots sont les mêmes (
En effet, en Mathématiques une variable peut prendre des valeurs, selon des hypothèses formulées
par des si x ≥ –3 alors ···
ou
supposons x = 12 alors ···
) permettant d'arriver à des
conclusions différentes, alors qu'en programmation une variables prend des valeurs
si x ≥ –3 alors ···
considère la valeur de la variable
Donc il ne s'agit pas seulement de revisiter
des notions, encore en
phase d'acquisition en Seconde, mais de complètement les reprendre.
C'est une difficulté importante pour les débutants en programmation et
seul un travail sur machine (ordinateur ou tablette) avec des essais et erreurs permet d'assimiler
petit à petit ces notions.
Sans y passer un temps conséquent, on reste dans le domaine du fantasme.
Notons enfin à ce propos que la pratique systématique de vérification et de contrôle
n'est pas
une mince affaire et ne s'acquiert que via une pratique importante, qui a peu de chance de se produire
puisqu'il n'y a, rappelons-le,
Sauf si un lycée décide d'allouer une heure spécifique à l'algorithmique,
en dédoublant les classes afin que chaque élève puisse effectivement travailler une heure par semaine
sur un ordinateur, ce qui de toute façon est trop peu.
Comme il n'y a quasiment jamais aucune salle informatique permettant d'accueillir
plus de 18 élèves,
L'opportunité d'un réel amendement était posée après la publication en février 2018 du rapport Villani-Torossian puisque ce dernier pose un diagnostic clairvoyant sur l'état calamiteux de l'enseignement des Mathématiques…
Ce rapport mettant en évidence la discipline Informatique comme accompagnatrice de celle des Mathématiques, on pouvait croire à la mise en place d'un enseignement de la programmation hors contexte Mathématique, en faisant émerger une discipline à part :
Le besoin d’un enseignement disciplinaire informatique est clairement établi, et c’est donc l’occasion de créer une articulation didactique entre informatique et mathématiques.
Les mathématiques sont largement présentes dans l’enseignement de la discipline informatique : il s’agit, entre autres, d’acquérir les fondements conceptuels nécessaires pour pouvoir évoluer tout au long d’une carrière professionnelle mobilisant l’informatique. L’apprentissage de l’algorithmique débute bien souvent par des activités débranchées propices au raisonnement pur. La discipline informatique permet, de plus, de développer une démarche complète de modélisation : on part d’un problème, on le modélise, on propose un algorithme, on le programme, on l’exécute et on analyse les résultats ; on part du concret, on passe par l’abstraction et on retourne au concret.
La mission recommande de développer une offre spécialisée, efficace, structurée, d’un enseignement d’informatique qui commence très tôt et va en se spécialisant de plus en plus, avec ses enseignants, ses programmes, le tout en coordination avec les cours de sciences et tout particulièrement le cours de mathématiques. Le périmètre précis de cette nouvelle offre doit faire l’objet d’études approfondies.
À noter qu’une difficulté supplémentaire est l’absence de partenaires institutionnels identifiés au sein de l’éducation nationale pour la mise en place équilibrée de cette synergie entre mathématiques et informatique, et la difficulté de construire un véritable curriculum de la maternelle à l’enseignement supérieur.
Au second point on parle d'une démarche complète de modélisation
ce qui relève, une fois de plus,
d'une ambition démesurée par rapport aux horaires alloués (quasi nuls) et au niveau requis, puisqu'il
s'agit essentiellement des cours supérieurs
C'est un spécialiste du domaine qui le dit, ayant enseigné la Modélisation en école d'ingénieurs pendant de nombreuses années. La modélisation, pour concevoir des bases de données ou des logiciels de qualité, n'est certainement pas accessible au lycée !
Le dernier point de l'extrait cité est essentiel, car en effet l'Éducation Nationale n'a même pas eu la volonté de s'appuyer sur les forces vives de ses enseignants déjà expérimentés en Informatique et dans son enseignement. Ce qui lui aurait pourtant permis de facilement définir des programmes qui tiennent la route. Elle s'est contentée de prendre conseil auprès de sociétés comme la SMF, la SMAI ou la SIF ou encore d'universitaires, sans pour autant tenir compte de leurs conseils avisés, comme tout enseignant de Mathématiques peut le constater ici.
Le rapport Villani-Torossian a-t-il été suivi d'un effet tangible au sujet de l'Algorithmique et la Programmation dans les nouveaux programmes ? On peut déjà en douter…
Le programme de 2de mis en œuvre à la rentrée 2019, et mis
en ligne le 22 janvier 2019,
reprend malheureusement in extenso l'amendement de 2017,
en apportant seulement quelques précisions (p. 15), comme le langage de programmation concis
,
cette fois-ci imposé (Python) :
Le choix de Python est tout à fait discutable
On peut facilement constater qu'il n'est pas le seul langage populaire de haut niveau, et que le langage Javascript répond aussi aux qualificatifs énoncés :
langage interprété, concis, largement répandu et pouvant fonctionner dans une diversité d’environnements
avec un net avantage : il est utilisé dans quasiment toute page du Web, au contraire de Python !
En outre, et c'est sans doute la vraie et seule raison du choix de Python,
ce langage avait déjà été sélectionné pour les CPGE en 2013. Noblesse oblige…
On peut se contenter de quelques commentaires pour montrer que le nouveau programme ne cède quasiment en rien à l'ancien, celui de 2009 amendé en 2017.
Le nombre de parties du programme de Mathématiques passe de 4 à 5 avec la mise en évidence (p. 5)
de celle intitulée Nombres et calculs
:
Nombres et calculs,
Géométrie,
Fonctions,
Statistiques et probabilitéset
Algorithmique et programmation.
Mais il n'y a
Le nouveau programme de 2de définit donc cinq parties pour le prix de quatre en quelque sorte, puisque le nombre d'heures allouées n'a pas changé et que les contenus sont quasiment les mêmes.
On remarque à nouveau cette idée de passer du langage naturel à Python et inversement
,
qui n'a aucun sens, surtout avec un langage modulaire comme Python, puisque le simple usage du nombre
π ou d'une fonction racine carrée (sqrt) nécessite l'import d'un module
Avec de plus une
On postule que l'affectation sera notée ← en langage naturel
,
comme si une telle notation faisait partie d'un langage naturel
. Pourquoi alors
ne pas tout simplement utiliser le symbole = d'égalité, comme dans la plupart
des langages de programmation ? L'imposition de cette flèche
On postule enfin qu'il y a deux types de boucle : boucle bornée (for), boucle non bornée (while)
,
comme si le cas de Python était généralisable à tous les langages usuels de programmation.
En particulier la boucle for du Python n'est
qu'un artifice de parcours d'une structure itérable,
et donc n'a rien à voir avec celle du C, de Java, de Javascript ou de PHP, langages partageant
une syntaxe commune, qui permet en fait de se passer de la boucle while
Par exemple, en plus une vingtaine d'année de programmation en Javascript et PHP,
et développement de plus de 400 modules,
l'auteur de cet article a rarement utilisé une boucle while, essentiellement des boucles
for.
Ne parlons même pas de SmallTalk,
Le langage Python n'a donc vraiment rien de fracassant conceptuellement qui entraînerait son choix pour un enseignement massif à des débutants, c'est à dire à tous les élèves de Seconde et à tous ceux des classes de 1ère technologique (sauf STD2A).
En fait ce n'a pas vraiment d'importance puisque qu'au Baccalauréat on fait seulement semblant d'évaluer l'algorithmique et la programmation…
L'algorithmique au lycée est donc un pur fantasme depuis 2009, faute de temps alloué et d'une vision claire de la problématique de l'enseignement de l'algorithmique couplée à la programmation.
L'évaluation au Baccalauréat, toutes filières confondues, se réduit alors à vérifier que les candidats savent lire les quelques algorithmes ultra-élémentaires qu'on leur aura répétés au cours des années de lycées, surtout en 1ère et Terminale.
On peut le constater dans le recueil de tous les algorithmes donnés dans les sujets du Bac S en 2018.
On
Soyons clairs : aucun bachelier depuis 2009,
L'Éducation Nationale serait-elle devenue, au moins sur ce plan, une machine… à illusions ?
Mettre en place un enseignement à vocation algorithmique au lycée, sans se bercer d'illusions
donc
machinesous-jacente, mais sans formalisation : donc une notion de
les mains dans la cambouis, en fait, car il faut savoir aussi démonter des existants, pas toujours propres) ;
Ce langage a le net avantage sur tous les autres langages de pouvoir être utilisé dans les pages
du Web, sachant que tout élève de 2de étudie le langage HTML dans l'enseignement SNT
(thème le Web).
Le programme officiel de la SNT a curieusement évacué ce langage de programmation pourtant fondamental
pour le Web, tout le mentionnant comme code exécutable
pour le dialogue client-serveur…
Ce langage, dans l'environnement de programmation Squeak, a le net avantage de permettre de modifier par programme tout
Sinon on restera dans le domaine du fantasme et les bacheliers seront toujours aussi incompétents à l'entrée
dans le supérieur en algorithmique-programmation, ce qui est plutôt fâcheux
pour un enseignement de plus en plus découpé en compétences
dont le niveau n'est jamais défini.
Reprenons l'exemple de l'algorithme naïf
que nous avons vu pour introduire la notion d'algorithme :
Il n'est pas si simpliste qu'il y paraît car il permet d'introduire le vocabulaire classique en programmation :
machinequi doit
Pas assez de beurre pour couvrir une grande tartine, ou une tartine trop grande pour la quantité de beurre disponible.
On note que la notion de machine
est essentielle pour l'algorithme puisse tout
simplement
Il est cependant difficile de trouver sur Internet des cours universitaires mettant bien en évidence
cette contrainte.
Celui de J-P. Zanotti de l'université de Toulon, fait partie de ceux-là.
Son cours d'Algorithmique définit clairement une telle machine
théorique, qu'il appelle machine RAM
, et il en a même fait
un simulateur qui prend en compte
Il peut donc exécuter concrètement les programmes donnés à la page dédiée à cette machine théorique. Mais alors la programmation se fait en un langage proche de la machine, qui ressemble à un langage d'assemblage, déjà évoqué dans la note 4. Dans ce cas le langage théorique se confond avec un langage pratique : on peut réellement exécuter les algorithmes.
Mettre en avant les langage algorithmique
,
comme avec les nouveaux programmes de Mathématiques de 2019, n'a pas plus de sens que dans les programmes
précédents.
En effet, tout algorithme (déterministe) peut s'écrire (mathématiquement ou informatiquement dans la plupart des langages usuels) sous la forme S = f(E) où E est un objet représentant le jeu des données d'entrée, S celui des données de sortie et f une fonction qui fait le travail demandé.
Donc celui qui doit résoudre un problème et sait que f fait le travail, se contentera d'écrire une seule instruction : S = f(E). C'est l'exemple du calcul de la racine carrée déjà donné pour le cas de Python avec la nécessité d'importer un module, Math, qui permet d'utiliser la fonction ad hoc, c'est à dire sqrt (en anglais, square root désigne la racine carrée).
En revanche, celui qui ne connaît pas ladite fonction risque d'aborder en fait un problème très complexe, qui a pu demander des années de recherche avant d'aboutir à un algorithme (numérique ou non) convenable.
C'est pourquoi,
À titre d'illustration, prenons celui
de Métropole en septembre 2018 au Bac S,
où le candidat se contente de boucher quelques trous dans un algorithme
déjà écrit, pourtant vu et revu maintes fois sur deux ans,
et que les élèves apprennent de plus à mettre en œuvre sur leur calculatrice
On peut donc savoir comment faire sans rien comprendre à ce qu'on fait. Le constat de Zanotti déjà évoqué, sur l'absence d'une pratique personnelle de la programmation chez ses étudiants, est donc tout à fait compréhensible : ils en sont tout simplement incapables !
En Javascript (dit aussi JS), le langage des pages du Web, la solution est élémentaire :
En langage Algo, un langage pédagogique mis au point et exploité par l'auteur de cet article, la solution est aussi élémentaire :
Pour en savoir plus sur le sujet, on doit se pencher sur la notion de langage algorithmique
,
leitmotiv qui sous-tend cet enseignement en France, étonnant à plus d'un titre.
Nous avons déjà appris qu'un langage algorithmique nécessitait de définir une machine théorique auparavant, ce qui semble assez logique, puisque la programmation est destinée à créer des logiciels s'exécutant sur les machines réelles.
Précisons alors que pour exploiter une une machine théorique comme
la machine RAM de Zanotti, le langage le plus adapté est forcément rudimentaire :
c'est en fait un langage d'assemblage,
ou assembleur, un langage de bas niveau
aux instructions
Cet aspect primitif est tout à fait en accord avec un langage algorithmque :
ses instructions doivent être rudimentaires, sinon, par le jeu des
Le corollaire est qu'en limitant le lot des instructions possibles, on accroît la difficulté de mise au point d'un algorithme pour résoudre un problème donné. Nous allons illustrer un tel accroissement sur un exemple.
En effet, supposons un script en Javascript qui calcule la racine carrée d'un nombre positif n, c'est à dire le nombre positif r dont le carré est n (c'est à dire qu'on doit avoir : r × r = n) :
L'algorithme est élémentaire square root
en anglais) d'un nombre positif ou nul.
Il faut bien comprendre le plus important dans la problématique d'un enseignement d'algorithmique :
Ainsi forcer des apprenants à utiliser un pseudo-langage algorithmque c'est a priori leur interdire
d'utiliser les fonctions puissantes des langages usuels.
C'est bien pourquoi l'algorithmique ne peut s'étudier qu'
En ce qui concerne la racine carrée d'un nombre (ici x = 17,
Ainsi on peut calculer une racine carrée uniquement avec des opérations élémentaires, mais si on ne connaît pas au préalable la méthode de Héron, on ne voit pas comment un élève peut s'en sortir seul pour mettre au point l'algorithme de calcul sous-entendu. Voici un programme simple qui le met en œuvre :
Bien entendu il resterait à démontrer qu'avec cet algorithme, l'erreur relative commise sur la racine carrée est très proche de 0.5*(1 - x/r2), ce qui relève uniquement des Mathématiques.
Sur cet exemple on se rend compte combien l'algorithmique n'est en fait qu'un approfondissement pour la compréhension détaillée d'une programmation usuelle. Concevoir des algorithmes avec un minimum d'instructions disponibles complique d'emblée la tâche à accomplir, et fait alors appel à des Mathématiques plus élaborées qu'avec un langage évolué.
En fait un simple commentaire (p. XIII) dans une bible sur le sujet
(Algorithmique
, de Cormen-Leiserson-Rivest-Stein ; 1188 pages dans la 3e édition de 2010),
référence internationale depuis près de 25 ans,
exprime l'inutilité d'imaginer un langage algorithmique
hors sol,
en préférant l'ancrer dans une pratique de la programmation,
donc avec une syntaxe proche de celle des langages usuels :
Les auteurs auraient pu ajouter le langage Javascript à cette liste, car il est utilisé dans toutes les pages du Web. Quand même !