Les bienfait de réinventer la roue
Le cycle de l'apprentissage et innovation

Le voyage de l’apprentissage Lorsque j’ai commencé ma carrière, mon mentor me faisait souvent réimplémenter des fonctions déjà existantes, ou même des frameworks bien plus aboutis. Et ensuite, il me demandait d’aller lire leur code source… pour voir à quel point on avait fait de la merde.
Je trouvais ça non seulement chiant et lourd, mais aussi inutile. Pourquoi ne pas utiliser ce qui existe déjà ?
Et sa seule réponse était :
- Parfois, réinventer la roue a bien plus de valeur que celle d’avoir une roue à la fin.
Comment apprend-on quelque chose ?
Selon plusieurs approches, l’apprentissage se fait en trois étapes. Pour DeMarius Jackson, ces étapes sont : Imiter, Assimiler, Innover. Pour les pratiquants de karaté, c’est le ShuHaRi, ce qui revient à peu près au même.
Imiter
Au début, il faut juste faire. Répéter, encore et encore. Un peu bêtement. Mais c’est nécessaire. On doit apprendre le décorum. Savoir comment on fait, pour pouvoir faire sans réfléchir.
Comment implémente-t-on un itérateur ?
Tant qu’on ne maîtrise pas le décorum, impossible de voir les principes. C’est chiant. C’est pénible. Mais c’est nécessaire.
Assimiler
Avec le temps, on commence à internaliser, non pas juste le comment (“comment j’ai fait ce code”), mais les principes. On commence à généraliser.
On se pose moins la question « Comment on fait ? », pour se demander « Pourquoi on fait comme ça ? » On cherche les principes, on remet en question nos certitudes, on explore de nouveaux chemins.
Maintenant, on comprend pourquoi on fait.
Quelles sont les caractéristiques de JavaScript ? Quelles contraintes cela impose ? Pourquoi implémenter un bridge plutôt qu’un proxy ? Quels sont les trade-offs ?
Innover
Une fois qu’on a une vraie compréhension du sujet, on peut s’éloigner des pratiques des autres pour créer la sienne.
Pourquoi j’utilise des Promise au lieu d’async/await ? Pourquoi je code en Rust au lieu de Node.js ce type de fonction/systèmes? Pourquoi tel framework me frustre ? Pourquoi tel langage me saoule ? Comment je structure ma production de code ?
On commence à maîtriser. À créer une pratique personnelle, qui colle à nos contraintes, à nos préférences; qui est nôtre.
Alors, pourquoi réinventer la roue ?
As-tu déjà vraiment réfléchi à cette question : Pourquoi une roue doit-elle être circulaire ? D’ailleurs… doit-elle vraiment l’être ?
De manière pragmatique, je préfère lire le code source d’un projet pour m’en imprégner, plutôt que de me contenter de la documentation. Avec la doc, on apprend à imiter. Moi, j’aime maîtriser.
Quand RxJS est sorti, je l’ai réimplémenté à ma sauce. Soyons clairs : je n’utilise pas ma version en prod. Ce n’était pas le but. Parfois, la valeur d’un voyage n’est pas dans l’arrivée, mais dans le voyage lui-même.
Pourquoi vous devriez réinventer la roue
Si tu es junior, tu dois imiter. Répéter. Faire. Alors fais. Essaie de réimplémenter les libs que tu utilises, puis compare ton travail avec les originaux.
Tu es senior ? Alors pose-toi la question :
- Comment toucher du doigt les principes sans les remettre en question ?
- Comment innover si on s’interdit de tout reconsidérer ?
- Comment avancer si on pense déjà tout savoir ?
Refais. Déconstruis. Essaie autrement.
C’est tout l’intérêt des katas :
- Comment implémenter un itérateur sans boucles ?
- Comment savoir si un chiffre est un multiple de 3 uniquement avec des additions ?
- Peut-on faire des divisions sans utiliser de fonctions mathématiques ?
Conlusion
Tu veux progresser ? Réinvente la roue. Et fais-le souvent.