Il devait être tard quand j'ai fermé le laptop. Le bug était toujours là, intact, pas plus résolu qu'au début de la soirée. J'avais tourné autour pendant des heures, changé une condition, puis une autre, relancé les tests, regardé les logs défiler sans rien y comprendre de neuf. À un moment, j'ai arrêté. Pas parce que j'avais trouvé quelque chose. Juste parce que continuer ne servait plus à rien.
Je suis allé me coucher avec le problème encore ouvert dans la tête, comme un onglet qu'on oublie de fermer. Je l'ai retourné sous la couette, les mêmes variables, le même chemin dans le code, jusqu'à ce que le sommeil prenne le dessus sans que je m'en rende compte.
Le lendemain matin, je suis retourné à l'écran et j'ai tapé la correction presque sans réfléchir. Elle est passée du premier coup.
Ce n'était pas la première fois. Depuis un moment, j'ai pris l'habitude de débugger juste avant de dormir plutôt que juste avant de passer à autre chose. Je laisse le problème ouvert, je vais me coucher, et le matin je teste la solution qui m'est venue, parfois sans même me souvenir d'y avoir pensé consciemment. Dans la grande majorité des cas, ça marche.
Rendu là, je me suis dit que ce n'était plus vraiment un hasard.
Je ne suis pas le seul à qui ça arrive, et quelqu'un l'a même mesuré. Une chercheuse de Harvard, Deirdre Barrett, a fait l'expérience avec ses étudiants: elle leur demandait de se concentrer sur un problème non résolu, un devoir qu'ils n'arrivaient pas à finir par exemple, et de le garder en tête juste avant de s'endormir, chaque soir pendant une semaine. Résultat: dans environ deux tiers des cas, les étudiants faisaient un rêve qui touchait au problème. Dans un tiers des cas, le rêve menait carrément à une solution jugée valable, pas juste par le rêveur lui-même mais par quelqu'un d'extérieur qui évaluait le résultat sans savoir d'où il venait. D'après l'article Wikipédia sur l'incubation de rêve
Ce que décrit Barrett porte un nom: l'incubation de rêve. Concrètement, ça consiste à se concentrer volontairement sur un problème précis avant de dormir, dans l'espoir que le rêve s'en empare et en fasse quelque chose. Si le problème se prête à une image, on est censé garder cette image en tête jusqu'à l'endormissement. Pour un problème de code, ça pourrait être l'écran ouvert sur la fonction qui coince.
Ce n'est pas une idée neuve. Dans la Grèce et la Rome antiques, des gens allaient dormir dans des lieux considérés comme sacrés, dans l'espoir de recevoir un rêve guérisseur ou inspiré par les dieux. Aristote lui-même mentionne une tradition sarde qui consistait à dormir à côté des tombeaux des héros. Même source
Sur un vieux fil de Hacker News posté en 2017, quelqu'un décrivait faire ça depuis trente ans. Il éteignait son ordinateur plusieurs heures avant de dormir, relisait du code imprimé au marqueur rouge juste avant de se coucher, et se réveillait parfois en pleine nuit pour noter une idée qui venait de surgir. Il appelait ça un cadeau plutôt qu'un problème, et disait ne pas pouvoir imaginer accomplir tout ce qu'il faisait sans ça. Le fil original
Tout le monde ne vit pas la chose comme un cadeau, remarquez. Un développeur racontait une nuit où un bug particulièrement coriace l'avait suivi jusque dans son sommeil, au point où il n'arrivait plus à distinguer le rêve de l'état de veille. Il se réveillait convaincu d'avoir trouvé la solution, se rendait compte qu'il rêvait encore, se rendormait, recommençait. Il raconte ça ici
Je ne sais pas ce qui se passe exactement pendant ces heures-là. Si c'est le cerveau qui continue vraiment de chercher en arrière-plan pendant que je dors, ou si c'est simplement que le matin, la tête reposée, je vois enfin ce qui était là depuis le début et que la fatigue de la veille m'empêchait de voir. Je continue de fermer le laptop avec le bug encore ouvert, et d'aller dormir dessus.



