Ne vous répétez pas

« Ne vous répétez pas », plus connu sous le nom de DRY (don't repeat yourself), est un principe de programmation bien connu, apparu pour la première fois dans le très bon livre « The Pragmatic Programmer » de Andy Hunt et Dave Thomas.

La question que l'on se pose quand on le rencontre pour la première fois est : que devons nous ne pas répéter ?

La réponse naïve serait de ne pas répéter le code. Tout code similaire devrait alors être refactoré. Mis dans une fonction, une méthode ou un module. De telle sorte qu'il n'y ait plus aucune redondance dans notre programme.

Or à l'origine ce n'est pas le code que l'on ne doit pas répéter mais la connaissance.

La connaissance de quoi ? me direz-vous.

Et bien celle du problème que l'on souhaite résoudre.

Ce principe devient alors tout de suite plus subtil mais également sans doute plus difficile à appliquer.

En effet, un même problème peut être modélisé de multiples façons, chacune d'elles ayant différents compromis. Sa compréhension évolue avec le temps. Et ce qui était vrai hier ne le sera peut-être plus demain. Pire encore, ce qui semble identique aujourd'hui ne l'est peut-être pas réellement.

Enfin pour compliquer le tout, la bonne application de ce principe s'apprécie sur le temps long. Ce qui nous empêche d'avoir un retour immédiat sur la qualité de nos décisions.

Selon moi, la question de la répétition est secondaire et éclipse le fond de l'affaire.

Un programme est un texte compréhensible à la fois des machines et des humains. Programmer c'est écrire ce texte. C'est partir d'un programme pour en aboutir à un autre. C'est une succession d'éditions et de transformations qui peut s'étendre sur des années.

Le principe du « DRY » nous pousse à réfléchir à la manière dont on édite un programme, à la façon dont il peut évoluer. Nous ne devons pas seulement concevoir le programme, nous devons également concevoir sa programmation. Autrement dit, la manière dont le programme peut changer.

Ce qui se cache derrière la question de la répétition, c'est la gestion du changement, et son contrôle.