Archives pour l'étiquette Technologie et innovation

Pourquoi je suis favorable à l’enseignement de la programmation à l’école

Cliquez sur l'image

Cliquez sur l’image

C’est un débat qui revient régulièrement, et pour une fois avec une certaine symétrie des deux cotés de l’Atlantique : doit-on enseigner la programmation à l’école ?

Les arguments contre, je l’avoue, me convainquent assez peu : la programmation n’est pas vraiment une discipline au même titre que les maths ou la littérature (mais on enseigne aussi la flute à bec, la cuisine et le sport que je sache – et si la définition d’une discipline c’est d’être patiné par les ans, par définition on n’en n’aura jamais de nouvelle) ; pas tout le monde aura besoin de programmer (bin pas tout le monde aura besoin d’avoir lu Victor Hugo et de savoir calculer une dérivée) ; les profs ne sont pas formés (à nouveau, avec cet argument on n’aura par principe jamais de nouvelles matières). L’argument le plus étrange pour moi, mais qui apparemment fait mouche : c’est pas avec ça qu’on va résoudre tous nos problèmes ! (Beaucoup de discussion en suivant ce lien ; l’article lui-même me paraît poser de fausses dichotomies ; et je précise que je n’ai pas lu tous les commentaires.) Euh non, mais si on n’a rien le droit de faire si ce n’est pas la seule solution à tous nos problèmes, c’est un peu limitant (ça me rappelle certains débats sur le riz doré).

Pour être clair : le manque de profs est un problème, mais si c’est le principal problème, alors il n’y a pas d’opposition de principe, et c’est un problème auquel il est possible de chercher des solutions : formation de profs volontaires (et je ne vois vraiment pas pourquoi ça serait limité ni même davantage encouragé pour les profs de maths), embauche en temps partiel d’étudiants, flexibilité sur les diplômes si expérience professionnelle, … bon après je ne m’aventure pas dans les débats sur les statuts de fonctionnaires en France, mais ce n’est plus une question de principe donc.

Alors pourquoi suis-je favorable à l’enseignement de la programmation à l’école ?

D’abord, l’informatique me paraît une matière importante, et c’est en programmant qu’on l’appréhende le mieux. De même qu’on fait des expériences en chimie et physique, des calculs en maths, des rédactions en français, c’est en programmant qu’on comprend à la base l’informatique. Ceci n’exclut pas d’aller plus loin et plus théorique pour ceux qui le veulent, mais il me semble que la compétence de base s’acquiert vraiment au pied du mur en devenant forgeron (ou quelque chose comme ça). J’ai eu une discussion Twitter avec un collègue bioinformaticien à ce propos, où il défendait qu’apprendre à programmer était comme apprendre la mécanique automobile plutôt que la physique. Je maintiens que c’est plus comme écrire des rédactions ou des dissertations, ou résoudre des calculs. De plus, l’informatique est quand même à mon avis à la fois une science et une technologie (voir les avancées et théoriques et pratiques d’un très bon informaticien dans ce billet). (La bioinformatique aussi d’ailleurs.)

Ensuite, lorsque l’on sait programmer, je pense que même si l’on ne programme pas (ou plus) en pratique, on en retire la compréhension de deux choses importantes :

  • On comprend mieux l’intuition du programmeur, et donc on comprend mieux comment utiliser les logiciels et on comprend mieux ce que l’on peut demander ou pas à l’informatique. On comprend ce qui doit forcément être sauvé dans un fichier, sinon ça ne serait pas gardé, ce qui devrait logiquement être modifiable parce que c’est facile, et ce qui n’est pas vraiment possible. C’est facile de se moquer du maire de New York qui affirme vouloir apprendre à programmer, parce qu’en effet dans son travail il ne doit pas en avoir besoin. Mais s’il comprend mieux ce qu’il peut demander, ce qui améliorerait la vie et serait vraiment facile à faire, ce serait un sérieux progrès pour la gestion des grandes villes à mon avis. Et juste pour prendre en main un nouveau logiciel, ou un nouvel appareil (iBidule ou autre), de comprendre ce qu’est un programme et comment ça marche est un sérieux plus. Vous comprenez ce que ça veut dire, que les apps soient « sandboxés » sur un iphone ? Sans savoir programmer, cela reste forcément un peu obscur je pense.
  • On comprend au moins intuitivement plein de notions qui sont en général pertinentes à notre relation avec le monde, y compris hors informatique. C’est un bénéfice de devoir formaliser la manière de penser et d’exécuter. Ce que sont un algorithme (comment résoudre une tache), une heuristique (une solution approximative, rapide et qui marche la plupart du temps), que de mauvaises données ne donneront pas de bonne solutions (Garbage in garbage out), qu’un ordinateur ne peut pas « comprendre » au même sens qu’un humain, etc etc, sont des notions à mon avis fondamentales. Notions que l’on peut bien sur pousser pour ceux qui le choisissent, mais dont on peut donner une intuition à la plupart des gens en leur faisant utiliser.

Un bénéfice je trouve moins critique mais quand même appréciable est de pouvoir utiliser l’informatique dans la zone grise qui n’est pas vraiment de la programmation au sens strict, mais manipule les mêmes objets et concepts : éditer du HTML pour une page web ou un blog, éditer le code dans Wikipedia, utiliser un logiciel de statistiques avancé comme R, écrire des macros Excel, etc.

Débats secondaires : à quel niveau à l’école ? Dès 6 ans, 10 ans, ou seulement à 17 ans ? Et quel languages ? Il me semble qu’il faut d’abord être d’accord sur les objectifs avant de s’occuper des moyens de les réaliser. En l’état des choses, je vote 10-12 ans, programmation de robots puis Python, mais je suis très ouvert à ce niveau-là. 🙂

Réflexions sur l’apport de l’informatique à la bioinformatique

cliquez sur l'image

cliquez sur l’image

J’ai récemment été au séminaire de retraite GNOME (Gonnet is Not Only Molecular Evolution) de Gaston Gonnet, un grand bonhomme de l’informatique (Google Scholar), notamment connu pour le logiciel de calcul Maple, et ces 25 dernières années pour ses contributions parfois remarquées à la bioinformatique et à l’évolution moléculaire. Le séminaire a inclus des informaticiens hard-core aussi bien que des collaborateurs biologistes, et bien sur des bioinformaticiens, certains formés par Gaston à l’interface interdisciplinaire. C’est l’occasion de réfléchir à l’interaction informatique-biologie, et notamment à l’apport de l’informatique.

Bien sur, les ordinateurs plus puissants, les languages de programmation de haut niveau, et les systèmes de gestion de données, sont utiles à la biologie, mais ce n’est pas de ça que je veux parler. La recherche en informatique, ce sont de nouveaux algorithmes, des démonstrations de complexité, voire de nouveaux languages de programmations ou manières de représenter l’information.

Prenons l’exemple de la première contribution (remarquée) de Gaston à la bioinformatique : la matrice de Gonnet (Gonnet et al 1992 Science 256: 1443-1445).

La contribution a été remarquée à la fois grâce au résultat, et à cause du ton du papier, qui contient la phrase « The parameters provide definitive answers to two fundamental questions concerning protein alignment: What does a mutation cost? and What does a gap cost?« . Cette phrase n’est probablement pas due à Gaston (communication personnelle), mais elle est quelque part emblématique d’un certain type de relations entre bioinformaticiens issus de la culture de la démonstration de l’informatique et des maths (voir aussi Lior Pachter) et bioinformaticiens issus de la culture empirique de la biologie.

Bref, un peu d’histoire. Le type de matrice dont on parle ici est un genre de tableau qui donne les probabilités de changement d’un acide aminé en un autre lors de l’évolution des protéines. Les protéines sont des chaînes d’acides aminés, qui forment un « alphabet » de 20 lettres. Une protéine peut changer par mutation soit en remplaçant un acide aminé par un autre, soit par délétion ou insertion d’acides aminés. Un acide aminé peut être remplacé par un autre selon une probabilité qui dépend à la fois de propriétés chimiques et du code génétique (certains changements sont plus faciles à obtenir par hasard), et de l’impact fonctionnel sur la protéine (certains changements ont plus de chances de casser la fonction de la protéine, et sont donc éliminés par la sélection naturelle – ce qui diminue la probabilité de les observer en pratique). Dans les années 1960, celle qui a probablement fondé la bioinformatique sans ordinateurs, Margaret Dayhoff, a eu l’excellente idée de comparer beaucoup de séquences de protéines homologues (beaucoup à l’époque : quelques dizaines) (homologues : en gros la même protéine dans différentes espèces ; voir ce billet), et de compter les changements entre tous les types d’acides aminés. Ce qui lui a permis de construire la première matrice de probabilités de changements entre acides aminés, connue comme PAM (point accepted mutation). Y a une explication plus détailée sur le blog bioinfo-fr.

Etape 1 donc : intuition du biologiste, qui lui permet d’obtenir un résultat et un outil utiles.

Ensuite, des informaticiens ont démontré la manière optimale d’aligner des protéines pour savoir quels acides aminés comparer de manière mathématiquement correcte (Needleman-Wunsch). Démonstration cool, bien que limitée à l’époque par la puissance des ordinateurs : les algorithmes exacts sont lents. Mais ces démonstrations ont formé la base de beaucoup de travail suivant.

Etape 2 : des informaticiens démontrent des théorèmes et trouvent des algorithmes exacts, quoique souvent inutiles en pratique (provoc assumée).

Dans les années 1980, Gaston Gonnet avait travaillé sur des algorithmes rapides et efficaces pour chercher dans tous les mots de l’Oxford English Dictionnary. Il a alors été contacté par un biologiste assez original et brillant, Steven Benner, qui lui a proposé, et je cite, « de travailler sur des données intéressantes » (par opposition au dictionnaire apparemment). Ils ont relevé le défi de mettre à jour les vieilles matrices de Dayhoff, avec bien davantage de données, en utilisant les algorithmes de Gaston pour les dictionnaires. Ils ont ainsi calculé la matrice de Gonnet, qui inclut non seulement une mise à jour des probabilités de changement entre acides aminés, mais des estimations des probabiliés d’insertion et de délétion (les « gaps » de la citation ci-dessus) grâce également à l’emploi de la méthode Needleman-Wunsch.

Etape 3a : les informaticiens répètent le travail des biologistes – bioinformaticiens (Dayhoff), mais bien plus efficacement.

Etape 3b : la collaboration entre biologistes et informaticiens qui se s’écoutent et travaillent efficacement ensemble déchire tout.

A noter aussi qu’une partie de l’apport de Gaston était dans la manière de représenter l’information dans un ordinateur pour des recherches rapides, et qu’il a implémenté ses méthodes dans un language qu’il a développé, appellé … DARWIN.

Voilà bien sur c’est un cas particulier, mais souvent comme ici le point de départ d’une nouvelle approche vient de l’intuition des biologistes, elle est rendue efficace par les informaticiens, et quand on travaille vraiment ensemble on fait de grandes choses.

En plus ils m’ont donné un t-shirt à la conf, avec un gnome cool, et j’ai appris que « gnomes » était un surnom des banquiers zurichois.

Mise à jour : des liens pertinents via Christophe Dessimoz :