Magazine

Article de fond: La boucle assurance (T)

Publié le 17 avril 2008 par Wtf

"Alors que pensez-vous de mon offre" demanda le recruteur de Ben. Il y avait réfléchi depuis quelque temps. Ce n'était pas exactement ce qu'il cherchait mais bon, il était sans emploi depuis novembre 89 - presque trois mois entiers -  et pensa qu'il devrait probablement se remettre aux choses sérieuses. Il dit au recruteur qu'il souhaiterait parler au client et lui demanda de programmer un rendez-vous pour la semaine suivante."

"En fait..." répondit le recruteur, "ils ont besoin de quelqu'un dès que possible. Peux-tu les rencontrer plus tôt, cet après-midi par exemple".

Heureusement, Ben s'était non seulement lavé mais aussi rasé ce jour-ci. Il accepta donc l'entretien et deux petites heures plus tard, Ben arrivait à la société pour rencontrer Wayne, le développeur en chef.

"Merci de venir si vite", commença Wayne, "Le précédent sur le poste est parti si soudainement. Je vois que vous avez été chez Initech quelques mois, qu'avez-vous fait la bas?"


"J'étais dans le dévelo-"
Wayle le coupa. "Ok, donc vous avez travaillé en assembleur avant?"
"Oui, en fait, sur le dernier proj-"
Wayle le coupa de nouveau. "êtes vous familier avec la programmation multi-tâche?"
Alors que Ben se lançait dans des explications sur le développement multi-tâche des années 90, il remarqua que Wayne avait déplacé son attention sur son bloc notes. Tout en faisant d'occasionnels "hum hum" d'affirmation, Wayne commença à écrire quelques notes.
"Ca me semble bien", interrompit Wayne encore, "Maintenant jetez un coup d'œil à ce code. Dites moi ce qui cloche avec".
Wayne pris le bloc note où il était manuscrit un code en C.
int i;
char *p = 0x10000;
for (i = 0; i < 1000000;i++)
{
*p++ = 0;
}
Ben lui montra le dépassement de capacité de l' integer et ajouta, "Mais dans tout les cas j'utiliserai simplement memset."
"Super" dit Wayne , "Vous avez le job ! Pouvez-vous commencer maintenant?"
"Je pense" Répondit Ben un peu confus. Il était 15h03 - exactement trois minutes après le début de l'entretien - et Ben n'avait rien prévu d'autre pour l'après midi. "Et bien ... allons-y !"
"Parfait" Dit Wayne enthousiaste. "Ok, donc tout d'abord laisse moi te dire que ce sera le job le plus facile que tu n'aies jamais fait. Vraiment, on n'a pas trop besoin d'aide supplémentaire mais depuis le départ du prestataire, on recherche quelqu'un pour combler le trou, tu sais comment ça marche."
Wayne continua puis se tut pendant un bref moment. "J'ai mis en place la règle des 80/20 ici. Tu en as déjà entendu parler avant?"
Wayne ne laissa pas à Ben une chance de répondre, "Rien - et je dis bien rien - en informatique ne prend moins que 80 heures, et quoique tu puisses penser combien de temps ça prendra, multiplie le par 20, et dis ça à son manager. Tu vois, 80/20".
Ce n'était pas vraiment la règle des 80/20 que Ben connaissait mais il pensait que chacun devait avoir la sienne. Après avoir parcouru quelques autres "règles" du service développement, Wayne expliqua à Ben ce sur quoi il allait travailler.
C'était une application logistique plutôt ennuyeuse qui tournait dans le MTWS maison, ou plutôt : Multi-Tasking Windowing System. Bien que Microsoft Windows 2.11 était présent sur le marché depuis un petit bout de temps, personne dans la société ne semblait y croire, cela explique pourquoi ils avaient développé leur propre solution.
C'est Wayne qui avait conçu et développé MTWS. C'était un gestionnaire de fenêtres basé sur Ms DOS qui utilisait des caractères ascii pour afficher des "fenêtres". Chaque fenêtre pouvait héberger une des quatre applications différentes (dont une serait à la charge de Ben), et permettait le dragging, le recadrage et les communications inter fenêtres.
Après avoir regardé brièvement le MTWS et l'application de logistique, Ben rentra chez lui pour la journée et revint le lendemain tôt pour être prêt à commencer. Les jours qui suivirent furent plutôt calmes, tout comme les semaines et les mois qui suivirent.
Sous la direction de Wayne, Ben passait une heure par jour à effectuer de la maintenance ou quelques petits changement sur l'application qu'on lui avait assigné, et le reste de la journée à se tourner les pouces.
Avec tout ce temps libre et sans internet pour surfer, Ben passa son temps à fouiller dans les entrailles de MTWS. C'était du code C plutôt bien commenté et bien structuré qui avait des assemblies disséminées ici et là. Un jour, alors qu'il parcourait le sous système graphique, il remarqua une petite boucle ensevelie dans le code ...
for(i=0;i<1000000;i++) {;}

Il apparut que cette boucle tournait quelque soit l'action demandée. Il revérifia et comprit que effectivement cette boucle était effectuée à chaque mise à jour de l'écran.
Pensant qu'il avait trouvé un bug ou un vestige de bout de code, Ben demanda à Wayne ce qu'il devait faire.
"Ha," gloussa Wayne. "Ceci, mon ami est ce que l'on appelle une 'boucle accélératrice'. Nous la considérons comme ... une assurance"
Ben secoua la tête, essayant de comprendre comment il avait pu passer à coté, c'était encore une technique pour s'affranchir du travail.
"L'idée," continua Wayne, " c'est que à tout moment nous pouvons avoir des semaines de travail calmes - tu sais, le genre où tu n'as pas vraiment de bug à corriger ou de changements à faire - et bien, on enlève juste un de ces zéro dans la boucle. Ensuite on dit à la direction que on a eu des problèmes de vitesse avec le dernier changement demandé et que, après beaucoup d'optimisations très compliquées, nous avons été en mesure d'accélérer le système de façon significative et que l'on devrait être capable de commencer les demandes de changement la semaine prochaine".
"Tu vois", dit Wayne après avoir marqué une brève pause, "une assurance".

Retour à La Une de Logo Paperblog

A propos de l’auteur


Wtf 169 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte