Mon intervention dans le blogue de Monsieur Guité.

Bonjour,
Je pense que ce n'est pas au deuxième cycle du secondaire qu'il faut supprimer les maths mais bien au premier.

Lieux communs :
C'est en forgeant qu'on devient forgeron.
C'est en faisant des maths qu'on devient mathématicien

Subtilité :
Mais le programme ne demande pas de former des mathématiciens, il demande de développer des compétences à résoudre des problèmes mathématiques.

Paradoxe :
Or si c'est en forgeant que l'on développe des compétences à résoudre des problèmes de forgerons, ce n'est pas en résolvant des problèmes de mathématiciens qu'on développe la compétence à résoudre des problèmes de nature mathématique.

Je crois que c'est une erreur de supposer que par l'étude de concepts généraux, les élèves pourront transposer dans des situations particulières. Pour généraliser des concepts, il faut d'abord en avoir, c'est-à-dire qu'il faut avoir vu plusieurs cas particuliers pour en dégager un principe général utile.

Mais l'école l'exige : les élèves doivent développer des compétences en résolution de problèmes, doivent être capables de jouer avec des concepts abstraits et de communiquer dans un langage mathématique rigoureux. Là où je ne suis plus d'accord, c'est pour dire que la mathématique est l'outil qui convient pour développer ça. Dans l'enseignement des mathématiques, l'élève est pris avec des concepts beaucoup trop abstraits, loin de lui, pour être en mesure de se concentrer sur le raisonnement, la logique et la représentation d'une idée.

C'est dans cet esprit que je propose de remplacer l'enseignement des maths par l'enseignement de la programmation d'applications informatiques car elle permet de se concentrer sur des concepts beaucoup plus contextualisés.

Il ne faut pas oublier qu'on ne peut parler à une machine que dans un langage RIGOUREUX et LOGIQUE. La machine répond immédiatement lorsqu'on lui parle "tout croche" : "Erreur de syntaxe à la ligne 24", "Vous tentez d'additionner deux nombres de types différents", "la fonction XYZ n'existe pas", etc.

L'intérêt principal, pédagogiquement parlant, d'enseigner la programmation plutôt que les maths est le suivant : les concepts qui sont GÉNÉRALISÉS en mathématiques sont CONTEXTUALISÉS en programmation (comme dans la vie d'ailleurs).

Plusieurs exemples me viennent en tête pour expliquer mon point de vue. En voici un :
Prenons le cas des nombres. En programmation (dans les langages fortement typés), on ne peut additionner des entiers avec des réels. La machine nous arrête si on veut faire une telle opération. Regardez maintenant cette petite opération, que plusieurs élèves sauraient répondre facilement et immédiatement :

-10 + 8.


Je suis absolument convaincu que l'ensemble des élèves (et des adultes!) ne comprennent absolument pas le sens de cette question. En effet, un esprit rigoureux NE PEUT y répondre sans d'abord s'en poser plusieurs au préalable. Par exemple, que représente -10? Est-ce un nombre entier ? un nombre rationnel ? Un nombre réel? Même question pour 8. Et l'addition, dans quel contexte se passe-t-elle? Même si plusieurs jugeraient que je coupe les cheveux en quatre ici, c'est n'est absolument pas le cas : j'essaie juste d'être rigoureux. Lorsque je vois -10 +8, je vois des oranges et des pommes. Or, on ne peut additionner des oranges et des pommes, n'est-ce pas? Autrement dit, il faut absolument connaître le contexte dans lequel on doit opérer. À mon avis, si les enfants (et les adultes) éprouvent de la difficulté en mathématique scolaire, c'est tout simplement parce qu'ils ne voient pas les contextes, que ces derniers varient d'un problème à l'autre sans qu'on les en informe. En informatique, les contextes sont habituellement très clairs.

En programmation, on DOIT répondre à toutes les questions de contextualisation posées ci-dessus à propos de -10 + 8 AVANT de pouvoir procéder. Cela est rigueur.

En pseudo-code, cela donne :

VAR A ENTIER
VAR B REEL
A = 10
B = 8


Et si on demande A + B, le système nous sortira une belle erreur du genre : "Vous essayez d'additionner des nombres de types différents". La machine EST rigoureuse, beaucoup plus que plusieurs de nos livres de maths...
Et puis, l'élève qui voudra tout de même procéder à l'addition de ces deux nombres devra "importer" l'entier dans l'univers des réels AVANT de pouvoir additionner.

En informatique, le nombre est une entité concrète. Or, il faut bien comprendre la nature d'un nombre avant d'en généraliser l'idée.

Prenez le cas 20/50 + 40/50. Qu'est-ce que cela signifie ? À mon avis, cela dépend du contexte. Imaginez que ce sont deux examens de maths... on a donc 60 sur 100. Pourtant, dans un contexte très "scolaire", il est mathématiquement clair (en tout cas pour le prof) que la réponse est 60/50. L'élève aura un haussement d'épaule en se disant qu'en maths, tout peut arriver.... Vous me direz qu'en maths, 20/50, ça veut dire "vingt cinquantièmes". Pourtant, cela peut aussi dire 20 DIVISÉ par 50. Et cette division, en est-elle une de contenance ou de partage (combien peut-on faire de paquets de 20 pommes à partir d'un paquet de 50 pommes; on désire partager 20 pommes entre 50 personnes) ? Et si on conçoit cela comme "on a eu 20 points sur 50", alors peut-être comprendrez-vous que l'ÉCRITURE 20/50 peut vouloir dire N'IMPORTE QUOI hors contexte. Donc, une opération aussi simple que 1/2 + 1/3 n'est simple que pour celui qui en connaît le contexte; l'opération demeure sans aucune signification pour les autres. On doit avoir vu 1/2 dans plusieurs contextes avant d'en extraire l'idée pure de 1/2. Ce n'est qu'en voyant ces différents contextes qu'on pourra alors PENSER à généraliser une écriture dont le mathématicien découvrira plein de propriétés. Actuellement, on enseigne abstraitement les fractions en supposant que les élèves transposeront dans des cas particuliers... Or le transfert ne ce fait pas nécessairement ni naturellement. En fait, je pense que ce transfert ne se fait pas du tout. Si on enseignait la programmation plutôt que les math, les fractions seraient nécessairement utilisées dans des contextes particuliers.

Prenons maintenant une autre notion très concrète en informatique : les variables. Lorsque que vous entrez votre code utilisateur ou votre mot de passe dans l'ordinateur, ce texte est tout simplement traité par le programme comme une variable car on ne sait pas ce que l'utilisateur entrera.
Lorsque vous entrez votre score dans un jeu, ce score est en fait traité comme une variable par l'ordinateur.
Lorsque vous faites une requête sur une base de donnée, cette requête traite un ou plusieurs champs de la table comme des variables. Mon avis est qu'il faut qu'un élève puisse voir plusieurs situations concrètes qui "appellent" des variables pour comprendre le concept général de variables, concept qui, lui, est étudié par les mathémaciens. On procède actuellement à l'envers : on pense qu'en étudiant le concept général de variable, l'élève pourra faire des transferts dans sa vie quotidienne. C'est mettre la charrue devant les boeufs.

Prenons un autre exemple : le plan cartésien. Qu'est-ce qu'un écran d'ordinateur, sinon un "genre" de plan cartésien ? Le problème de faire bouger un point sur l'écran (comme dans le fameux jeu PONG) est un problème très intéressant. C'est un problème concret de fonction linéaire. Pour faire déplacer un point sur l'écran, l'élève en fait représentera concrètement une fonction linéaire. En résolvant plusieurs problèmes de ce type, la notion de fonction linéaire émergera et sera signifiante pour l'élève.

La plupart des langages de programmation possèdent aussi des notions de fonctions ou de procédures. Quant un élève aura VÉCU de vraies situations impliquant des fonctions, il pourra sans probleme, et seulement s'il en éprouve le besoin, étudier les fonctions EN GÉNÉRAL.

Voici en pseudo-code, un petit programme.

function bonjour(X)
{
imprime "Bonjour X, j'espere que tu vas bien !"
}

EXÉCUTION
bonjour(Paul)
SautDeLigne
bonjour(Gilles)
SautDeLigne
imprime "BIenvenue à vous deux!"


Je suis convaincu que vous comprenez ce programme. Pas besoin de fonctions trigonométriques, du second degré, etc.... On a du concret devant les yeux.

Aujourd'hui, avec la programmation HTML, le XML, le Javascript, le PHP, le MySql, on a tout pour inciter le développement du raisonnement rigoureux à partir de problèmes très concrets.
Ex.

J'ai une collection de cartes de hockey. J'aimerais pouvoir les trier et faire des sous-collections à partir des données sur les cartes (MySql)
Je joue à Dongeons et dragons et j'aimerais pouvoir créer mes personnages avec un outil informatique (php,mysql)
J'ai à étudier plein de mots en anglais, mais j'arrive pas à les retenir. (Javascript)
J'aimerais faire une page web sur mes intérêts (Html)

La résolution de ces "problèmes" forcera nécessairement un élève à programmer, donc à exprimer sa pensée logiquement et rigoureusement. Et l'élève en sortira avec un produit utile, tout au moins pour lui.

Les mathématiques viennent après des expériences sur les nombres, sur les variables, sur divers plans, sur les fonctions, etc.

Quels sont les l'arguments en faveur de l'enseignement des maths ? D'abord, on entend le "développement de la logique" puis, l'esprit de "rigueur" et souvent, cette sempiternelle "T'en auras besoin dans la vie, TOUT est mathématique." Pour moi, tout cela est de la foutaise.
Comment donc l'apprentissage de l'extraction d'une racine carrée vous a-t-elle aidé à devenir plus logique? En quoi, la factorisation des nombres vous a-t-elle été utile? Et la résolution d'équation du second degré ? Et l'addition de fractions ? Et la notion de nombres négatifs ?
À mon avis, l'enseignement de notions purement mathématiques est inutile et inefficace pour le développement d'un esprit mathématico-logique et rigoureux. La programmation, par contre, remplie très bien cette fonction.

Qu'on ne s'y méprenne pas : j'adore les mathématiques mais je crois sincèrement que l'enseignement de la mathématique au secondaire est obsolète.