
Le curseur clignote sur la même ligne depuis un bon moment, immobile, pendant que rien d'autre ne bouge dans l'appartement. J'apprends Python en autodidacte, le soir, à Clermont-Ferrand, et ce genre de blocage — l'écran qui refuse obstinément de faire ce que je veux — revient plus souvent que je ne l'avoue à qui que ce soit. Déboguer, pour une débutante comme moi, n'est pas une compétence qu'on acquiert d'un coup: c'est une suite de petites patiences apprises une erreur après l'autre, dans un apprentissage resté entièrement autonome, sans personne pour relire par-dessus mon épaule. Autour de moi, les repères habituels: le vieux portable qui chauffe un peu trop vite, la tasse de tisane qu'on oublie de boire, le cahier à spirale couvert de flèches et de post-its illisibles le lendemain, tout ça sous le plafonnier jaune de la cuisine — toujours pas de bureau, et je ne suis pas certaine d'en vouloir un.
Regarder des tutoriels ne suffit pas
Pendant plusieurs semaines, j'ai cru qu'il suffisait de regarder des tutoriels vidéo en soirée, sans même ouvrir l'ordinateur à côté, pour que les notions finissent par rentrer toutes seules. Ça n'a jamais fonctionné. Je hochais la tête devant l'écran, convaincue de suivre chaque étape, puis je me retrouvais incapable de reproduire le moindre bout de script une fois la vidéo terminée. Depuis, je n'apprends plus rien sans un clavier sous les doigts en même temps, même si ça veut dire suivre une explication à moitié en tapant maladroitement à côté.
Mon collègue de bureau, Valérian, m'a encore envoyé aujourd'hui un mème informatique qu'il ne comprend visiblement qu'à moitié lui-même — il ne code pas une ligne, mais il adore me charrier sur mes soirées passées devant des messages d'erreur. Ça m'a fait sourire une minute avant de retourner à mon script qui plantait encore.

Ma salière, mon astuce de débogage improvisée
Faute de canard en plastique — la méthode dont tout le monde parle sur les forums de développeurs — j'ai pris ce que j'avais sous la main: ma salière. Le principe reste le même: expliquer à voix haute et dans le détail ce que le code est censé faire, à un objet qui ne répondra jamais. Il m'arrive d'aller consulter la documentation quand une fonction m'échappe totalement, ou de comparer avec un exemple simple trouvé en ligne avant de reprendre la conversation avec ma salière.
En forçant mon cerveau à verbaliser ce que j'ai réellement écrit, et non ce que je crois avoir écrit, je repère presque toujours l'endroit où je divague. « Alors, ma petite salière, je demande à l'utilisateur de taper son nom avec la fonction input, et c'est précisément là que ça coince » — c'est comme ça que j'ai fini par trouver deux points manquants à la fin d'un if, une erreur qu'on ne voit jamais tant qu'on relit son code dans sa tête plutôt qu'à voix haute. J'avais d'ailleurs raconté ailleurs comment utiliser la fonction input python pour créer un programme interactif, et c'est justement dans ce genre de script que les erreurs aiment se cacher. Le message d'erreur, même quand il s'étale sur plusieurs lignes intimidantes, cache presque toujours l'explication utile tout au fond.

Chaque bug a fini par ressembler à un autre
Il y a eu la fois où une liste censée contenir mes courses m'a renvoyé une erreur d'index parce que je comptais à partir de un au lieu de zéro, la fois où une variable que je croyais être un nombre s'est révélée être du texte et refusait tout net de s'additionner à autre chose, la fois où un dictionnaire ne retrouvait jamais la clé que je cherchais à cause d'un accent oublié, et la fois, plus récente, où j'ai commencé à entourer mes lignes les plus fragiles d'un bloc try/except plutôt que de laisser le programme s'écrouler d'un seul coup. Il y a aussi eu ce module refusant obstinément de s'importer parce que je l'avais mal orthographié, et cette histoire de version de Python installée sur mon ordinateur qui ne correspondait pas à celle du tutoriel que je suivais ce soir-là.
Une autre fois, une boucle refusait de s'arrêter alors que j'étais certaine que ma logique tenait la route: ma commande de sortie était en réalité décalée d'un cran vers la droite, et pour Python, elle faisait donc partie de la boucle au lieu d'être à l'extérieur. Théophane, un lecteur qui commente depuis Lyon, m'a écrit récemment qu'il venait de buter sur exactement ce genre de décalage, alors qu'il avait depuis longtemps dépassé, sur d'autres points, l'étape où j'en suis encore — la preuve, s'il en fallait une, qu'on n'apprend jamais dans le même ordre que son voisin.
Fermer l'ordinateur, la technique la plus difficile
Ma dernière habitude, et sans doute la plus difficile à respecter, consiste à savoir s'arrêter. Il existe un point de non-retour, tard le soir, où le cerveau ne décode plus rien: on s'obstine, on s'énerve contre la machine, on se sent nulle pour de bon. Dans ces moments-là, la meilleure technique de débogage ne se trouve pas dans le code: elle consiste à fermer l'ordinateur portable d'un coup sec, à finir sa tisane refroidie et à aller dormir.
Le nombre de fois où j'ai retrouvé la solution le lendemain matin, en quelques secondes, juste en rouvrant mon fichier avant de partir travailler, est difficile à croire. Pour arrêter de multiplier les copier-coller qui multipliaient aussi les risques d'erreur, j'ai fini par apprendre à créer des fonctions python pour arrêter de copier-coller mes blocs de code partout dans mes scripts. Ça demande un petit effort au départ, mais quel soulagement pour mes soirées.
Qu'est-ce qui a vraiment changé, vers la semaine sept ?
Vers la semaine sept, rouvrir un fichier écrit la veille a cessé de me demander un effort de mémoire: je comprenais chaque ligne directement, sans avoir besoin de me rappeler ce que j'avais voulu faire au moment de l'écrire. Ce n'est pas un déclic soudain, plutôt quelque chose qui s'est glissé là sans prévenir, entre deux soirées presque identiques.
S'il y a une leçon que je retiens de tous ces soirs à batailler avec ma salière et mon vieux portable, c'est que la patience se construit exactement comme le reste: par petites doses, un bug résolu à la fois, jamais d'un coup. Le prochain message d'erreur me fera sans doute encore grincer des dents — mais je sais désormais qu'il ne restera pas incompréhensible bien longtemps.