J'ai récemment développé un logiciel pour une équipe de recherche.
Ce développement a fait l'objet d'une affectation temporaire
sur un projet. La question de la motivation se pose.
Ce projet consistait à développer un outil permettant
d'automatiser des tests de logiciels développés séparément, pour
s'assurer qu'ils fonctionnent bien indépendamment mais surtout
que les combinaisons de versions des outils fonctionnent elles aussi
correctement.
Le besoin était donc relativement précis en terme de résultat.
Mon affectation était limitée dans le temps, même si la limite
n'était pas connue à l'avance, on partait sur une période
d'un an renouvelable. Enfin, le sujet n'était pas le
plus excitant du monde mais comportait une bonne part
de réflexion pour modéliser les éléments à manipuler (outils,
versions, branches, chaînes de traitement, exécutions de référence,
...), leurs liens et leurs représentations.
Pour ce projet, comme dans d'autres dans le même contexte,
ma "méthode", si on peut ainsi la nommer, est la suivante:
- Comprendre les besoins,
- Trouver une solution, si possible élégante,
- Proposer la solution,
- Développer la solution;
- si une question surgit, discuter, en faisant éventuellement un cycle depuis l'étape 1,
- montrer le résultat, recueillir les retours, revenir en 1.
Rien de très original, on retrouve les cycles habituels de méthodes dites
"agiles"1.
Une étape capitale n'apparaît cependant pas: Trouver un intérêt à développer le logiciel
en question. Etape dont le point 2. ci-dessus dépend directement.
J'ai déjà
écrit sur le fait que le développement d'un logiciel
nécessite de regarder loin, de se projeter2, seule façon de garantir un potentiel d'évolution du logiciel.
Il ne suffit cependant pas de viser un horizon éloigné au début du développement,
il faut également que l'horizon visé s'éloigne, c'est-à-dire que le projet et la
vision associée évoluent en même temps que le logiciel est développé. On pourrait
dire que le projet doit déborder la mission qui est confiée au développeur.
Je considère donc qu'une partie de mon travail, consistant à développer des logiciels,
inclut l'entretien de cette motivation et cette vision à plus long terme.
Développer l'outil en question seulement pour cette équipe posait évidemment un problème quant à l'avenir
même de ce logiciel: serait-il maintenu ? utile ? utilisé ? Autant d'interrogations propres
à empêcher une vision à long terme, m'interdisant de projeter le développement
au-delà de la fin de mission.
La "solution" a donc été de concevoir dès le départ le logiciel pour qu'il puisse être
utilisé par d'autres équipes de développement avec des problématiques similaires. Cette
réponse est évidente et l'approche choisie est relativement naturelle. Il n'empêche
que c'est à cette condition qu'il possible de conserver des possibilités d'évolution
très larges au logiciel développé.
J'ai trouvé d'autres sources de motivation sur ce projet: apprendre sur le web sémantique,
utiliser des graphes RDF et enfin développer une bibliothèque de manipulation
de graphes RDF pour OCaml. Ce développement me sert pour d'autres projets personnels.
Je me suis donc servi de mes intérêts personnels pour le développement d'une partie
du logiciel pour lequel j'étais "missionné".
Une troisième source de motivation qui est intervenue dans ce projet est l'envie
de "faire du beau", de s'appliquer, d'avoir une conception élégante, etc.
Un ami m'avait fait remarquer que l'étymologie du mot "méthode" inclut la notion
de chemin:
Le développement d'un logiciel s'apparente au parcours d'un chemin, un chemin
inconnu3, que l'on découvre au fur
et à mesure. Un chemin que parfois d'autres ont
déjà parcouru et dont on perçoit les traces dans d'autres logiciels4.
Le chemin à parcourir n'est pas tout plat, certaines sections sont plus faciles que d'autres.
En descente et à découvert, on déroule le code sans perdre de vue le point de l'horizon visé,
la hauteur par rapport à la destination permet de repérer bien à l'avance les obstacles, de les
anticiper et d'avoir une trajectoire fluide et courte.
Dans d'autres endroits, la pente est rude et nous cache l'horizon, il convient alors
de rester concentrer sur son seul objectif, arriver en haut, à son rythme5,
ne pas s'arrêter en chemin. Le sommet atteint, un autre horizon s'ouvre, riche de directions à choisir. Il arrive
aussi qu'on débouche au bord d'un précipice infranchissable et qu'il faille revenir en arrière.
En se retournant au sommet, on peut voir le chemin parcouru et s'apercevoir qu'il
est bien sinueux, c'est le moment de simplifier le code avec ce nouveau point de vue.
On prendra parfois des chemins que l'on a déjà empruntés, parce que l'on sait
où ils vont: La voie de la bibliothèque existante, même si elle fait un détour,
est parfois préférable au défrichage d'un éventuel raccourci.
Souvent plusieurs chemins sont possibles et on préférera par moments en ouvrir un qui pourra être suivi
à nouveau plus tard, même s'il est peut-être un peu plus long. Alors
on développe une bibliothèque réutilisable plutôt qu'un composant ad-hoc pour le projet
en cours.
C'est que la marche du développement logiciel ne prend pas seulement en compte le point
visé, mais également le plaisir de la marche, les marches passées et celles à venir.
Si j'emploie l'expression "ouvrir un chemin", c'est qu'il s'agit aussi, en cheminant,
de tracer des routes, qui pourront être suivies par d'autres, y compris par le développeur
lui-même quand il refera le chemin jusqu'au point où il s'arrête, ou pour le quitter
vers une autre direction. J'employais déjà cette image
par ici. Il arrive que pour
gagner du temps et parce qu'une difficulté n'est pas le sujet d'intérêt du jour,
on se soucie peu d'ouvrir un chemin, seul passer l'obstacle compte, comme si
on traversait une haie et que celle-ci se refermait derrière soi.
Les directions que je prends lors de mon cheminement ne dépendent donc
pas seulement d'un état actuel du code et de l'objectif visé, mais aussi de mes expériences
et surtout de mes motivations, de mes intérêts, comme on choisit une route plutôt
qu'une autre "pour la vue", ou pour en profiter pour s'arrêter visiter un lieu.
C'est comme pour partir en vacances: on peut prendre l'autoroute pour un voyage
ennuyeux dont les seules surprises seront les bouchons et autres perturbations.
On peut aussi choisir de prendre les petites routes, faire un crochet pour visiter
un bel endroit que l'on connaît déjà ou découvrir de nouveaux lieux en guise
de repérage. Dans ce cas, le voyage fait partie des vacances.
Si je devais décrire "ma" méthode, en reprenant l'étymologie, il s'agirait
donc d'une attitude, d'une façon de faire mon chemin vers l'horizon
visé, en m'inscrivant toujours entre le passé et l'avenir,
mon passé et mon avenir, mes expériences et mes aspirations.
Loin des prescriptions de méthodes, "agiles" ou non, ma méthode
m'est donc personnelle et mes développements logiciels contiendront une partie de ce
que j'étais à ce moment.
Elle est également ma façon de survivre dans un
environnement de plus en plus contraint et qui place les développeurs
comme des ressources dans des processus de production qu'ils ne maîtrisent pas.
Face à une stratégie de mise en compétition et visant une illusoire compétitivité
économique fondée sur de pseudo-innovations, il s'agit en quelque sorte de braconner
pour conserver un intérêt au travail.
Je laisse l'autoroute aux fondus de performance et de compétition.
<2>
, <3>
, ... En rencontrant ce problème que
d'autres avaient déjà eu à résoudre, j'ai réellement eu l'impression de suivre le
même chemin.