Styles

jeudi 10 septembre 2009

Template, Modèle de Construction, Code Snippet : une réutilisation nécessaire

Quelle est la plus importante habitude à prendre dans sa carrière d’informaticien ? On passe souvent des heures voire des jours à faire fonctionner un morceau de code, et on apprend toujours beaucoup de choses pendant ce processus de conception. La conception a cela de pervers qu’on ne connaît la bonne solution qu’une fois qu’on la conçue.

Ainsi, la conception est toujours un processus assez long et périlleux, il est donc plus que nécessaire de capitaliser sur ses expériences et les expériences des autres. La meilleure application étant celle pour laquelle on n’a à développer aucune ligne de code, la capitalisation qu’on entend ici est donc la constitution d’un ensemble de « modèles » (templates) ou « d’extrait de code » (code snippet) configurables, personnalisables et extensibles à souhait.

Quand on y pense, même pour des applications simples à concevoir comme des sites Web au dessus d’une base de données, il y a tellement d’exigences et de contraintes à prendre en compte (comme par exemple, la disponibilité, la sécurité, les performances…) qu’un cerveau humain n’est pas la plus fiable des machines pour les concevoir. Ne serait-ce que du simple fait qu’un être humain n’est pas constant et oublie vite les détails.

Ce qui motive le plus un informaticien à faire de la conception c’est l’objectif de ne jamais avoir à recoder deux fois la même chose, ou, mieux encore, ne jamais recoder deux choses similaires. Le copier/coller de code à la main (pratique la plus répandue dans notre profession, bien plus que l’exercice de réflexion) est à généraliser dans le cadre de la construction. Les « templates » permettent de générer des milliers de lignes de code et ce, sans l’introduction de bug si votre modèle est parfait.

Les templates : bien mieux qu'une photocopieuse...

La programmation orienté modèle (Template-oriented programming) devient de plus en plus pertinente du fait de la standardisation des solutions et des conceptions sous-jacentes, notamment par l’application des « modèles de conception ». A l’instar des modèles de conception, les templates de code pourraient s’appeler des « modèles de construction », puisqu’il s’agit de standardiser/automatiser la construction d’application. Autrement dit, il devient facile de récupérer des applications correctement codées comme, par exemple, les exemples d’application fournis par Spring (situées dans le bundle Spring) ou dans le Java EE SDK, d’en créer des modèles de code et d’automatiser la création d’application standard en fonction d’un modèle conceptuel des données et des traitements.

La meilleure pratique à s’imposer dès son plus jeune âge dans le métier est donc la transformation de code s’exécutant (« running code ») en code réutilisable pour d’autres projets. Personnellement, je me suis construit une petite application Web pour recueillir tous mes templates, et me permettre de générer du code en fonctions de configurations et de modélisation des informations à gérer. Mais ce genre d’outil se retrouve dans pratiquement tous les IDE dignes de ce nom par exemple Visual Studio, Eclipse, Emacs (avec aussi les abbrevs par exemple) ou dans d’autres outils innombrables (par exemple CodeSmith) …

J’essaie de passer du temps en fin de projet pour réutiliser de tout code qui a été programmé à la main. Comparez le temps nécessaire pour transformer du code en template et le temps que l’on peut gagner quand on va générer des applications avec ces nouveaux templates, et vis-à-vis du nombre de fois qu’on va générer ce code. On y gagne dans la plupart des cas. Il faut bien sur, faire attention à la licence associée au code source.

Qu’est-ce qui sépare un développeur d’un développeur expérimenté ? Le nombre de « modèles de construction » à sa disposition et sa capacité à programmer automatiquement. Faire soi-même un système de génération de code source ou d’application complète permet de maîtriser ce que l’on génère pour mieux en connaître les limites.

Qu’est-ce qui sépare un développeur expérimenté d’un guru respectable et respectée ? Le guru fait de la génération de code qui génère du code qui génère du code… Il fait de la production de modèle de construction, un processus récursif.

On peut extraire des modèles à partir de ses expériences sur des projets, mais on peut tout autant tirer parti des expériences des autres, à partir des exemples donnés dans les livres techniques. Toute lecture d’un livre doit s’accompagner d’un enrichissement de son système de génération de code. A chaque fois que je crée un modèle, je me demande « qu’est-ce qui peut être différencié dans ce code : qu’est-ce qui peut être demandé par un client, qu’est-ce qui est du ressort de l’implémentation uniquement ».

Les templates peuvent être utilisés pour autre chose que la génération de code comme par exemple :
  • générer automatiquement de la documentation (avec des formats de fichier sous format texte comme le RTF, XML par exemple)
  • générer automatiquement de la configuration de middleware comme la configuration d’Apache httpd ou tomcat, ou la configuration de progiciels…
Le domaine d’application de la génération de fichier est sans limites… Un système de gestion de templates peut servir aussi à se souvenir de l’ensemble des paramètres à saisir, l’ensemble de questions à se poser, comme une checklist ce qui permet de ne rien oublier.

A chaque fois que je code quelque chose j’essaie de me poser la question : est-ce que je serai capable de reproduire ce code dans 5 ans sans réfléchir ? Pour être sur de pouvoir ressortir ce code plusieurs années après, je le transforme en template et mon système doit permettre de générer du code qui s’exécute sans problème ou doit fournir des instructions suffisamment claires pour l’intégrer ou l’exécuter.

Et après ça, je peux oublier ce bout de code et dormir sur mes deux oreilles…

Aucun commentaire: