Tout d’abord, le joueur de Lego dispose dès le départ de l’ensemble des briques qui lui seront nécessaires pour réaliser sa construction.

Le développeur n’a lui aucune idée précise du nombre et de la nature des briques qui lui seront nécessaires pour la réalisation de son programme et cela jusqu’à son achèvement complet.

Et dans le pire des cas, les briques dont il va avoir besoin n’existent même pas.

Le joueur de Lego dispose de plus d’une notice figée qui lui explique précisément étape par étape ce qu’il doit faire pour construire correctement son modèle.

Il peut donc ainsi estimer de manière fiable la somme de travail qu’il doit accomplir et le temps qu’il doit passer pour parvenir au résultat escompté.

Le développeur n’a pas cette chance, puisqu’il ne dispose dans le meilleur des cas que du mode d’emploi plus ou moins précis et à jour de chacune des briques qu’il sera amené à utiliser et d’un « cahier des charges » qui lui explique plus ou moins grossièrement ce que doit faire son programme.

Enfin, dans une boite de Lego, les briques n’évoluent pas au cours du temps et le modèle qu’elles permettent de construire reste identique à jamais.

Dans le monde du logiciel, les briques évoluent en permanence, tout comme le modèle qui doit être construit, le tout évidemment indépendamment de la volonté du développeur.

LEGO Minecraft par Dunechaser

Bref, en dépit du fait que la programmation orientée objet permet en théorie au développeur de jouer au Lego avec le code, lorsqu’on lui demande d’estimer le temps qu’il va mettre à concevoir un programme, c’est exactement comme demander à un joueur de Lego de construire un modèle polymorphe à l’aide de briques changeant de forme indépendamment de sa volonté et grâce à une notice incomplète susceptible d’évoluer au cours du temps qu’il ne peut consulter qu’à travers un télescope atteint de myopie.

Alors, si vous êtes développeur, un peu joueur, et qu’un jour, une personne vous demande le temps qu’il vous faut pour écrire un « programme », je vous encourage à tenter l'expérience suivante :

  1. Achetez au moins deux boites de Lego suffisamment grosse pour avoir beaucoup de briques.
  2. Mélangez les briques de toutes les boites.
  3. Mettez de côté 50 % des briques.
  4. Découpez chaque étape de chaque notice.
  5. Mettez de côté 50 % de ces étapes.
  6. Assemblez les étapes restantes dans un ordre aléatoire afin de composer une nouvelle notice.
  7. Expliquez à la personne que vous allez toutes les cinq minutes remplacer 30 % de ses briques par d’autres briques prises parmi celles que vous avez mises de côté précédemment.
  8. Expliquez à la personne que vous allez toutes les deux minutes remplacer une ou plusieurs étapes de la notice par une ou plusieurs étapes prises parmi celles que vous avez mises de côté précédemment.
  9. Scotchez la notice sur un mur au minimum à trois mètres de la personne.
  10. Enfin, demandez à la personne de vous dire en combien de temps elle s'estime capable de construire le modèle de l’une des boites.
  11. Si vous êtes sarcastique, ajoutez qu'il ne s'agit que de quelques briques en plastique à assembler et que si jamais elle se trompe dans son estimation, cela aura de graves conséquences.

Je pense que vous jubilerez en entendant sa réponse, et avec un peu de chance, elle aura compris qu'il vous est impossible de répondre à cette question d'une manière fiable.