Ce mois-ci j'ai eu le plaisir de récolter des haricots verts. A cette occasion, je me suis rendu compte que ma méthode de récolte se rapproche de ma façon de développer un logiciel.
Pour récolter les haricots verts, j'utilise en général un sac ou un saladier pour poser régulièrement les haricots. Je ne pose pas les haricots dans le récipient un par un, ce serait trop long. Au contraire, je pose le saladier ou le sac pas loin de moi et j'avance sur un rang.
D'une main j'écarte les feuilles pour chercher les haricots à cueillir, de l'autre je tiens ceux que j'ai cueillis mais que je n'ai pas encore posés dans le récipient. La première main saisit également les haricots pour les poser dans la deuxième main.
Le point important est celui-ci: mon attention est dirigée vers la recherche d'un haricot à cueillir. Dès que j'en vois un, je le saisis. Mais au moment où je le saisis, voire même lorsque je sens que je vais m'en saisir, que c'est gagné, mon attention quitte ce haricot pour en chercher un autre. Le mouvement de cueillette du haricot, en tirant fermement dessus puis en le déposant dans mon autre main, occupe mes mains mais pas ma vision.
Au bout d'un moment, le tas dans la main qui tient les haricots cueillis devient assez important. La raison voudrait qu'à ce moment-là j'aille déposer ce tas dans le récipient à proximité. Cependant, je tarde souvent à le faire, au risque de faire tomber de ma main le tas déjà cueilli. En effet, je suis absorbé par la recherche du haricot suivant, puis encore du suivant, comme si je suivais une piste ou une idée. S'arrêter à ce moment-là me ferait perdre le fil de ma recherche.
L'expérience m'a appris que parfois, dans le mélange des feuilles des rangs plantés trop près les uns des autres, quitter des yeux un haricot, c'est le perdre, au moins temporairement. Il faut souvent le rechercher, redistinguer sa silhouette verte parmi les feuilles et tiges vertes également.
Arrive toujours un moment où il faut quand même déposer le tas cueilli dans le récipient, c'est-à-dire s'interrompre, interrompre le fil de sa recherche et repartir avec une main vide. C'est le moment d'essayer de me rappeler où j'en étais, quelles branches j'ai déjà soulevées, quels endroits j'ai déjà explorés, éventuellement reconnaître un endroit déjà examiné et me dire "ah oui c'est là que j'en étais".
L'analogie avec l'activité de développement logiciel est évidente: avoir une idée, et lorsqu'on la tient, qu'on saisit la solution, alors même qu'on l'implémente, penser déjà à la suite, aux impacts que les modifications ont sur d'autres parties du code, faire ces modifications tandis que surgissent déjà d'autres idées à suivre, à poursuivre. C'est le moment où on est concentré, on est "dedans", le temps aura passé quand on relèvera la tête. C'est un moment de plaisir, le plaisir d'apprendre et de construire. L'amateur est heureux.
Mais déjà une petite voix, peut-être l'artisan, commence à se faire entendre: Cela fait longtemps qu'il n'y a pas eu de commit, des détails sont laissés de côté, tout cela manque de rigueur. La raison commanderait de s'arrêter pour faire un peu de ménage, ajouter quelques tests, quelques commentaires. La raison commenderait de déposer les haricots dans le saladier. Sinon tout ce qui a été fait pourrait bien être à refaire à cause d'un détail oublié dans la poursuite. Il serait dommage de faire tomber le tas de haricots.
Cette tension entre d'une part la poursuite d'une idée, d'une idéalité, et d'autre part la raison et la sécurité, c'est ce qui définit le rythme du développeur, de la même façon que le rythme de la cueillette des haricots verts.
Si l'on n'aime pas les haricots verts, même ceux du jardin, on pourra penser à la cueillette des champignons: En cherchant les champignons, on peut vite s'aloigner du panier et se perdre dans la forêt.