Réinventer la roue, ou pas ?
Partout on explique qu’en programmation il est important de ne de pas réinventer la roue. Qu’il faut réutiliser plutôt que de réécrire, utiliser un code éprouvé plutôt que de réfaire la même chose en moins bien.
C’est vrai, mais je ne suis pas tout à fait d’accord avec cela, c’est parfois indispensable et souvent très formateur.

Photo de i_gallagher depuis Flickr
Concept
L’expression « Réinventer la roue » exprime l’idée de ne pas refaire inutilement quelque chose qui a déjà été fait. « Réinventer la roue carrée » y ajoute l’idée d’une réinvention de moindre qualité. Wikipédia fais le point sur ces concepts :
Les éléments à charge pour étayer l’expression sont évident et pourtant, dans certains cas ce n’est pas si évident…
Le pour
Donc le contre réinventer la roue.
Pour ce qui est des concepts élémentaires qui font leurs preuves depuis toujours, parfois avant même l’histoire de l’informatique, la question ne se pose souvent même pas. Sur certains problèmes simples, on connait la meilleure solution de traiter les cas, alors pourquoi chercher à faire autrement.
Déjà éprouvés
On a tous étés confrontés un jour à un code un peu complexe que l’on a fini par simplifier à l’extrême en découvrant une solution simple et efficace sur Internet mais à laquelle on avait pas pensé.
Internet favorise l’échange de savoirs de façon exponentielle. Tout internaute un peu curieux peu apprendre rapidement sur le sujet de son choix, on peut ainsi facilement trouver et utiliser une bibliothèque ou un framework et gagner un temps non négligeable en évitant de réécrire l’essentiel. Aujourd’hui très peu de projets partent de zéro, on s’appuie toujours sur une couche existante.
Un code optimisé et fiable c’est ce que tout bon développeur recherche alors si on vous le propose tout prêt, pourquoi hésiter ? Ne risquez pas de faire pire, réutilisez !
Gain de temps
Ce serait donc une perte de temps évidente de chercher à réinventer ce que d’autres ont développé. D’autant que bien souvent les projets communautaires sont d’une grande qualité et la somme des compétences techniques de leurs auteurs est bien plus grande que la votre ou celle de votre équipe. On ne peut pas être spécialiste dans tout les domaines ! Faites confiance à d’autres équipes, vous gagnerez en temps de développement et même sur la maintenance, les évolutions et corrections de bugs ne seront pas de votre ressort !
Le temps gagné vous permettra peut être de publier votre propre code et d’en faire gagner à quelqu’un d’autre.
Le contre
Donc le pour réinventer la roue.
Quel que soit l’outil ou le concept, on pense souvent que tout est déjà inventé et pourtant de nouvelles idées et de nouveaux produits voient le jour quotidiennement et ils paraissent tellement évidents qu’on se demande pourquoi on y à pas pensé soi-même un peu plus tôt… Comment ses idées ont elles germé ? Bien souvent en envisageant un problème sous un autre angle, en se posant une question de manière différente. Bien des inventions ne sont que la réunion de plusieurs.
Comprendre les concepts & les adapter à d’autres inventions
Avoir une approche différente est essentiel. Il faut comprendre le fonctionnement de la roue pour pouvoir l’améliorer ! Utiliser une bibliothèque ou un framework c’est bien, mais en comprendre le fonctionnement c’est encore mieux. Quand vous en maitriserez le fonctionnement, quand leur conception vous semblera claire, vous pourrez les réutiliser efficacement dans d’autres cas.
Votre y gagnerez en compétence et en efficacité.
Il y a quelques années, avant l’arrivée des frameworks PHP, j’ai développé ma propre solution. Cela m’a permis de gagner beaucoup de temps en mutualisant certains développement entre plusieurs projets. J’ai gagné en compétence car je souhaitais toujours trouver la meilleure solution à un problème donné. Aujourd’hui j’appréhende d’autant mieux les outils que j’utilise même si je ne les ai pas écrits moi même.
Nouvelles idées ou fonctionnalités
Re-développer un outil ou réfléchir à un concept avec un œil neuf vous apportera peut être une idée de génie. Le petit truc auquel personne n’avait pensé, la fonctionnalité évidente qui donnera une longueur d’avance à votre projet. Un truc évident, après coup, mais qui nécessitait un certain point de vue, certaines connaissances, tout un ensemble de choses que personne n’avait visiblement eues avant vous.
Usage spécifique & optimisation des performances
Dans certains cas, il faut savoir si la roue qu’on nous propose nous convient vraiment, et si on n’ a pas besoin de la modifier ou de la réinventer pour répondre de manière plus précise à son besoin. Pourquoi utiliser un outil avec des tas d’options si votre besoin est vraiment basique. L’analyse de l’outil et sa réécriture permettent de monter en compétence sur le sujet et d’avoir un produit répondant uniquement à votre besoin et du coup plus performant.
Le contraire est vrai aussi, et si un outil ne propose que 90% de vos besoins, améliorez le et proposez les améliorations à la communauté !
Conclusion
Réinventer le roue peut s’avérer utile pour innover, et c’est en tout cas un moyen formateur pour qui veut apprendre d’autres outils ou concept pour les faire évoluer ou en comprendre l’essence et l’adapter à d’autres cas. N’ayez plus peur de réinventer la roue, mais faîtes le en connaissance de causes et pour de bonnes raisons
Et vous alors ? Réinventez vous la roue ? Est ce pour de bonnes raisons ? Que pensez vous des miennes ?
En question subsidiaire, j’aimerai savoir d’ou vient l’expression, je n’ai pas trouvé d’information sur son origine.
Sur le même thème
- Les plugins Firefox : FoxyProxy
- Bien utiliser Zend Framework
- Bien définir son projet de site web
- Comment apprendre le développement web ?
- Les plugins Firefox : Colorzilla
CV
Profil
@webaaz
Déjà 3 Réponses
26 janvier 2010 à 12:51
J’utilise Joomla!. Dans un CMS on assemble des roues de toutes provenances. C’est génial : rapide et efficace.
Je me demande quand même si c’est très sécurisé. Difficile de savoir ce que fait vraiment un composant.
Suis-je paranoïaque ?
27 janvier 2010 à 10:22
J’ai pas mal travaillé avec Joomla! 1.5 et je me méfie des modules « maison » fourni par les communautés qui tournent autour des CMS. J’ai pris pour habitude de faire un audit de code de chaque module que j’utilise. Je vérifie si le code est bien écrit et bien documenté, si les mises à jour sont régulières, si le développeur est reconnu par les autres membres de la communauté…
Au final, je préfère utiliser des modules développés par des équipes sérieuses, voire par les développeurs du core eux-mêmes, que d’utiliser un code inconnu qui risque d’apporter des failles de sécurité et de l’instabilité.
21 avril 2010 à 15:17
Linux.fr vient de sortir un article intéressant intitulé : « Évolution culturelle : conquérir en copiant »
http://linuxfr.org/2010/04/21/26767.html
La conclusion semble être : mieux vaut ne pas réinventer la roue… surtout pour apprendre !
Mon avis perso : quand on débute dans le monde du travail, quelque soit le domaine (informatique ou pas), mieux vaut reprendre dans un premier temps ce qui a déjà été fait. Que ce soit bon ou mauvais d’ailleurs, car on apprend autant de nos bétises que de celles des autres !
On apprend aussi beaucoup des gens d’expérience.
Ensuite, l’innovation peut intervenir lorsqu’une certaine maîtrise du sujet est atteinte et que la personnalité de l’individu s’y prête.
My 2 cents !
Laisser un commentaire