Depuis plusieurs semaines (voire plusieurs mois), je vois passer tout et n’importe quoi en ce qui concerne le code et son apprentissage à l’école, les algorithmes, et la simplicité (ou complexité) des uns et des autres. Et comme c’est un peu mon métier, le code et les algorithmes, je ne suis pas plus mal placé qu’un autre pour en parler…
Alors, le code, c’est facile ou pas? Les algorithmes, c’est simple ou compliqué? Les enjeux éthiques de l’informatique, peut-on les évoquer simplement?
Le code
Commençons par les sujets qui fâchent. « Le code », ça ne veut rien dire. Il y a une tétrachiée de langages informatiques, du plus abscons au plus improbable, dont 99,99% sont de toutes façons interprétés[1]les langages qui gèrent directement l’état des puces devant se compter sur les doigts d’une main et qui ont dans leur immense majorité une durée de vie assez courte à l’échelle d’une vie humaine.
Sans compter que coder n’a en soi pas beaucoup d’intérêt, vu qu’il s’agit de transcrire dans le langage de développement le fonctionnement prévu par la conception (ou « l’algorithme »).
Est-ce compliqué? Ca dépend des langages, mais on peut trouver des langages très simplifiés pour l’apprentissage
Est-ce utile? En soi, non, sachant que le langage qui aura été enseigné pendant les études a toutes les chances d’être complètement obsolète au moment de l’arrivée dans le monde du travail. Mais le fait de manipuler un langage de programmation permet de prendre la mesure de certaines choses, en particulier la notion de contrôle qualité et de tests. Cela permet de se souvenir que l’erreur est humaine et que les logiciels sont des œuvres humaines…
L’algorithme
Voila un point fort intéressant, parce que c’est ce que beaucoup mettent généralement sous le vocable « apprentissage du code », alors que cela n’a que très vaguement à voir. Un algorithme, c’est un arbre de décisions basé sur des réponses à des états, permettant d’effectuer des actions (ou de proposer d’autres choix, etc). Si son emploi majeur est dans le domaine de l’informatique, on trouve des algorithmes un peu partout, du distributeur de préservatifs à la hotline téléphonique de votre opérateur Internet[2]oui, c’est pour ça qu’ils ont souvent l’air bornés et « robotisés »: c’est qu’ils ont un algorithme de détection de votre panne….
Est-ce que c’est compliqué? Oui et non. Les bases de l’algorithmique sont simplissimes: il doit y avoir une dizaine d’opérations à connaitre au maximum pour écrire un algo. La conception d’un algorithme, par contre, est nettement plus complexe et nécessite, sinon un don, du moins une certaine tournure d’esprit qu’il n’est pas forcément aisé d’acquérir[3]Puisque je parle un peu de ma vie dans ces colonnes, je vais vous raconter le cas d’un TP d’info, où l’on me demandait de trouver le minimum global d’un système à X … Continue reading. Mais si tout le monde n’est pas fait pour devenir concepteur informatique (et heureusement, d’une certaine manière), la connaissance des mécaniques de bases, et surtout la prise de conscience, une fois de plus, que l’informatique n’est pas une boite noire magique et douée d’une conscience propre, mais simplement la conséquence d’une démarche de réflexion humaine appliquée de façon rigoureusement logique (et parfaitement con) est, à mon avis, à la portée de tout le monde.
Enjeux éthiques et autres considérations philosophiques
Un autre reproche fait à l’apprentissage « du code » tôt dans la scolarité serait qu’il ne permet pas d’appréhender les différents enjeux moraux autour de l’outil. Je ne suis bien évidemment pas d’accord.
Même un apprentissage « basique » de l’algorithmique et d’un langage de programmation permet de « démythifier » l’informatique: rien n’est magique, tout est conséquence d’une série d’états ou d’actions.
De la même façon, un grand nombre de dérives peuvent être présentées dans ces cours: défauts, biais de conception (voulus ou non), « triche » du programme, programmation de l’obsolescence… autant de sujets qui poussent à remettre en question la confiance aveugle dans les machines.
Et avec un peu de pluridisciplinarité[4]coucou les copains profs pataugeant dans la réforme du Collège 2016!, on peut parler statistiques et « faux-positifs », ou les dilemmes (comme celui du tramway[5]vous êtes au volant d’un tramway dont les freins ont lâché. Devant vous un aiguillage: sur la voie de gauche, 5 personnes que vous ne connaissez pas et qui seront écrasées par le … Continue reading, à la mode quand on parle de « voiture intelligente »), ou contrôle et recherche de données (incl. la question de l’empreinte numérique, de la sécurisation des données sensibles…).
Bref, parmi la foultitude d’idées débiles concernant l’éducation que l’on peut lire de la bouche des gens « autorisés », celle-ci pourrait être l’ébauche d’une bonne idée, dans un domaine qui reste pour beaucoup (y compris dans les milieux « autorisés ») un domaine quasi-magique[6]terme utilisé à dessein, ayant en mémoire cette citation d’Arthur C. Clarke: « Toute forme de technologie suffisamment avancée paraitra aux yeux des civilisations moins avancées comme de … Continue reading.
Et parce que ça fait longtemps qu’on n’a pas fini en chansons:
References
↑1 | les langages qui gèrent directement l’état des puces devant se compter sur les doigts d’une main |
---|---|
↑2 | oui, c’est pour ça qu’ils ont souvent l’air bornés et « robotisés »: c’est qu’ils ont un algorithme de détection de votre panne… |
↑3 | Puisque je parle un peu de ma vie dans ces colonnes, je vais vous raconter le cas d’un TP d’info, où l’on me demandait de trouver le minimum global d’un système à X dimensions. J’avais une méthode mathématique – le simplexe, pour les deux du fond que ça pourrait intéresser -, j’avais réussi à transformer la formule mathématique en algo, mais je galérais parce que ça ne marchait pas super bien dans les grands intervalles. Jusqu’à ce qu’un prof me fasse remarquer qu’on était en informatique, et que réduire l’intervalle de recherche en faisant quelques centaines de calculs n’était pas vraiment un problème pour un ordinateur… |
↑4 | coucou les copains profs pataugeant dans la réforme du Collège 2016! |
↑5 | vous êtes au volant d’un tramway dont les freins ont lâché. Devant vous un aiguillage: sur la voie de gauche, 5 personnes que vous ne connaissez pas et qui seront écrasées par le véhicule, et sur la voie de droite une seule, votre femme/mari/enfant/père/mère. Qu’est-ce que vous faites? |
↑6 | terme utilisé à dessein, ayant en mémoire cette citation d’Arthur C. Clarke: « Toute forme de technologie suffisamment avancée paraitra aux yeux des civilisations moins avancées comme de la magie » |
Le problème restant qu’on « lâche » les jeunes sur du code sans aucune notion d’algorithmique la plupart du temps. Parce que c’est plus fun de jouer à faire une boucle for sur le pc que de se casser la tête sur un algorithme de parcours d’arbre binaire sur papier… Ce qui finit par produire des gens qui codent avec les standards industriels des années 90. C’est à dire aucun.
Là dessus, on ajoute ceux qui sortent de l’école (et je parle là des études post bac) sans notion d’objet et encore moins d’idée sur ce qu’est un design pattern, et c’est la fête.
En résumé, je suis d’accord, on devrait commencer cet apprentissage par des jeux de logique et d’algorithmique. De toute manière, il y a 10 ans, 20% du code embarqué était généré automatiquement depuis un modèle, aujourd’hui on approche des 50%. D’ici 10 à 20 ans, les études d’informatique seront réservées à des professionnels spécialisés, et un ingénieur en mécanique pourra se concentrer à 100% sur son cœur de métier sans avoir besoin de savoir écrire une ligne de code.