Vous avez juste visité la page d'accueil de Google.
Simple, n'est-ce pas ? Mais que s'est-il réellement passé ?

Eh bien, quand vous savez un peu comment fonctionnent les navigateurs, les choses ne sont pas si simples. Vous venez de mettre en jeu HTTP, HTML, CSS, ECMAScript, et plus encore. Ce sont des technologies extrêmement complexes qui donnent mal à la tête des techniciens lorsqu'ils y réfléchissent trop, au point qu'aucune entreprise ne peut faire face à toute cette complexité.

Simplifions.

Vous venez de connecter votre ordinateur à www.google.com.
Simple, n'est-ce pas ? Mais que s'est-il réellement passé ?

Eh bien, quand vous savez un peu comment fonctionnent les réseaux informatiques, les choses ne sont pas si simples. Vous venez de mettre en jeu DNS, TCP, UDP, IP, Wifi, Ethernet, DOCSIS, OC, SONET, et plus encore. Ce sont des technologies extrêmement complexes qui donnent mal à la tête des techniciens lorsqu'ils y réfléchissent trop, au point qu'aucune entreprise ne peut faire face à toute cette complexité.

Simplifions.

Vous venez de taper www.google.com dans la barre d'adresse de votre navigateur.
Simple, n'est-ce pas ? Mais que s'est-il réellement passé ?

Eh bien, quand vous savez un peu comment fonctionnent les systèmes d'exploitation, les choses ne sont pas si simples. Vous venez de mettre en jeu un noyau, un USB host stack, un répartiteur d'entrée, un gestionnaire d'événements, un font-hinter, un tramage de sous-pixel, un système de fenêtrage, un pilote graphique, chacun écrits dans un langage de haut niveau qui sera exécuté par les compilateurs, éditeurs de liens optimiseurs, les interprètes, et plus encore. Ce sont des technologies extrêmement complexes qui donnent mal à la tête des techniciens lorsqu'ils y réfléchissent trop, au point qu'aucune entreprise ne peut faire face à toute cette complexité.

Simplifions.

Vous venez d'appuyer sur une touche de votre clavier.
Simple, n'est-ce pas ? Mais que s'est-il réellement passé ?

Eh bien, quand vous savez un peu comment fonctionnent les périphériques d'exploitation, les choses ne sont pas si simples. Vous venez de mettre en jeu un régulateur de puissance, un debouncer, un multiplexeur d'entrée, une pile de périphériques USB, une pile de hub USB, tout cela mis en œuvre dans une seule puce. Cette puce est construite autour de fines tranches de silicium monocristallin, dopée avec des quantités minimes d'autres atomes soufflés au sein même de la structure cristalline, interconnectée avec plusieurs couches d'aluminium ou de cuivre, qui sont déposés par lumière ultraviolette selon des motifs de haute énergie avec une précision d'une fraction de micron, reliée à l'extérieur par l'intermédiaire de minces fils d'or, le tout à l'intérieur d'un emballage constitué d'une résine stable thermiquement et dimensionnellement. Les motifs et les interconnexions créent des transistors, qui sont regroupées pour créer des portes logiques. Dans certaines parties de la puce, les portes logiques sont combinées pour créer des fonctions arithmétiques et binaires, qui sont combinées pour créer une unité de logique arithmétique. Dans une autre partie de la puce, les portes logiques sont combinées en boucles bistables, qui sont alignées en rangées, qui sont combinées avec des sélecteurs afin de créer une banque de registres. Dans une autre partie de la puce, les portes logiques sont combinées en contrôleurs de bus et en décodeurs d'instruction microcode pour réaliser un planificateur d'exécution. Dans une autre partie de la puce, elles sont combinées en multiplexers d'adresses et de données avec une horloge interne pour créer un contrôleur de mémoire. Et ce n'est pas tout. Ce sont des technologies extrêmement complexes qui donnent mal à la tête des techniciens lorsqu'ils y réfléchissent trop, au point qu'aucune entreprise ne peut faire face à toute cette complexité.

Peut-on simplifier davantage ?

Malheureusement, non, on ne peut pas. Nous pouvons à peine comprendre la complexité d'une seule puce dans un clavier d'ordinateur, et pourtant il n'y a pas de niveau plus simple. La prochaine étape nous emmène au logiciel qui est utilisé pour concevoir la logique de la puce, et ce logiciel est lui-même tellement complexe qu'il impose de faire abstraction des couches inférieures.

Une fois que vous commencez à comprendre comment nos appareils modernes fonctionnent et comment ils ont été créés, il est impossible de ne pas s'émerveiller que cette technologie fonctionne, alors que la loi de Murphy nous assure que cela devrait rester un assemblage inerte de silicium.

Pour les non-techniciens, tout cela est une boîte noire. La technologie peut être fière d'elle : toutes ces couches de complexité sont entièrement cachées et l'utilisateur lambda peut les utiliser sans même savoir qu'elles existent.
Pour cela, beaucoup de gens trouvent les ordinateurs très frustrants à l'utilisation : tellement de choses peuvent éventuellement mal se passer que certaines finiront inévitablement par arriver. Le paradoxe ? La majorité de cette complexité n'est présente que dans un seul but : masquer la complexité, pour simplifier le travail sur les couches supérieures.

Oh, et tout ce qui est décrit ici ne couvre que l'affichage d'une simple page Google. Souvenez-vous de tout cela la prochaine fois que votre souris mettra un peu trop de temps à votre goût pour se déplacer à l'écran, dans un système qui fait tourner des dizaines d'applications en même temps.

Comment fonctionne la programmation ?