Mathieu Eveillard

Pourquoi il faut réinventer la roue

Pourquoi il faut réinventer la roue

Voici un exercice que j’affectionne et propose souvent aux personnes que j’accompagne : re-coder les outils de développement que nous utilisons au quotidien : Jest, Redux, React, voire même TypeScript. À la réflexion, re-coder est un bien grand mot. Disons plutôt travailler le principe fondateur de ces outils, le gist.

Un framework de test en 20 lignes

Jest, par exemple. Un framework de test qui assure en fait 3 fonctions distinctes :

Le premier volet, le plus important à mes yeux, est ce que l’on appelle un test runner. Implémenter un test runner suppose de pouvoir enregistrer des scénarios de test dans une liste, en tant que fonctions, puis de les jouer les uns après les autres. Autrement dit : invoquer ces fonctions.

Donc à bien y regarder, rien de très compliqué. En 20 lignes de code, on a un test runner rudimentaire (https://github.com/mathieueveillard/jest-gist).

Quel est l’intérêt ?

Le fun : rien de mieux pour se détendre le vendredi soir à l’heure de l’apéritif, quand la semaine est finie. Chacun son fun, j’en ai bien conscience. Peut-être devrais-je reconsidérer certains aspects de ma vie…

Qui peut le plus peut le moins

Cet exercice est compliqué parce qu’il part de la page blanche et demande de poser un cadre ex-nihilo. Par contraste, la plupart des développements que nous faisons au quotidien s’inscrit dans un cadre pré-établi, par nous-mêmes ou par d’autres. Poser les bases d’un outil de gestion de l’état applicatif, d’un DOM virtuel et de l’algorithme de réconciliation qui va avec vous fera nécessairement gagner en hauteur de vue et en autonomie.

Et puisque le cadre n’existe pas, comment tester nos développements ? Ce type d’exercice est une exploration, nous n’allons pas nécessairement faire du Test-Driven Development (développer un test runner en TDD, ça peut faire mal à la tête 🤯). Pour autant, sans faire de TDD pur et dur, nous pouvons en extraire des éléments de méthode : identifier les axes de complexité, les considérer les uns après les autres, et surtout, surtout, faire des baby steps.

En passant, sur le cas précis du test runner, le besoin se fait tout de même sentir assez vite d’automatiser les tests de non-régression… et donc d’utiliser le test runner pour tester le test runner : « eat your own dog food! »

Réinventer pour mieux comprendre

Au-delà, cela permet de désacraliser des outils qui, parfois, nous semblent un peu magiques. Or, à bien y regarder, il n’y a rien d’extraordinaire : on fait de l’informatique de gestion, on n’envoie pas des gens sur la Lune. La difficulté de nos métiers provient surtout de la nécessité de créer du code à l’échelle, autrement dit de travailler efficacement à plusieurs.

Cet exercice se rapproche des small scale simulations évoquées par C. Martraire dans Living Documentation: Continuous Knowledge Sharing by Design : une version simplifiée d’un système complexe, issue d’un démonstrateur technique ou bien créée a posteriori dans le but de faciliter la compréhension dudit système.

Enfin, réinventer un outil permet de mieux en apprécier la valeur. Parfois, on hésite à utiliser une bibliothèque pour faire des choses qui restent simples. A titre d’exemple, je n’utilise aucune bibliothèque pour la programmation fonctionnelle : ni Ramda, ni fp-ts, ni Lodash. Leur valeur ajoutée me semble trop faible au regard des contraintes qu’elles apportent. Et cela, je le sais parce que les monades, je les fais à la main, mon cousin.

Ces exercices, assimilables à des kata, sont très formateurs. Et qui sait, peut-être donneront-ils naissance à de nouveaux outils (niveau « création » de la Taxonomie révisée de Bloom) ?

← Tous les articles