Le demi-cercle (épisode 20 -- Expérimentation)

Tu arrives seulement à 10 heures, mais tu avais prévenu tout le monde. Jérémie et Farid sont assis chacun à l'une des deux tables qui font face au mur du fond. Sur celle de droite, Jérémie pose ses coudes là où il peut, entre une assiette de muffins, un manuel utilisateur de la v2 d'XXL ouvert à la page 173, et des feutres biseautés fluorescents. Sur celle de gauche, Farid joue avec une longue règle métallique dont il bloque une extrémité sur la table tout en faisant vibrer l'extrémité restée libre.

Audrey est installée au bureau du fond, devant le clavier. Elle dit : - Tu peux arrêter ce bruit, Farid, s'il te plait ? - J'arrête.

Le rétro-projecteur dévide sur le mur un rideau de caractères colorés, cascade interrompue de temps en temps par de grands espaces, au gré des complications d'un module nommeé RG_BudgetControl.

- Stop! Fait Farid. C'est là. - OK, dit Audrey, tout en remontant son curseur à la ligne 1262.

Farid met de côté sa règle métallique et dit : - Ici, je propose qu’on lance la requête et qu’on mette le résultat dans la collection.

Jérémie le reprend d'un ton docte : - Tu veux dire que tu proposes qu’on écrive le code qui permet d'exécuter la requête, puis le code qui permet de ranger les résultats dans la collection. - Arrête de faire ça, ça m’agace. - Je plaisante. - Pas moi.

Audrey : - On n’écrit pas un test d’abord ?

Trois agents sont sur ce chantier qui dure depuis déjà deux jours. Un quatrième descend prestement depuis le toit via la cage d’ascenseur, puis détache son câble de sécurité pour rejoindre ses collègues au milieu de la pièce encore mal éclairée. C’est tout au plus une dizaine de lumières ambrées qui sont posées çà et là, à peine plus puissantes que des bougies d’anniversaire, mais des bougies qui ne s’éteignent pas. On a déplacé trois grandes caisses afin de faire de la place pour le matériel. Il y a une discussion au sujet de la prochaine manœuvre à effectuer: continuer à faire de la place, ou bien recloisonner l’espace déjà conquis sur le désordre ? Bien qu’ils se sachent parfaitement seuls dans ce bâtiment, les agents chuchotent au lieu de parler.

Tu t’assois à côté de Farid. Tu lèves le pouce ostensiblement. Farid et Jérémie lèvent le pouce.

Jérémie prend la direction des opérations : - Va dans la classe RG_BudgetControlTest, et crée un nouveau test. On va enfin avoir une démonstration éclatante de l’utilité d’avoir créé un Repository la semaine dernière.

Farid reprend sa règle. - Alors là je demande à voir. - Ce que tu demandes à voir, c’est du code métier qui ne parle pas le SQL, n’est-ce pas ? - Si tu veux. - Ensuite ? dit Audrey qui attend devant le clavier.

Tu suggères un meilleure nom pour la méthode de test que crée Audrey. L’attention revient sur le code. On met en place le test. On s’entend sur les termes. Farid consulte une copie papier du schéma de la base de données. Jérémie donne des indications à Audrey, tout en faisant distraitement tournoyer la règle au dessus de sa tête. La règle lui échappe et tombe sur le sol. Audrey s’exclame :

- Mais p… rangez cette règle ou je la balance par la fenêtre. - Surtout pas ! Ce serait dangereux, dit Jérémie.

Dans votre dos, la porte s’ouvre. Jean-Bernard passe la tête et vous observe une seconde. Il dit : - Vous êtes encore à faire de la revue ? Ma parole, quand est-ce que vous produisez ?

Jérémie se lève, ramasse la règle et dit : - Ce n’est pas exactement de la revue… - Peu importe ce que c’est, ce n’est pas ce que je m’attends à voir. Le projet est en retard, vous comprenez ça, n’est-ce pas ? En retard !

Silence. Jérémie croise maladroitement les bras autour de la règle comme pour l’empêcher de tomber, mais sans les mains.

Jean-Bernard reprend : - Et quand je vous vois passer tout ce temps à discuter en face de ce mur, je dois dire, ça me rend nerveux… - Ce n’est pas de la discussion, interrompt Farid. - Ah bon, si ce n’est pas de la discussion qu’est-ce que c’est ? Et où en sont les stories 212, 228, 234 ?

De fait, elles ont considérablement avancé.

Audrey suggère : - Ça vaudrait peut être le coup que tu assiste à une session pour comprendre l'avantage, et comparer à la façon de faire de faire habituelle… - Si tu crois que j’ai le temps !

Jérémie et Farid regardent Audrey d’un air de dire : ça va pas, la tête ?

Jean-Bernard, en vous dévisageant tour à tour, s'exclame : - Mais vous non plus vous n’avez pas le temps ! Vous faites de la sur-qualité, là. Redéployez-vous.

Il s'en va et referme la porte derrière lui. Audrey pousse le clavier devant elle, se lève, se dirige vers le portemanteau, fouille dans la poche de son manteau rouge, en sort un paquet de tabac, et dit avant de sortir à son tour : - Je fais une pause.

Deux heures plus tard, au restaurant du coin de la rue, l'heure de déjeuner s'écoule bruyamment devant une quiche/salade. Jérémie : Ce qu'il faudrait c'est convaincre JB de nous laisser continuer à bosser en équipe. Farid : Pour ça il faudrait qu'on ait de quoi le convaincre. Audrey : Je n'en reviens pas. Je pensais qu'il était OK avec l'approche. Toi : Il a même accéléré ma demande de projecteur. Jérémie : Je pense qu'il n’aura plus rien à redire sur ce qu’on fait, quand il aura la preuve que ça marche ! Toi : Mais pour lui fournir cette preuve il nous faut un peu plus de temps. Audrey : Je me demande si ça changera quoi que ce soit. Jérémie : On n'a qu'à lui fournir un échantillon. Farid : Qu'est-ce que tu veux dire, par un échantillon ? Jérémie : Ce qui préoccupe Jean-Bernard, c'est qu'il nous voit tenir des réunions au lieu de coder. À nous de lui montrer que ces réunions, justement, ça consiste à coder. Et que ça permet de coder plus vite et mieux que si on n'était pas en réunion. Farid : OK, mais qu’est-ce qui tu appelles un échantillon ? Jérémie : Un projet tout simple, du genre qui peut se réaliser en une heure de programmation. On se met chacun à notre poste et on réalise cette tâche chacun de notre côté. Toi : Oui, et ensuite ? Jérémie : Ensuite, on prend un autre projet tout simple, de la même taille, et on le réalise en équipe. Ensuite, on compare les résultats, et on les montre à Jean-Bernard. Farid : Mais si les résultats ne sont pas convaincants ? Jérémie : Dans ce cas on laisse tomber. Farid : Et tu veux faire ça quand ? Jérémie : Cette après-midi, par exemple. Audrey : OK pour moi. Farid : Et si ça ne démontre rien, on aura gâché une après-midi… Audrey : Sans blague. On n’a d’autres sources de gâchis si ça t’intéresse… Farid : Non, mais reconnais qu’on est pas en avance ! Audrey : Farid, combien de temps on a passé à corriger des bugs cette semaine ? Farid : Je ne sais pas, mais justement… Audrey : Voilà. Tu ne sais pas. Jérémie : Ce serait facile de le mesurer. Il suffirait de noter tout ce que vous faites. Audrey : Ah oui, tu trouves ça facile, toi ? Tu connais beaucoup de développeurs qui font ça ? Toi : Jérémie, où est-ce qu’on va trouver un projet d’une heure ? Jérémie : Deux projets d’une heure. Toi : Où ? Jérémie : Facile : sur un juge en ligne. Farid : Un juge en ligne ? Mais oui ! Audrey : Qu’est-ce c’est qu’un juge en ligne ?

14 heures. Vous vous installez chacun à votre poste de travail. Jérémie fait afficher sur le mur l'énoncé suivant:

_Votre tâche est d'écrire un programme qui effectue un encodage run-length simplifié conforme aux règles suivantes:

Règles d'encodage run-length Toute séquence de 2 à 9 caractères identiques est encodée par deux caractères. Le premier caractère est la longueur de la séquence, représentée par un des caractères 2 à 9. Le second caractère est la valeur du caractère qui est répété. Une séquence de plus de 9 caractères identiques est traitée en encodant d'abord 9 caractères, puis ceux qui restent.

Toute séquence de caractère qui ne contient aucune répétition de caractère est représentée par un caractère 1 suivi de la séquence de caractères, terminée par un autre 1. Si un 1 apparaît comme faisant partie de la séquence, il est échappé avec un 1, et ainsi deux caractères 1 sont affichés.

Spécification des entrées L'entrée est constituée de lettres (minuscules et majuscules), chiffres, espaces, et ponctuations. Chaque ligne se termine par un caractère de fin de ligne.

Spécification des sorties Chaque ligne en entrée est encodée séparément tel que décrit ci-dessus. Le caractère de fin de ligne à la fin de chaque ligne n'est pas encodé, mais est passé directement à la sortie._

Exemple d'entrée AAAAAABCCCC 12344

Exemple de sortie 6A1B14C 11123124

Audrey : Je vois, j'en ai fait à la fac, du run-length encoding. Farid : Moi aussi, mais alors c'est un vieux souvenir. Toi : Vous avez de la chance. Moi ça ne me dit rien. Jérémie : Je propose qu'on discute de la spéc' avant de commencer. Toi : Je suis d'accord ! Farid : Donc, on a une heure pour coder ce truc ? Jérémie : Et ensuite, on programmera, en demi-cercle, le décodage :

_Votre tâche est d'écrire un programme qui décode une séquence de caractères qui a été encodée selon une forme simplifiée d'encodage run-length, telle que décrite par les règles ci-dessus.

Entrée Chaque ligne est constituée de lettres (minuscules et majuscules), de chiffres, d'espaces, de ponctuations, et se termine par un caractère de fin de ligne. Vous pouvez assumer que chaque ligne est un encodage valide d'une séquence quelconque de caractères.

Sortie Pour chaque ligne dans l'entrée, afficher une ligne contenant la séquence de caractères décodée.

Exemple Entrée: 9A1ABC131 1112 3124 1112111

Sortie: AAAAAAAAAABC111 12 344 121_

Vous discutez quelques minutes, le temps d'éclaircir quelques aspects particulièrement piégeux du problème. Après quoi Jérémie annonce :

- C'est parti !

(à suivre) Episodes Précédents : 1 -- Si le code pouvait parler 2 -- Voir / Avancer 3 -- Communication Breakdown 4 -- Driver / Navigator 5 -- Brown Bag Lunch 6 -- Conseils à emporter 7 -- Crise / Opportunité 8 -- Le Cinquième Étage 9 -- Que faire ? 10 -- Soit... Soit... 11 -- Boîtes et Flêches 12 -- Le prochain Copil 13 -- La Faille 14 -- Poussière 15 -- L'hypothèse et la Règle 16 - Déplacements 17 -- Jouer et ranger 18 -- Arrangements 19 -- Mise au point