1 – Apprentissage de la programmation informatique et mathématiques ?
Les publications sur l’apprentissage des mathématiques chez les enfants et les adolescents sont nombreuses et variées. Elles concernent les mathématiques fondamentales comme l’apprentissage de la numération : compter, dénombrer, calculer… D’autres concernent des sujets plus avancés des mathématiques généralement abordés au secondaire : par exemple sur l’enseignement et l’apprentissage des fonctions numériques ou sur l’apprentissage de la dérivée. D’autres auteurs ont quant à eux étudié les interactions sociales entre élèves et enseignants ou entre élèves lors de l’apprentissage des mathématiques. Ils ont montré que les interactions sociocognitives (apprentissage par les pairs, condisciple tutoré …) avaient un impact positif sur les apprentissages des élèves, essentiellement d’un point de vue cognitif, mais aussi méta cognitif, motivationnel, voire émotionnel.
Mais malgré ces travaux et le développement en classes de nouvelles méthodes pédagogiques comme celle de l’apprentissage par le jeu ou l’évaluation entre pairs, l’apprentissage des mathématiques conserve une mauvaise réputation. Nombreuses sont les représentations négatives qui empêchent ou altèrent son apprentissage.
Des auteurs ont montré récemment l’intérêt de travailler sur l’anxiété et sur la perception négative ainsi que sur le manque de motivation face aux mathématiques. Ils ont notamment mis en place des méthodologies d’apprentissage afin de diminuer cette anxiété et améliorer les performances des apprenants. Cette méthode est basée sur l’apprentissage coopératif couplé à un apprentissage compétitif intergroupe.
Peut-on cependant enseigner la programmation et l’algorithmique comme on enseigne les mathématiques ?
La programmation informatique : une branche des mathématiques
Les domaines de la programmation informatique et des mathématiques sont intimement liés. Pour certains auteurs, la première est une sous-partie de la seconde. Pour d’autres, tout dépend de la manière dont on aborde la programmation. Soit sous un angle algorithmique ou sous un angle technique.
Depuis 2009 l’algorithmique a été introduite dans les programmes de mathématiques en France. En 2016, Haspekian et Nijimbéré ont montré que la polysémie dans le terme « algorithmie » provoque une ambiguïté dans l’approche des enseignants envers cette discipline la traitant tantôt avec une approche mathématique et tantôt avec une approche technologique.
Cet article montre clairement que les programmes de classe de seconde (2009) en mathématiques sont orientés sur les aspects technologiques. Y sont d’emblée évoqués l’application de l’algorithme sous forme de programme informatique. La mise en application sous forme de code est immédiate et laisse moins de place à la réflexion en pure logique mathématique. Des indications comme « aucun langage, aucun logiciel n’est imposé » ne laisse planer aucune ambiguïté et oriente même les enseignants à traiter le sujet de l’algorithmique sous sa forme technologique.
La proximité de ces deux disciplines crée des croyances d’interdépendances dans leurs apprentissages respectifs. On entend souvent en cours de programmation informatique : “j’étais nul en maths c’est pour ça que j’y arrive pas” ou “j’étais nul en maths donc je serais nul en programmation”.
Chez les apprenants adultes en programmation informatique un lien est fait entre leur apprentissage de la programmation informatique et leur apprentissage antérieur des mathématiques.
La mathématique ou les mathématiques ?
Cependant les mathématiques sont vastes et polymorphes. Les compétences cognitives nécessaires à la compréhension de la géométrie ne sont pas celles nécessaires pour la compréhension du calcul algébrique ou du calcul des probabilités. Il y a donc là peut-être un amalgame entre les compétences nécessaires pour apprendre, comprendre et faire des mathématiques et les compétences cognitives nécessaires pour apprendre, comprendre et faire de la programmation informatique.
J’ai recensé en annexe 1 sous forme d’un diagramme les différents domaines couverts par les mathématiques. La liste ne prétend pas être exhaustive.
On y trouve quatre domaines principaux que sont :
- l’algèbre
- les probabilités et statistiques
- la géométrie
- l’algorithmique
Il faut tout d’abord noter que l’enseignement de l’algorithmique est récent. Mais ce n’est surtout qu’une partie des mathématiques qui sont abordées au collège / lycée. On ne peut pas préjuger de son niveau en programmation à travers l’intégralité de ce que l’on avait comme niveau en mathématiques au collège / lycée. Une étude spécifique pourrait montrer l’interdépendance entre ces croyances. En tous les cas au quotidien on constate régulièrement que ce “raccourci” est opéré.
2 – Du raisonnement au calcul littéral
Le formalisme mathématique que nous connaissons et utilisons aujourd’hui n’a pas toujours été celui utilisé par les mathématiciens.
Archimede (-287 av.JC, -212 av.JC) dans ses traités de l’équilibre des figures planes, de la quadrature de la parabole et des autres traités qui nous sont parvenus utilise le langage naturel pour démontrer et argumenter. Aucun calcul tel que nous le connaissons aujourd’hui n’y figure. Un court exemple ci-dessous du Traité des équilibres d’Archimede montre qu’aucune démonstration n’utilise de symboles. Tout est en langage naturel.
“Supposons que tout liquide soit de telle nature que, si l’on considère les parties de même niveau et continues, la moins poussée cède à celle qui l’est plus. Disons encore que chacune des parties est poussée par le liquide qui est au-dessus d’elle suivant la verticale [et cela, lorsque le liquide descend dans quelque chose et supporte quelque autre chose].”
Al Kharizmi (780 – 850) que l’on considère comme le “père” de l’algorithmique utilise les mêmes procédés de démonstration par le langage naturel. Ce n’est qu’au XVIème siècle que François Viète (1540 – 1603) introduit le formalisme de calcul littéral que l’on utilise de nos jours (à quelques évolutions près). Il fondera les bases de l’algèbre que l’on connaît aujourd’hui.
Les mathématiques sont un code. Elles décrivent la nature à partir de symboles tout comme la programmation décrit par des symboles les tâches à effectuer par un ordinateur. Le calcul littéral ou le code informatique et leurs formalismes sont au service du raisonnement. Ils permettent une meilleure compréhension du raisonnement et permettent d’aller plus loin dans l’abstraction.
Je pourrais donner de multiples exemples. Je n’en ai retenu que trois dans le domaine des mathématiques, de l’informatique et de la musique.
Premier exemple en mathématiques : Un sujet jeune ou adulte peut tout à fait comprendre le concept de fraction avec des diagrammes en section (camembert, parts de tarte … ). Il comprendra grâce à la représentation schématique que la fraction est une partie de quelque chose. Mais il pourra avoir plus de mal une fois que l’on rentrera dans le formalisme du calcul (ajouter, soustraire, multiplier, diviser des fractions entre elles.).
Exemple de calcul fractionnaire simple
Prenons un deuxième exemple dans le domaine de la musique. Certains musiciens instrumentistes peuvent apprendre parfaitement à jouer d’un instrument en utilisant uniquement leur mémoire. Ils comprennent tous les concepts qui sont nécessaires à l’interprétation du morceau : émotion, rythme, temps de pause, vitesse d’exécution des notes, enchaînement des notes, perçoivent les écarts entre les notes … mais ils peuvent avoir beaucoup de difficulté à comprendre le solfège c’est-à-dire la syntaxe avec laquelle on représente tous ces concepts. Le solfège est un code.
Exemple de codage des notes
Troisième exemple dans le domaine de la programmation informatique. Les boucles sont des structures de codes bien connues et qui s’expliquent aisément en justifiant l’utilisation d’une machine pour effectuer un grand nombre d’itérations. On les comprend aussi facilement à l’aide d’un organigramme.
Algorithme en organigramme représentant une boucle simple
Cependant il existe plusieurs types de boucles aux syntaxes différentes. On observe que le passage de la mise en pratique du concept à la mise en écriture est similaire à celui du premier exemple évoqué sur les fractions. Les apprenants sont plus déroutés par le formalisme (la syntaxe) que par le concept en lui-même.
Programme en Python contenant une boucle
Se pose alors la question du rapport de l’apprentissage de la programmation informatique avec le formalisme et la syntaxe du langage informatique. Les concepts peuvent être compris mais la mise en pratique peut être déroutante ou bloquante ! Ce n’est en tous les cas pas une “capacité de compréhension” qui doit être remise en cause mais plutôt le rapport que l’on entretient avec le formalisme et la syntaxe.
3 – Hypothèses
Des études seraient à mener sur : “Comment la représentation négative ou positive de l’apprentissage passé des mathématiques peut altérer la capacité à apprendre la programmation informatique plus tard lorsque l’on est “adulte” ?”
Est-ce que cette perception négative est monolithique, c’est-à-dire est ce qu’elle concerne l’ensemble des mathématiques ou bien une distinction plus fine peut-elle être faite domaine mathématique par domaine mathématique ?
En effet une première hypothèse qui pourrait être posée est que certains apprenants qui avaient un niveau faible ou moyen en mathématiques peuvent se penser moins capables d’apprendre la programmation informatique. Un amalgame est peut être fait entre géométrie, algèbre, analyse …ces apprenants avaient peut être un bon niveau en analyse ce qui est plus utile qu’un bon niveau en géométrie.
L’idée d’une telle étude serait de montrer qu’il est préférable de se poser la question de savoir si on a été “bon” sur les suites numériques plutôt qu’en mathématique en général.
une deuxième hypothèse et question que nous pourrions poser porte sur le formalisme mathématique et informatique. Est-ce que le formalisme mathématique et la syntaxe informatique peuvent avoir une influence négative sur la compréhension de ces disciplines alors que l’apprenant contrairement à ses croyances possède tout le raisonnement et toute la logique nécessaire ?
Je pense en effet que le formalisme et la syntaxe en programmation informatique sont des facteurs limitants pour l’apprentissage chez les débutants adultes.
Certains peuvent comprendre la logique et le raisonnement mais être démunis devant le formalisme mathématique. Est ce que cela n’est du coup pas un frein aussi pour l’apprentissage de la syntaxe en programmation ? Et ce “trauma mathématique” de l’apprentissage passé du formalisme mathématique influe plus tard sur d’autres apprentissages nécessitant une syntaxe ou une codification.
Nous pensons par ailleurs qu’il est possible par l’introduction du jeu et de méthodes pédagogiques adaptées et progressives de faire prendre conscience aux apprenants que cet apprentissage est possible pour eux.
4 – Comment faire pour sortir de ces croyances ?
Premier point fondamental : il faut prendre conscience de cette croyance limitante. J’espère que cet article vous y aidera et vous permettra de débuter une réflexion sur le sujet sur votre rapport à la syntaxe, au code, aux morphèmes …
Ensuite il faut se faire confiance en débutant la programmation et j’ai envie de rajouter comme pour tout apprentissage. Surtout bien noté quand on y arrive que l’on en est capable ! Voir le positif et les changements positifs !
Enfin des séances de méditation guidées sur les croyances limitantes et sur la confiance en soi peuvent réellement apporter une amélioration.