C'est en vacances, à la recherche d'une boulangerie, que je me suis posé la question : pourquoi est-ce que toutes les boulangeries ne font-elles pas du bon pain ?

Vous savez, il y a cette boulangerie chez qui vous avez vos habitudes, qui est peut-être un peu plus éloignée, mais qui ne désemplie jamais, où tout le monde se presse, et dont la fermeture annuelle pour cause de vacances est un drame local.

Je me disais : un pain, c'est un pain. Deux boulangers vont utiliser les mêmes ingrédients, peut-être le même fournisseur. Ils ont tous les deux une recette identique, ou peu s'en faut. Alors pourquoi le pain de l'un est-il bon, et l'autre soit trop caoutchouteux, soit trop mou, soit sans goût ?

Pour m'aider à comprendre, j'ai voulu transposer ma question à un autre métier et j'ai tout naturellement choisi le mien. Pourquoi est-ce que certains programmeurs produisent-ils un code fiable, répondant au mandat et d'autres un code sur lequel il faudra repasser, peu fiable et pas toujours en cohérence avec la problématique ?

Là, j'ai déjà plus les moyens de comprendre, mais je n'aime pas les réponses que je trouve.

Est-ce la différence de nombre d'années d'expérience ? Cette variable semble importante dans les annonces d'embauche (« minimum tant d'années d'expérience dans le domaine »). À vrai dire, à même nombre d'années, le niveau d'expérience varie grandement.

Cela compte, car chaque année, chaque projet, amène son apprentissage passif : en créant un programme, on en apprend sur le domaine, on apprend de ses nouvelles erreurs.

La différence se fait alors sur l'apprentissage actif. L'apprentissage actif, c'est le principe de conserver à tout moment un esprit étudiant. Décortiquer, analyser, prendre du recul, aller chercher de l'information, comprendre, lire et écouter.

Ce qui pour moi est une évidence qui devrait être au cœur de chaque développement ne l'est pas. Un grand nombre de programmeurs à la fin de leurs études considèrent que ça y est, ils ont les techniques, ils connaissent les méthodes et qu'il ne leur faudra passer à présent que sur la composante métier[1], ou éventuellement apprendre en surface quelque nouveau langage ou framework.

Or la partie uniquement technique de la programmation n'est qu'effleurée pendant les études. Il est nécessaire de poursuivre l'apprentissage de ce domaine qui, dans le même temps, évolue. La programmation est un domaine jeune et il y a encore beaucoup d'évolutions sur les manières de programmer. Pas uniquement sur des concepts et paradigmes (programmation modulaire, programmation orienté objet, programmation orienté data, programmation orienté aspects,...) mais aussi sur des méthodes (eXtreme Programming, Test Driven Development, Lean Programming) ou du savoir faire (lisibilité du code, architecture physique et logique, performances).

Et pour rien n'arranger, le matériel évolue dans le temps, changeant la manière d'aborder les problèmes.

Au final, qu'est-ce qui fait qu'un programmeur va continuer sa démarche d'apprentissage ou se contenter de profiter d'un apprentissage passif ? Ma réponse se situe dans l'amour de ce que l'on fait, l'envie de progresser, l'envie de produire quelque chose de beau, de solide, de partageable, quelque chose dont on soit intimement fier même de façon fugace.

Et lorsque l'on a son métier à cœur, il est difficile de réaliser qu'un boulanger se lève le matin pour faire du pain juste médiocre.

Ou bien qu'un programmeur devant son résultat se dise : bon ben, ça à l'air de marcher, ça ira comme ça.

Note

[1] ce qui est spécifique au domaine de la problématique.