Comment rater son Google Summer of Code : retour d'expérience

(Nhat Minh Lê (rz0) @ 2009-09-24 00:14:43)

Un peu de sérieux, pour une fois. Parlons peu, parlons bien, parlons du Google Summer of Code, du mien, pour être plus précis. C’est l’histoire de comment tout semblait vachement bien parti et puis finalement s’est pas si bien terminé. Ce que je vais raconter ici ne concerne très probablement pas que le GSoC, ni même le libre en général, en fait pas du tout, c’est juste le récit d’un jeune programmeur « inexpérimenté » devant son premier « vrai » projet.

Mais tout d’abord, quelques faits. Sur mon projet, xmltools, une initiative destinée à produire des outils de manipulation de fichiers XML en ligne de commandes, et sur moi, jeune programmeur de vingt-et-un ans, principalement autodidacte. C’était également mon premier « boulot », si l’on peut appeler cela un emploi. Un profil faible, me direz-vous ? Peut-être, mais je n’ai trompé personne quand j’ai posé ma candidature, et par ailleurs, je n’ai pas l’intention de feinter le débutant victimisé : sur le plan technique, je ne me considère plus comme un novice depuis bien des années, en général, et plus particulièrement dans le domaine qui nous concerne (l’analyse syntaxique, l’interprétation, et assimilés).

Des faits, plus de faits : à ce jour, quels sont donc les résultats de mon projet ? xmlgrep est fonctionnel depuis juillet… mais aucun autre outil n’est utilisable encore ! Il me manque bien au moins la moitié des objectifs listés dans mon cahier des charges ! Pourtant, mon projet n’a pas échoué, si l’on s’en tient aux documents officiels. J’ai été payé. Mais je ne suis pas satisfait, et sans doute si l’on s’y penche d’un point de vue extérieur, il y a lieu de se demander à quoi j’ai été payé ! Le malheur tient en cela : j’ai fait des choses, certes, j’ai même investi beaucoup de temps dans ce projet, mais au final, je n’ai pas rempli les termes de mon contrat. Résultat des courses : aux yeux de tout le monde, c’est l’incompréhension, et je passe pour un idiot ou un incompétent.

Question naturelle : qu’ai-je donc fait ? Et bien figurez-vous que j’ai passé mon temps à étoffer et refactoriser le code existant, en fonctionnalités diverses et variées. Mais pour en comprendre les raisons, il faut remonter à juillet, l’évaluation de mi-parcours, xmlgrep était prêt, annoncé, emballé, tout semblait bien se dérouler. J’ai même eu droit à quelques critiques favorables, notamment de la part des gros ours du GCU. Après ça, j’ai rien glandé… est la conclusion vers laquelle on se sent intuitivement guidé, et disons, durant peut-être deux semaines, c’était plus ou moins le cas, ou plutôt, je ne glandais rien de concret. L’origine de ce glandage est en fait liée à un désaccord entre mon mentor et moi-même sur l’interface et les fonctions d’xmlsed. Le sujet du débat ? Une histoire de syntaxe XML ou non. Du moins, c’est ce qui est apparu en surface. Mais cette confrontation m’a fait prendre conscience d’un problème bien plus profond : mon mentor et moi-même étions partis depuis le départ sur des idées très différentes de ce que devaient offrir les outils que nous pensions tous deux que j’allais développer. Là où les choses se sont effectivement compliquées, c’est que ma vision des objectifs était sensiblement plus simpliste que la sienne. En d’autres mots : le modèle que j’avais conçu, les algorithmes que j’avais écrits, et l’interface que j’avais programmée, qui devaient servir de base commune à tous mes outils, ne convenaient plus aux nouvelles contraintes qui m’étaient imposées.

À partir de là, deux choix s’offraient à moi : finir ce que j’avais entrepris, de la manière dont je l’avais envisagé, ou retravailler les fondations pour avancer dans la direction qui m’était donnée. Comme vous vous en doutez à présent, j’ai choisi la seconde option, et je ne le regrette pas. Le code a grandement gagné en complexité depuis ce temps-là et supporte maintenant des fonctionnalités que je me refusais au départ à inclure (et donc pour lesquels je n’avais rien prévu dans mon algorithme). La version d’xmlsed sur laquelle je travaille aura une interface proche de ce que mon mentor souhaitait et permettra en peu de lignes ce qui aurait pris le triple, voire aurait été impossible, si j’avais continué sur ma lancée.

Cela signifie-t-il que j’avais tort en premier lieu ? C’est une question difficile, mais je ne crois pas. Mes choix étaient différents. Tels que je me les imaginais, mes outils devaient être plus limités, plus simples, plus proches de l’implémentation. Je pensais qu’ils seraient complémentés par du scripting, de la programmation, pour compenser le manque d’expressivité du langage de motifs. Pour cela, j’avais commencé par élaborer ma propre variante vaguement issue d’XPath, mais aujourd’hui, j’en suis à penser que mon choix s’explique de moins en moins (il demeure que le langage est plus concis, donc utilisable en ligne de commandes, par exemple) et qu’il me faudra sans doute un jour implémenter XPath comme alternative, ou il me sera reproché de ne pas l’avoir fait (et à cet effet, hop, j’en profite pour glisser un lien vers ma version modifiée du yacc NetBSD qui supporte la génération d’analyseurs réentrants et prenant les symboles un à un, en argument, au lieu d’appeler yylex, bref, des trucs que j’aimerais voir intégrés à NetBSD d’une manière ou d’une autre, ça m’arrangerait…).

Suis-je pour autant mécontent du détour effectué ? Fondamentalement, non. Le challenge technique apporté n’était pas déplaisant, tout au contraire, et de ce point de vue, j’ai su venir à bout de problèmes que je pensais hors de ma portée directe. Et je fais confiance à mon mentor pour mieux définir les besoins des utilisateurs que moi ; j’ai sans doute trop valorisé le critère « possède une implémentation simple et cool » par rapport à l’aspect « confort d’utilisation ».

Le problème est plus dans l’apparence des choses : j’ai continuellement le sentiment inconfortable de ne pas avoir réalisé mon travail correctement, de ne pas avoir rempli les objectifs que je m’étais fixés (alors que tout le monde à côté semble avoir fait du bon boulot). Et j’ai bien peur que la communauté le voie de cette manière, également, et il serait difficile de lui en vouloir, d’autant plus qu’avec la reprise de la vie étudiante, l’avancement du projet est nettement ralentie (je n’y travaille, à tout casser pas plus de deux jours par semaine — plus d’infos sur l’avancement « bientôt », c’est-à-dire quand je serai assez fier de ce que j’ai fait pour en parler). Mais, comme dirait l’autre, on n’y peut rien, c’est la vie. :)