vendredi 23 janvier 2009

Analogie entre la bureaucratie moderne et un cours de programmation informatique

Dans le film L'Auberge Espagnole de Cédric Klapisch, Xavier, le protagoniste principal, dit au début quelque chose qui ressemble à : "Je ne comprends pas comment le monde est devenu un tel bordel."
Il va passer une entrevue, se présente au building d'une imposante entreprise économique dont les activités exactes restent vagues. Pour faire court, il s'adresse à la secrétaire à l'entrée, qui le redirige vers un autre bâtiment, où il est reçu par une autre secrétaire, qui lui indique le bon étage, où il rencontre une troisième secrétaire, qui lui fait traverser une bonne dizaine de couloirs bondés de portes de bureaux, avant d'arriver à l'officine qui les intéresse, où une autre secrétaire présente finalement Xavier à la personne qui lui fera passer son entrevue. Le tout en fast-motion pour nous éviter la demi-heure que ç'aurait réellement duré.
Bref, la maison qui rend fou.

J'ai concocté une anaglogie intéressante pour illustrer ce bordel et comment il est devenu ce qu'il est.

Je me rappelle mes cours de programmation au Cégep. On commence tout en douceur : en apprenant comment se faire afficher du texte à l'écran.

print "Hello World !"

Puis le cours suivant, on apprend à poser des conditions.

if ($x==1) { print "Hello World !" }

Puis on s'amuse à poser plusieurs conditions.

if ($x==1) { print "Hello World !" }
else if ($x==2) { print "Hola Mundo !" }
else if ($x==3) { print "Bonjour Monde !" }

Mais le cours d'après, on apprend qu'il est inutilement long de programmer de cette façon, on apprend donc des méthodes plus ergonomiques d'arriver au même résultat. On garde notre ancien code dans un coin pour ne pas l'oublier, on le met en commentaire pour le rendre inactif, et on rajoute à sa suite la réelle instruction.

switch ($x) {
case 1 : print "Hello World !"; break;
case 2 : print "Hola Mundo !"; break;
case 3 : print "Bonjour Monde !"; break;
}

Par la suite on apprend à gérer plusieurs variables, mais ultimement on se rend vite compte qu'il est nécessaire de les classer en tableaux. Ces tableaux se complexifient, deviennent dses tableaux dans des tableaux.

$x = array(
'chiffres' => array(
'premiers' => array('un','deux','trois','cinq','sept'),
'non-premiers' => array('quatre','six','huit','neuf'),
),
'fruits_legumes' => array(
'fruits' => array('pomme','banane','ananas','poire'),
'legumes' => array('concombre','carotte','patate'),
),
'mots_sans_rapport' => array(
'fbb' => array('foo','bar','baz'),
'autres' => array('blah','flih','zeek'),
),
);

Notez que je m'amuse.
Mais alors l'arrivée de ces nouvelles variables en tableaux nous oblige à revoir toutes nos conditions précédentes, qui doivent non plus aller chercher $x, mais $x[$category][$subtype]. Et à cette fin il faudra évidemment trouver un moyen de définir $category et $subtype, probablement par des formulaires qui se trouvent dans un autre fichier qui sera inclus à celui sur lequel on travaille.
Mais assez d'exemples. Je voulais que vous ayez une idée visuelle de l'évolution du code en complexité. Le fait est que comme on parle ici d'un cours pas à pas pour débutant, tout ce qui a été fait précédemment a été conservé quelque part, dans un coin où il ne dérangeait pas, même s'il était désormais parfaitement inutile. On va raboter des bouts de code les uns à la suite des autres, afin d'explorer les possibilités, et finalement à la fin de la session, on se retrouve avec un programme que certains motivés pourraient réécrire pour donner le même résultat en, environ, dix lignes de code. Cependant, le code ressemblerait un peu à ceci :

function display_content() {
global $section, $contenu;
if (isset($_GET['showImg']) && $_GET['showImg'] != '') {
print '‹div id="content" lang="fr-CA"›‹div class="displayImg"›‹img src="images/images/' . $section . '/' . $_GET['showImg'] . '.png" /›‹/div›';
} else if (file_exists($contenu)) {
$openFile = file($contenu);
foreach ($openFile as $line_num =› $line) { print format_line($line); }
} else {
include('contenu/error.php');
}
}

Avouez que ç'a l'air simple.

Pour revenir à mon propos principal, maintenant que je me suis bien amusé... Voici où en est la bureaucratie moderne, dans ma tête. Un bordel de rabotage de bouts de code. La fonction décrite ci-dessus, le gouvernement et les grandes compagnies sont bien capables de l'exécuter, mais en 60 lignes de code au lieu de dix. Parce que le code n'a pas été vérifié, optimisé, nettoyé.
On en est peut-être là, ou peut-être pas encore, mais on le sera ; au point où il faudra revoir les structures en place, et comprendre comment on peut arriver au même résultat avec six fois moins de commandes. Peut-être devrons-nous faire table rase et tout reprendre du début avec des connaissances plus avancées, ce qui irait logiquement plus vite mais ferait temporairement sombrer le monde dans un Dark Age dont personne ne veut. Ou alors, scénario plus probable, il nous faudra encore des siècles pour optimiser un petit bout de code à la fois jusqu'à obtenir un résultat raisonnable. Mais rendu là, un nouveau langage plus optimisé, plus puissant et plus solide aura fait son apparition.
Bref, on sera toujours dans la merde.

Il y a trois manières de voir les choses. Du plus chouette au plus décourageant, la liste va dans cet ordre : l'optimisme, le pessimisme, et le réalisme.

Aucun commentaire:

Enregistrer un commentaire