Annonce : vous pouvez désormais vous abonner par mail au blog !

Des zéros et des uns

Publié le 10 août 2016 par Gee dans Tu sais quoi ?
Inclus dans le livre Grise Bouille, Tome II

Dans la lignée des Les ordinateurs sont cons ou de Bit, byte, bitten, continuons à désacraliser l’informatique et à comprendre ce qui se passe derrière ces écrans qui ont envahi nos vies. C’est long mais ça devrait être accessible à tous 🙂

Des zéros et des uns

💡 Vous le savez sans doute, l'informatique, « c'est que des zéros et des uns ». Mais quand vous regardez votre écran, vous avez sans doute du mal à voir quel est le rapport entre votre super logiciel et des zéros et des uns.

Une bande de mecs avec des bonnets d'âne : « Bonjour, nous sommes des gros nazes. » Une bande de Huns : « Bonjour, nous sommes l'armée d'Attila. » Le smiley regarde ces deux bandes qui se font face : « Effectivement, on n'voit pas bien le rapport si ce n'est que la situation est assez binaire. »

Les zéros et les uns, c'est effectivement la base de tout dans un appareil informatique (ordinateur, téléphone, télé connectée, bref, tout ce qui contient un microprocesseur).

Mais demander où sont les zéros et les uns quand on regarde un écran, c'est comme demander où sont les atomes quand on regarde une maison.

Une maison est représentée avec une femme qui dit : « Bah ils sont partout, ducon, sinon y'aurait pas de maison. Bouffon va. » Gee, blasé : « Oui bah si les physiciens voulaient bien me foutre la paix avec mes analogies foireuses, j'aimerais poursuivre.  D'autant plus que j'ai bien l'intention de la filer, l'analogie. »

Voyons voir comment on construit une maison (un logiciel) à partir d'atomes (des zéros et des uns).

💡 Un processeur, ça contient plein de petites choses qui s'appellent des transistors.

Un mec marche avec un chapeau et un gros poste de radio collé à l'oreille. Il dit : « J'suis trop swag avec mon transistor. » Le poste de radio difuse : « J'aai butté l'shériiif…  mais j'ai pas butté son adjoiiint, ooh nooon… » Gee précise : « Oui, avant on appelait les postes de radio “transistors” parce qu'ils contenaient des transistors.  Si vous voulez, c'est un peu comme si on disait « vieux pourris » pour parler de l'Assemblée Nationale. » Le smiley, pas content : « Par contre personne ne disait “swag” à cette époque, Monsieur Anachronismes. »

Un transistor, dans le contexte, ça permet de stocker une information simple : ouvert ou fermé ; courant qui ne passe pas, courant qui passe ; faux ou vrai. Bref, zéro ou un.

Gee, avec des lunettes de soleil, présente un dessin en disant : « Priviouslie, honne Gwise Bouille. » Le dessin est un extrait de l'article « Bit, Byte, Bitten » qui dit : « bit signifie “Binary digIT”, soit “chiffre binaire”. En gros, c'est le plus petit élément de comptage en informatique. Il peut prendre deux valeurs interprétables différemment selon le contexte : 1 ou 0, fermé ou ouvert, etc. »

(Voir l'article Bit, Byte, Bitten.)

On peut assez facilement comprendre comment on utilise ça pour stocker des informations complexes : on utilise un codage interprété par l'ordinateur.

C'est comme ça que naissent les formats de fichier.

Un fichier, c'est une suite de bits auquel on va donner un sens selon une norme prédéfinie : le format (par exemple HTML, MP3, WAV, JPEG, etc.).

Gee montre une suite de 0 et de 1 formant le chiffre « 0100 0001 » et dit : « Ça, c'est un octet, soit 8 bits, qui vaut 65 en écriture décimale.  C'est un peu la molécule de notre maison. »

Un schéma précise ce que cet octet signifie selon le contexte.  Si on le trouve dans un texte brut, c'est un A majuscule.  Dans une image noir et blanc, c'est un pixel gris foncé.  Si c'est dans un fichier audio, c'est la valeur de la vibration sonore à un instant précis. »

Bien sûr, il y a des formats plus complexes ou compressés, mais le principe reste le même :

une suite de bits, c'est une information qu'on interprète différemment selon le contexte.

💡 D'accord pour le stockage, mais le reste ? Un logiciel, ce n'est pas que du stockage, ce sont surtout des actions.

Steve Jobs, représenté en ange penché sur un nuage avec des symboles « dollars » dessus : « Dans certains cas, des actions sacrément juteuses, pas vrai, Bill ? » Bill Gates, en bas, représenté allongé sur des gros sacs des billets : « Tout juste, Steve. »

Eh bien, c'est le même principe que pour le stockage en utilisant encore un autre format :

au lieu de simplement interpréter les suites d'octets comme des textes à afficher, des vidéos à diffuser ou des musiques à jouer… l'ordinateur peut les interpréter comme des suites d'instructions.

C'est ce qu'on appelle un programme.

Un ordinateur vieillot (avec écran cathodique) regarde un livre titré « Programme ». Il dit : « Alors, 0001 1001… ça veut dire “bouge l'octet suivant”. 0011 1011, ça c'est “compare-le à l'octet d'avant”… 1011 1000, c'est “va voir l'instruction située 10 cases plus loin”… »

Et absolument tout ce que fait un ordinateur peut être décrit comme une trèèèèèèès longue suite d'instructions de ce genre.

(Voir l'article Les ordinateurs sont cons.)

Le smiley, l'air taquin : « Gee rentabilise à mort les archives de son blog. »

Gee, derrière un pupitre, avec une grosse plume à la main, l'air enthousiaste : « Bon, j'ai commencé à développer mon programme.  Plus que 12000 milliards d'instructions à écrire et je suis au bout ! Ouais ! »

Oui, alors bien sûr, on ne s'amuse jamais à développer un programme en écrivant chaque zéro et chaque un individuellement, tout comme on ne construit pas une maison atome par atome.

Gee, toujours derrière son pupitre avec sa plume à la main, mais représenté en vieillard à la barbe et aux cheveux très longs : « T'aurais pu le dire avant, j'avais presque terminé, là… »

Mais le monde informatique est une création humaine et il faut donc quand même bien « inventer » ces briques de bases.

(Alors que dans le monde physique, elles sont déjà un peu assemblées par le hasard, par Dieu ou par quelle que soit l'explication de l'origine de l'Univers qui vous aide à dormir la nuit.)

Une classification périodique des éléments complétement vide est représentée, avec seulement le H sur la première case. Une sorte de magicien qui lévite dit : « Alors, l'hydrogène, c'est fait.  Qu'est-ce que je pourrais bien mettre ensuite ? » Une flèche vers le magicien précise : « (Représentation du Créateur selon le Culte de Mendeleiev.) »

Comme écrire des zéros et des uns, c'est assez illisible pour un être humain, on a inventé une façon un peu plus claire d'écrire des instructions :

l'assembleur.

C'est le langage le plus « bas niveau » (c'est-à-dire proche de la machine) qui existe après le binaire.

En gros, on a juste traduit les instructions binaires avec des mots-clefs.

Le Geek lit un manuel : « Je veux initialiser la variable A à la valeur 126.  Ça se dit…  SET A 126 dans ton langage assembleur. » Le vieil ordinateur lui répond : « Alors, tu veux faire un SET A, ce que fait mon processeur quand il lit 0010 1000, et avec la valeur 126, soit 0111 1110. Wokay. »

Ici, on a une simple correspondance, SET A 126 -> 0010 1000 0111 1110. Mais tous les processeurs n'ont pas les mêmes instructions disponibles ! Il y a donc plusieurs langages assembleurs…

Bien sûr, ça reste très compliqué d'écrire des choses un peu conséquentes dans un langage si bas niveau.

Quand j'étais en école d'ingénieur, notre premier TP d'assembleur, c'était 4 heures pour coder… une multiplication.

Gee, gêné, dit : « Après, faut quand même préciser qu'on était des gros bleus.  Et des gros branlos, ce qui n'aidait sans doute pas. » Le smiley, avec un sourire en coin : « Bah tiens. On se serait pas douté. »

Du coup, ce qu'on code en assembleur, ce sont des briques élémentaires un peu plus grosses que les instructions de bases, briques qu'on va réutiliser intensivement.

C'est ce qui va donner les langages de programmation, qui nécessitent d'être transformés en binaire par une opération complexe (la compilation ou l'interprétation selon les langages) et pas simplement « traduits » mot à mot comme l'assembleur.

Le Geek dit à l'ordinateur : « Je veux calculer la racine carrée de 2. Ça se dit sqrt(2) en langage C. » L'ordinateur, en panique : « Hein ?! Mais j'comprends rien à ça ! » Quelqu'un hors-champ s'exclame : « PAS DE PANIQUE ! »

Le personnage hors-champ arrive, c'est une petite créature taguée « GCC » et qui dit, en montrant ses muscles : « JE SUIS LÀ ! » Une flèche indique qu'il s'agit d'un super compilateur. Le Geek et l'ordinateur sont admiratifs : « Oooooooooh. »

GCC dit : « Ne t'inquiète pas, cher ordinateur, je vais t'expliquer quelle longue suite d'instructions permet d'arriver à calculer la racine carrée de deux. » L'ordinateur, rassuré : « Je t'écoute. » Le Geek, satisfait : « C'est-y pas formidable… »

On a quitté le monde moléculaire pour arriver aux matières premières, au sable, à la terre, à l'eau…

Par exemple, ci-dessus, on avait un calcul de math un peu plus poussé qu'une simple addition mais qui est déjà précodé et disponible dans la bibliothèque standard du langage C.

Gee explique : « Une bibliothèque logicielle, c'est un ensemble de fonctions déjà disponibles pour que le programmeur n'ait pas besoin de réinventer la roue à chaque fois qu'il écrit un programme.  Tout comme un maçon ne synthétise pas un mur depuis des atomes bruts. » Un maçon regarde Gee d'un air blasé : « Non mais dis donc, qu'est-ce que t'en sais ?  Chiche. J'vais chercher mon petit atelier de chimiste, tu vas voir c'que tu vas voir… »

Et à partir de là, on a tout ce qu'il faut pour construire une maison.

Notre langage et notre bibliothèque standard nous donnent peut-être accès aux matières premières, au sable, à la terre… mais on trouve des langages et des bibliothèques de plus haut niveau qui fournissent des fonctions beaucoup plus avancées (on serait au niveau du ciment, du plâtre, même des briques et du placo).

Très souvent, ces bibliothèques se basent sur les bibliothèques standards qui elles-mêmes sont basées sur des morceaux d'assembleurs qui se traduisent, pour finir, en binaire !

Le smiley, transpirant : « Je crois que j'ai besoin d'aspirine.  Au moins ça, c'est juste une molécule… »

💡 Voilà comment, au final, on construit des programmes complexes (des maisons) : en utilisant parfois des objets préconstruits (des poutres, des dalles) basés sur des fonctions complexes (du ciment, du plâtre) basées sur des fonctions simples (du sable, du bois), basées sur des morceaux de code très bas niveau (des molécules) qu'on peut traduire en une suite de bits : des zéros et des uns (des atomes).

Le Geek dit : « Ordinateur, je voudrais afficher un triangle à l'écran. Avec la bibliothèque graphique OpenGL, ça se dit : glBegin (GL_TRIANGLES); glVertex3d (0.0, 0.0, 0.0); glVertex3d (0.0, 0.0, 1.0); glVertex3d (2.0, 0.0, 0.0); glEnd (); » L'ordinateur, complétement paniqué : « WHAT THE FUCK ?! » GCC, un peu gêné : « J'ai pas compris grand-chose non plus. » Un autre personnage hors-champ s'exclame : « J'arriiiiiiiiiive ! »

Une créature taguée « OpenGL » explique à GCC : « Alors, petit compilateur, voici comment on fait ce qu'il demande avec tes fonctions de base. » GCC répond : « Okay. Te plantes pas parce qu'il faut que je retranscrive en binaire après… » Le Geek, blasé : « On commence à être un peu serrés, ici… »

Voilà. Nous avons à peu près fait le tour même si j'ai un peu simplifié.

Le smiley, toujours transpirant : « Ah ouais, bah t'as bien fait de simplifier… »

On ne construit pas une maison en assemblant des atomes à la main, on ne construit pas un programme en écrivant des zéros et des uns à la main. Mais une maison, ça reste des atomes. Un programme, ça reste des zéros et des uns.

Un atome demande : « Et du coup, les électrons et les nucléons, c'est quoi chez vous ? » Un 1 et un 0 répondent : « Ah toi, fous-nous la paix, hein !  L'analogie est terminée ! »

Notez, pour finir, que l'assembleur reste utilisé « à la main » pour des morceaux de code critiques (ou tout simplement pour optimiser les fonctions bas niveau), sans parler d'anciens programmes « conséquents » et développés quand même directement en assembleur (pour des raisons de performance, la plupart du temps).

Un personnage avec une épée à la main : « Bonjour, je suis Prince of Persia, premier du nom. Je suis né en 1989 et j'ai été écrit en assembleur (ce qui a pris 4 ans). » Gee remarque : « Oh bah tiens, on a le même âge ! » Le Prince : « Parce qu'on était des grosses brutasses en programmation, à l'époque. Les langages haut niveau, c'est cheaté ! » Gee : « Par contre moi j'suis né par césarienne, c'est cheaté ou pas ? » Note : BD sous licence CC BY SA (grisebouille.net), dessinée le 9 août 2016 par Gee.

Publié le 10 août 2016 par Gee dans Tu sais quoi ?

🛈 Si vous avez aimé cet article, vous pouvez le retrouver dans le livre Grise Bouille, Tome II.

Soutenir

Ce blog est publié sous licence libre, il est librement copiable, partageable, modifiable et réutilisable. Il est gratuit car financé principalement par vos dons. Sans inscription, vous pouvez très simplement me soutenir :

Pour l'année 2023-2024, 9 796 € ont pour l'instant été collectés sur un objectif annuel de 21 000 € (SMIC brut), soit 47 % de l'objectif :

Sources de revenu

L'année étant entamée à 65 %, il y a actuellement un retard de 3 854 € sur l'objectif.

Avancement de l'année

Vous pouvez également, si vous le souhaitez, passer par une plateforme de financement participatif :