L’informatique n’est pas magique


Un geek à Hogwarts

 

On peut mesurer sa progression en informatique à la part de xkcd que l’on comprend ou bien, pour les non-scientifiques dans mon cas, à la part de magie qui subsiste dans le fonctionnement de l’ordinateur. Par exemple, le passage d’un langage lisible par l’être humain en bits utilisables par la machine est pour moi de la magie. Je sais que le tour de prestidigitation a pour nom compilation mais je n’en connais pas le truc. Du coup, la création d’un langage me semble un acte démiurgique, qui me rappelle l’abîme de perplexité dans lequel m’avait plongé cet adage de mon ex-beau-père : « Si tu ne trouves le livre que tu cherches, écris-le. » Aujourd’hui, cela me paraît évident mais ma réaction, à douze ans, était de me demander comment diable je pourrais écrire un livre si ce que je ne savais pas était justement dedans. Treize ans plus tard, j’ai de nouveau douze ans en informatique : comment diable peut-on faire reconnaître à la machine un langage qu’elle ne connaît pas si c’est par celui-ci qu’on lui transmet des directives ? On dirait un mauvais remake de Rousseau sur l’origine de la langue. Exeunt la poule et l’œuf, place à la magie.

S’initier à l’informatique, c’est faire refluer la magie. Le cours réseau s’est ainsi chargé de me faire comprendre que les câbles, la fibre et le WiFi ne sont que matériaux, ondes et électricité. Finis les 0 et les 1 vert fluo qui circulent dans les câbles comme dans une guirlande de Noël clignotante : voilà les hertz, ohms, microns et calculs de masques de réseau (ça a l’air un peu chiant comme ça mais je vous rassure : ça l’est). Exit la magie, place à la physique. Sur le coup, on a un peu l’impression de se faire avoir au change mais ce n’est pas toujours le cas : les cours d’algorithmie et de programmation, notamment, m’ont appris ce qui se cachait dans un programme et c’est là que ça devient excitant. Exit la magie, place aux formules magiques. Pour être honnête avec vous, les formules magiques ne sont que logique et linguistique. Cela dit, l’apprentissage du geek ressemble beaucoup à celui de l’apprenti sorcier : très peu d’Hermione et beaucoup de résultats inattendus. Mais avec beaucoup d’entraînement, cela paraîtra vraiment magique aux moldus. Prêts pour une introduction aux sortilèges algorithmiques ? Promis, je serai moins ennuyeuse que professeur Flitwick et vous allez être surpris du peu de notions croisées.

 

Silhouettes et murs en caractères verts

Image extraite de Matrix

 

L’algorithmie : une affaire de boîtes à chaussures et d’aiguillages de train

 

Les suppléments sont là pour approfondir mais peuvent être allègrement sautés si vous commencez à en avoir assez.
 

Les boîtes à chaussures

Les boîtes à chaussures vont nous permettre de ranger tout un tas de choses dedans : ce sont des variables, qui permettent de stocker des valeurs. Ces valeurs sont de différents types, selon que les boîtes contiennent des baskets, des escarpins, des mocassins, des tongs… c’est-à-dire, des chiffres, des chaînes de caractères ou des booléens qui, comme les interrupteurs n’ont que deux valeurs : allumé/éteint, vrai/faux, oui/non.

Le supplément André. On ne peut pas mettre n’importe quelle paire de chaussure dans une boîte à chaussure : des chaussures de sports ne peuvent pas aller dans une boîte de chaussures à talons et vice-versa (bah, oui, les chaussures de sports puent). En revanche, des chaussures à talons peuvent aller dans la boîte d’autres chaussures à talons ; il faut juste faire attention à ce que la boîte soit assez grande de manière à ce que les talons ne soient pas ratiboisés. Les chaussures à talons sont des données numériques : on peut faire entrer un chiffre entier (des petits talons) dans une variable qui accepte les chiffres à virgule (des talons aiguilles) mais pas l’inverse, sous peine de faire perdre sa virgule au chiffre (talons ratiboisés).

Le supplément Louboutin. Les chaussures que nous manions sont particulièrement fragiles : toute paire de chaussure posée par terre est désintégrée. Pour échanger les boîtes de deux paires de chaussures, il en faudra donc une troisième, vide.

 

Les armoires

Les armoires vont nous permettre de ranger toutes les boîtes à chaussure que nous avons utilisées : ce sont des tableaux, dans lesquels ranger des variables.

Le supplément Ikéa. Si vous avez des centaines de paires de chaussures, les trier ne sera pas du luxe – par prix, date d’achat, pointure, couleur… en ordre croissant en décroissant. Il existe plusieurs techniques pour cela, dont une qui porte le nom très poétique de « tri à bulles ». Dans tous les cas, il vous faudra un critère de tri et un test en fonction duquel ranger les chaussures. Par exemple, pour un tri selon la saison à laquelle elles se portent : si ce sont des chaussures d’hiver, elles vont en haut de l’armoire, sinon, ce sont des chaussures d’été, elles vont en bas. C’est là que nous allons devoir brutalement changer de métaphore : on ne peut pas faire des kilomètres à pied avec des talons aiguilles ; nous allons donc prendre le train (après tout, les wagons ne sont toujours que de grosses boîtes à chaussures).

 

Les aiguillages

Les aiguillages permettent en un point donné d’orienter les trains selon leur destination prévue : ce sont des tests, où une certaine action est effectuée si la condition est remplie.

Le supplément SNCF. Si un TGV en provenance de Lille arrivant à Paris a pour direction Bordeaux, on l’envoie vers le sud-ouest ; s’il a pour direction Avignon, on l’envoie au sud-est. Plus court : s’il a pour direction Bordeaux, on l’envoie vers le sud-ouest, sinon vers le sud-est. Imaginons que l’on ne sait pas d’où vient le TGV (la SNCF permet un tel débordement d’imagination) ; nous avons alors un embranchement de plus et le test ressemblera à : si le TGV a pour direction Bordeaux, on l’envoie au sud-ouest ; s’il a pour direction Lille, on l’envoie au nord, sinon on l’envoie au sud-ouest. De deux choses l’une : soit le TGV vers Strasbourg est en grève, soit il fonctionne et tous les trains vers Strasbourg vont se retrouver vers Avignon, auquel cas, il faut encore rajouter une condition : si le TGV a pour direction Bordeaux, on l’envoie au sud-ouest ; s’il a pour direction Lille, on l’envoie au nord ; s’il a pour direction Strasbourg, on l’envoie à l’est, sinon on l’envoie au sud-ouest. Vous avez vu les principales formes de test :
– si (condition) alors (conséquence)
– si (condition) alors (conséquence), sinon (autre conséquence)
– si (condition 1) alors (conséquence 1), si (condition 2) alors (conséquence 2), si (condition n) alors (conséquence n)
– si (condition 1) alors (conséquence 1), si (condition 2) alors (conséquence 2), si (condition n) alors (conséquence n), sinon (conséquence par défaut)

Le supplément omnibus. Pour être précis, il faudrait en réalité que les conditions soient multiples. Non pas « si le TGV est à destination de Strasbourg » mais « si le TGV est à destination de Reims ou de Reitz ou de Strasbourg ». Je vous épargne toutes les directions desservies à partir de Lyon.

 

Les boucles d’or

Les boucles d’or, c’est boucle d’or qui revient à chaque fois qu’on lit Boucle d’or et les trois ours. Parce qu’il est dans la nature des contes d’être répétés mais qu’un adulte vire beaucoup plus vite fou que l’enfant à qui il le lit chaque soir, on a imaginé d’enregistrer le conte et de laisser la cassette ou le mp3 à l’enfant pour qu’il se le repasse ad vitam aeternam s’il le veut. Comme la boucle infinie n’est pas très pratique dans la mesure où l’on attend d’autres choses du gamin, genre aller à l’école ou prendre un bain, le parent fixe une limite : tu pourras écouter Boucle d’or et les trois ours trois fois d’affilée maximum ou tu pourras l’écouter jusqu’à ce qu’il soit l’heure du bain. Les boucles d’or sont tout simplement les boucles par lesquelles on automatise le traitement de tâches répétitives, en fixant une condition d’arrêt.

Le supplément fins alternatives. Imaginons maintenant que Boucle d’or et les trois ours soit transformé en livre dont vous êtes le héros (merci de faire comme si vous ne m’aviez jamais vue avec une casquette d’éditrice) : certains choix vous font traverser toute l’histoire quand d’autres vous en éjectent rapidement (l’ours tue boucle d’or d’un revers de pâte, boucle d’or n’a pas sommeil et se contente de manger à tous les râteliers avant de se tirer…). Vous avez une magnifique boucle qui exécute une action (continuer l’histoire) tant que l’on n’a pas rencontré la fin (c’est-à-dire tant que l’on nous donne un numéro de section auquel se rendre). Tant que et jusqu’à : voilà vos deux types de boucles.

Voilà, c’est tout.

Je vous la refais : c’est tout. Genre, c’est fini, vous avez tous les éléments en main. Quand le prof d’algo nous a sorti ça, j’ai cru que ça rentrait dans sa moyenne d’une blague toutes les dix minutes. Sauf que non, on a vraiment tous les éléments en main : boîtes à chaussures, armoires, aiguillages de train et boucles d’or. Le cocktail Molotov qui résulte de la combinaison de tous ces éléments est un programme informatique. Si vous n’arrivez pas à envoyer des armoires de boîte à chaussures à Bordeaux tant qu’il y a un gamin qui écoute boucle d’or dans le train, le cocktail explosera et, lorsque la fumée se dissipera, vous verrez surgir un bug. On n’imagine pas la menace sanitaire que représentent les métaphores mal filées.

 

Buste d'un homme qui s'ouvre le torse, en lego

Sculpture en lego de Nathan Lawaya

 

Notre-Dame de Paris en lego

 

Imaginer coder Twitter, Photoshop ou Candy Crush avec si peu d’outils algorithmiques, c’est un peu comme si on vous demandait de construire la cathédrale Notre-Dame de Paris avec une boîte de lego, quand un pauvre cabanon de jardin vous donne déjà des sueurs froides. Pour vous donner du cœur à l’ouvrage, on vous apprend que, lorsque vous aurez trouvé quelle forme donner à une pierre pour la façade, vous n’aurez pas à recommencer, mais seulement à filer le mode d’emploi au tailleur de pierres, qui vous les fournira au moment d’élever le mur. C’est le principe d’une fonction, un petit bout de code (pas toujours petit, d’ailleurs), qu’on peut réutiliser à volonté. Certaines fonctions sont présentes de base dans le langage (des fonctions mathématiques qu’on trouverait dans une calculatrice, par exemple) et on en crée d’autres selon ses besoins.

Mais les besoins sont immenses pour une cathédrale : l’architecte, qui ne peut pas être à fois vitrier, charpentier, maçon et sculpteur, va donc chercher le savoir-faire là où il se trouve – dans des bibliothèques, qui sont des recueils de fonctions dans lesquels on peut piocher. S’il a beaucoup de chance, l’architecte trouve une bibliothèque-sculpteur qui va lui fournir une fonction-gargouille prête à l’emploi. Mais, la plupart du temps, il ne trouvera qu’un nez de singe et des cornes de bœuf avec lesquels il devra composer lui-même sa gargouille. Rien ne dit que en plus que les cornes seront à la bonne taille, que les pattes seront assez solides pour supporter la tête ou que le nez sera dans la bonne matière : on trouve parfois la bibliothèque dont on rêve… dans un autre langage que celui de notre programme. Si l’on a de la chance dans son malheur, le matériau initial supporte qu’on lui ajoute un revêtement, faisant ainsi dialoguer les deux langages ; sinon… pas de chance. Ces bibliothèque sont un peu comme du prêt-à-porter taille unique : ça peut aller du premier coup mais, dans la plupart du temps, il faudra des retouches, beaucoup de retouches, encore des retouches. Et donc, du temps, beaucoup de temps, encore du temps. Et de même, des développeurs qu’il faudra bien manager, sous peine de s’apercevoir trop tard que le sublime vitrail composé à la perfection est trop grand par rapport à l’espace qu’on lui a réservé dans la façade.

Imaginez un peu l’organisation qu’il faut. Au bout de cinq minutes, tous les plans et modes d’emplois rassemblés auprès des différents corps de métier sont éparpillés, les informations sur la clé de voute perdues sous des dessins de gargouille. Pour éviter ça, on rassemble les modes d’emplois et outils spécifiques à un élément dans un même endroit, une même classe. Avec la classe « pierre de façade », on pourra utiliser autant de pierre qu’on en a besoin (pourvu qu’on n’ait pas oublié de les commander au tailleur de pierre) ; avec la classe « gargouille », on obtiendra autant de bêtes cornues qu’on voudra, même si un sculpteur s’occupe du museau et un autre des pattes. Simple, non ? Sauf que, deux minutes, plus tard, c’est à nouveau le bazar : classe « pierre de façade », classe « gargouille », classe « vitrail rond », classe « vitrail vertical », classe « pierre de colonne », classe « sculpture de saint », classe « pierre de voûte »… On créé donc des classes mères, qui contiennent des classes filles : la classe mère « pierre » chapeautera les classes filles « pierre de façade », « pierre de colonne », « pierre de voûte », tandis que les classes filles « vitrail rond », « vitrail vertical » hériteront de la classe mère « vitrail ». Et vous pouvez jouer longtemps aux poupées russes, comme ça, avec des filles qui deviennent à leur tour mère, sur des générations.

Alors, ça vous botte, les lego ? On peut faire de grandes choses en lego. Ou pousser des hurlements en posant les pieds sur des pièces éparpillées par terre, perdre l’équilibre sous l’effet de la douleur et s’étaler sur la gargouille en construction (vous aurez reconnu les bugs, métamorphosé en pièces de lego). C’est pour ça qu’on commencera par le cabanon de jardin. Ok, c’est moins glamour, mais franchement, a-t-on jamais autant rêvé que dans une cabane dans le jardin de ses grands-parents ? C’est ça, la magie de l’informatique : commencer petit et avancer sur des épaules de géants.