Cela fait bientôt… longtemps que je dev
. Ouh là ! Bien plus de 10 ans ! Je prend un coup de vieux là d’un coup mais fort est de constaté que ma mentalité a pas mal évolué avec le temps.
J’ai envie aujourd’hui de vous faire partager un certain nombre de choses dont je me rend compte en même temps que je commence a perdre mes cheuveux
.
Ahhh la jeunesse, la fac ! Quel nostalgie !
Je me souviens a chaque fois que j’avais une idée d’amélioration dans un programme, je reprogrammais TOUT. Repartir d’un projet vide et tout refaire pour atteindre le code “ultime”, celui qui sera maintenable et rapide à la fois.
Mais voilà… en prenant de l’age. Il n’y a plus maman pour faire les courses, la vaisselle, la lessive et du coup il y a forcément moins de temps pour dev. Alors forcément, si j’ai quelque chose qui marche, j’ai pas très envie de réinventer la roue (surtout carré).
N’étant pas un fervent défenseur de la javadoc, phpdoc ou autre joyeuseriedoc, je ne documente pas beaucoup mon code (PÔ BIEN !!!) mais je fais des tests unitaires. Si j’avais un conseil a vous donnez, faites des tests unitaires au moins vous aurez un vague souvenir de ce que fais chaque fonctions
.
A partir du moment ou mes tests unitaires passent, je considère que mon code “fonctionne”. Il n’est surement pas parfait mais je ne vais pas le changer tant qu’il
Et puis… le code a t’il besoin d’être parfait ? Injection de dépendances, Design pattern, Meta modèle, les concepts en informatiques fleurissent tellement que le temps de finir un projet, techniquement il est déjà dépassé
. Il faut vivre avec son temps mais cela ne sert a rien de modifier quelque chose qui marche et qui semble “plutôt” maintenable.
Avec le temps, on apprend aussi de nouveau langage. Basic, Delphi, C++, PHP, Python, Ruby, Java… c’est qu’on aime expérimenter un peu tout. Il faut aussi avouer qu’il serait un peu bête de ne pas utiliser le langage le plus approprié pour la tache. Je ne m’amuserais pas a faire une appli web en C++ ni a faire un programme en PHP/QT.
Mais comment réutiliser du code d’un autre langage ? C’est très simple, en utilisant une interface.
Le mot “interface” ici est a prendre au sens large. Que ce soit du xmlrpc, une page en JSON ou une exécution dans le langage actuel avec une glue quelconque (je pense a python avec des dll ou java avec jython, jruby), l’important ici est d’utilisé une technique de communication “standardisée”.
Mais le mot “interface” est aussi a prendre au sens propre d’un langage de programmation. Plus vous aurez d’interface définis, plus il sera facile de changer son implémentation par la suite.
Souvent on me regarde de travers quand je dis “on peut faire du code bien crade si l’interface est propre“. Peut importe d’avoir un bout de programme en TCL/TK tant que son utilisation dans le programme principal reste transparente et que cette brique puisse être interchangeable.
Si j’ai eu l’idée de faire ce petit post c’est parce qu’actuellement j’ai 2 projets en parallèles que je traine depuis un moment et où je suis très content de réutiliser le code existant.
Le premier c’est scrutator où une partie du code serveur est en PHP. Même si la nouvelle implementation est en python twisted, la couche de sauvegarde s’effectue en XML-RPC et utilise toujours l’ancien code de sauvegarde. Une partie de l’ancienne logique de déploiement repose toujours sur du code PHP mais elle a tendance au fur et a mesure a disparaitre.
Le fait d’avoir décidé de réutilisé une partie de mon code PHP m’a facilement fait gagné 2 a 3 semaines de développement. La logique de déploiement disparaitra mais la sauvegarde se fera a mon avis toujours par la couche PHP qui reste robuste.
Le 2ème c’est MyLibrary. Je suis en train de réfléchir a le refaire en GWT. Ici aucun intérêt a changer la couche de sauvegarde et de requête sur Amazon. Je pense développer une couche en JSON pour dialoguer avec PHP. L’interface de sauvegarde risque ensuite de s’améliorer par la suite pour surement utiliser la sauvegarde PHP et Google Gears.
Oui il faut réutiliser ! Oui on peut réutiliser du code imbuvable ! Mais attention a ne pas faire n’importe quoi non plus. Vous devez garder le contrôle.
Rien ne vous empêche de faire des tests unitaires dans votre nouvelle implémentation (en java par exemple) pour vérifier que votre ancienne implémentation (en PHP) fonctionne toujours.
Il faut aussi éviter de réutiliser un code qui utilise lui même un code déjà recyclé. Utiliser du code Perl dans un programme PHP qui est repris en Python… Il serait peut être un peu temps de se remettre en question et de voir si tout est réellement nécessaire.
Pour réutiliser son code il y a quelques règles simples à suivre.
En espérant que cela vous aidera a faire du très bon recyclage