L’informaticien est-il un être binaire ?

Le processus de préparation d’un programme pour un ordinateur est particulièrement attirant, pas seulement parce que cela peut être rémunérateur d’un point de vue économique ou scientifique, mais aussi parce que cela peut être une expérience esthétique comme composer de la poésie ou de la musique.

Art of Computer Programming, Donald Knuth.

Il m’est souvent arrivé d’être confronté à un certain mépris de l’informatique qui s’exprime sous ce genre de forme : « Tout ça ce ne sont QUE des zéros et des uns », « ce dont je parle, c’est plus compliqué que de l’informatique : ce n’est pas du binaire ». On croirait que dans un ordinateur ou le cerveau d’un informaticien, il n’y a qu’un « 1 » et un « 0 » et qu’on peut réduire toute leur richesse à ça. Un peu comme si on réduisait une œuvre littéraire en français aux vingt-six lettres que l’on utilise pour écrire cette langue. Ada Lovelace fut confrontée au problème au début du XIXe siècle, avec la machine de Babage :

Beaucoup de gens, peu au fait des études mathématiques, imaginent que parce que le travail de la machine [analytique de Babage] est de donner ses résultats dans une notation numérique, la nature de ses processus doit être par conséquent arithmétique et numérique, plutôt qu’algébrique et analytique. C’est une erreur. La machine peut arranger et combiner ses quantités numériques exactement comme si elles étaient des lettres ou tout autre symbole ; et en fait, elle pourrait donner ses résultats en notation algébrique, si ses dispositions étaient prévues en conséquence.

Ada Lovelace décrivait avant l’arrivée de l’ordinateur ce que l’on fait couramment avec. Je vais essayer d’expliquer deux idées énoncées : comment un ordinateur peut tout représenter à partir de chiffres, comment un ordinateur fait plus que des opérations arithmétiques pour fonctionner.

Ada Lovelace, précurceuse de l’informatique. Source.

On peut tout représenter avec des chiffres. Par exemple, chaque caractère que nous voyons apparaître sur notre ordinateur a une représentation numérique. Le nombre « 65 » désigne souvent la lettre « A », « 66 » désigne « B » etc. Un simple tableau de correspondance permet de transformer des nombres en caractères. Vous vous demandez peut-être comment fait-on pour compter jusqu’à 65 en binaire ? Dans la vraie vie, nous comptons avec dix chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. C’est le système décimal et nous pouvons compter jusqu’à l’infini avec. On peut tout aussi bien n’utiliser que deux chiffres pour compter jusqu’à l’infini. On dit alors que l’on compte en système binaire. Le tableau suivant donne les représentations décimale et binaire des mêmes nombres :

Décimal Binaire
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
.. ..
65 1000001
66 1000010
.. ..
255 11111111

Ce que l’on peut retenir du système binaire pour un être humain, c’est que c’est infernal à lire et que ça prend beaucoup plus de place sur le papier que le décimal. Pourquoi l’utilise-t-on donc pour l’informatique ? Nos ordinateurs sont basés sur de l’électronique (plutôt que sur l’ADN ou une machine hypothétique). L’électronique gère des signaux électriques, et la manière la plus simple de gérer ces signaux sont :

  • y a pas de courant -> 0 ;
  • y a du courant -> 1.

Votre barrette de mémoire vive est un immense commutateur d’éléments où le courant passe ou ne passe pas. Ces éléments, les bits, ont tous une valeur de « 0 »  ou de « 1 ». Dans les faits la plupart des informaticiens manipulent rarement des chiffres binaires, la machine fait le travail pour nous.

Avec 26 lettres vous pouvez écrire tous les textes possibles en français. Avec des nombres vous pouvez représenter chacune de ces lettres. Avec deux chiffres vous pouvez représenter tous les nombres possibles et imaginables. Avec un « 0 » et un « 1 » vous pouvez représenter tous les caractères, tous les textes possibles en français, en chinois, en tamoul, en russe. Vous pouvez représenter des images, du son…

Si on comprend maintenant que l’ordinateur peut représenter des choses complexes à partir de deux chiffres, l’informaticien est-il lui un être binaire ? Quelqu’un pour qui les choses ne sont que vraies ou fausses ? Mais en fait, que fait un informaticien ? Il écrit des processus permettant de résoudre un problème. On appelle ces processus des algorithmes. Comme le prédisait Lovelace, l’ordinateur ne fait pas que des calculs, il permet de dérouler des algorithmes. Pour vous expliquer plus en avant ce qu’est un algorithme, je ne vais pas vous faire le coup de celui d’Euclide qui force à faire des choses horribles comme des divisions. Un diagramme devrait être suffisant pour comprendre comment un informaticien pense pour écrire un programme. Cet exemple d’XKCD est particulièrement savoureux :

XKCD 627. Source. Désolé, en lisant cette procédure vous êtes devenu un expert aussi performant que moi en support technique informatique, votre vie sera désormais un enfer.

 

 

Toutes les étapes en forme de losange proposent deux branches, on choisit l’une ou l’autre en fonction de si l’assertion est vraie ou fausse. Oui. Ok, à un moment, dans un programme se trouve une intersection avec un choix binaire. Il ne faut pas en retenir que l’informaticien est binaire. Comme disait l’autre, on cherche à rendre les choses simples, pas plus simples. Pour exprimer une procédure de résolution de problème qui puisse être mise en œuvre sur un ordinateur, l’informaticien la découpe en plein de petites tâches, jusqu’à arriver à la plus simple possible un peu comme le font les gnomes de Terry Pratchett :

Pour accomplir une tâche impossible, on la débite en petits bouts de tâches simplement très difficiles, qu’on divise ensuite en tâches horriblement pénibles, qu’on segmente à leur tour en travaux délicats et ainsi de suite.

Donald Knuth au bout de dix ans de travail a réussi a écrire deux logiciels, METAFONT permettant de dessiner des caractères, TeX permettant de composer du texte. Ces deux logiciels permettent de produire des documents imprimés de très haute qualité qui n’ont pas grand chose à envier aux plus beaux ouvrages. Cette réalisation, une des plus étonnantes, impressionnantes, dans l’histoire de l’informatique montre comment un métier aussi complexe que la fonte de caractère, la composition de texte peuvent être entièrement exprimés par des algorithmes, et représentés sur une machine avec des « 0 » et des « 1 ». Dans Digital Typography, Knuth raconte comment il a réalisé qu’il pouvait écrire TeX et METAFONT :

Finalement, je fus frappé par une idée. Ces lettres étaient conçues par des gens. Si je pouvais comprendre ce que les gens avaient dans leurs têtes quand ils les dessinent, alors je pouvais programmer un ordinateur qui porterait les mêmes idées. Plutôt que de copier la forme des lettres, mon nouveau but était de copier l’intelligence sous-jacente à la forme, et d’apprendre cette connaissance à un ordinateur.

Réduire un problème complexe en un ensemble d’éléments simples est une opération longue et compliquée. Je déborde d’admiration pour les gens qui y arrivent, j’aurais aimé pouvoir faire de même plus souvent dans mon travail à l’École nationale des chartes. Cela dit, quand quelqu’un se cache derrière un « c’est plus compliqué que ça », je le soupçonne fortement d’enfumage pour justifier son travail.


Nicolas Legrand

Maîtrise d'histoire, DESS de compétence complémentaire en informatique, six ans à l'École nationale des chartes, trois à l'Observatoire de Paris-Meudon, à la BULAC depuis décembre 2013. Développeur Web, administrateur système et réseau, administrateur de système de gestion de bibliothèque.

More Posts - Website

Follow Me:
LinkedIn

Publié par

Nicolas Legrand

Maîtrise d'histoire, DESS de compétence complémentaire en informatique, six ans à l'École nationale des chartes, trois à l'Observatoire de Paris-Meudon, à la BULAC depuis décembre 2013. Développeur Web, administrateur système et réseau, administrateur de système de gestion de bibliothèque.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *