# Pourquoi il faut réinventer la roue

> Réinventez vos outils de développement : Jest, Redux, React, voire même TypeScript. Un exercice qui vous fera franchir un palier en termes de compétences.

- Author: Mathieu Eveillard
- Published: 2023-01-11
- Updated: 2025-10-01
- Tags: Apprentissage, Accompagnement
- Canonical: https://www.mathieueveillard.com/fr/articles/reinventer-pour-mieux-comprendre/
- Translation (en): https://www.mathieueveillard.com/articles/reinventer-pour-mieux-comprendre.md

![Pourquoi il faut réinventer la roue](https://www.mathieueveillard.com/articles/2023-01-11-reinventer-pour-mieux-comprendre/reinventer-pour-mieux-comprendre.webp)

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 :

- L'exécution de scénarios de test, avec des fonctionnalités bien pratiques telles que grouper des tests (`describe`) et moduler leur exécution (`skip`/`only`) ;

- La réalisation d'assertions, avec une interface en langage naturel très agréable : `expect(actual).toEqual(expected)` ;

- La capacité à mocker les dépendances, voire réaliser des assertions au travers de spies.

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'inscrivent 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. À 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](https://www.mathieueveillard.com/fr/articles/taxonomie-de-bloom)) ?
