Je viens de terminer, un peu à l'arrache, la première version d'un logiciel commandé par mon chercheur favori. Ce dernier est quelqu'un de charmant, mais qui "cherche", et qui plus ou moins à ce titre aime bien changer rapidement et assez souvent d'avis sur ce que devrait faire ce logiciel. En particulier, il me dit que ce logiciel pourrait servir à tout une communauté, pas seulement à lui, et que ça lui donne d'autres idées.
Je suis assez content de ce que j'ai fait jusqu'à présent. J'ai réalisé une batterie de tests (parfois même avant d'écrire le code !), à la fois unitaires et d'intégration. Je gère mon code avec SVN, qui tourne sur un serveur du laboratoire : quand je fais une modification, je sais facilement revenir en arrière si cette modification a finalement des effets imprévus pas très sympa, et mes tests sont là pour m'assurer que ma nouvelle version fait au moins aussi bien que la version précédente. Mon code est robuste, il remplit le cahier des charges (enfin, celui du jour...), il est (assez) bien documenté, il tourne sur plusieurs plateformes et il est efficace. Bref, j'en suis quelque part assez fier.
Mais voilà, j'ai quand même quelques inquiétudes pour la suite. J'ai bien conscience que j'ai fait quelques impasses sur la "beauté" du code : certaines variables et routines, je n'ai su qu'assez tard comment j'aurais du les nommer dès le départ, et j'aurais du prendre un peu plus de temps à rendre plus génériques certaines routines. J'ai systématiquement testé chaque module de mon application, mais franchement je ne me vois pas recommencer cette opération à la main à chaque fois que je vais changer un bout de code. On me dit que pour la version 2, on me "donnera" quelques autres programmeurs (à temps partiel chacun), spécialisés dans le métier de mon application, mais dont je ne connais pas les habitudes de codage. J'ai un peu peur de leur intrusion dans mon SVN, que j'ai tiré au cordeau jusque là. Enfin, je me pose des questions sur la distribution de mon logiciel. Jusqu’à présent, j’ai réussi à le déployer sur l’ordinateur personnel de mon chercheur (en plus du mien), mais c’était assez compliqué et surtout très « adhoc ». Ce qui simplifierait les choses, ce serait de faire une image de machine virtuelle avec tous les composants, parce que mon application suppose un serveur de base de données et un serveur web en état de marche et coopératifs.
Heureusement, on vient de me dire qu'une école "Les outils de mise en production du logiciel" est organisée. Je sais qu'après avoir suivi cette école, je me serai familiarisé avec quelques outils qui vont me permttre de solidifier mon application et garder intacts mon enthousiasme et ma sérénité pour affronter la périlleuse marche vers la version 2 de mon logiciel :
* Sonar va me permettre de débusquer les impasses que j'ai faites, dont je n'ai plus la moindre idée, et de commencer à rembourser ma dette technique en confiance
* Jenkins me garantira une reconstruction exhaustive de mon application et sa validation chaque fois qu'il y aura une modif dans le code (ou ailleurs)
* Git et GitLab vont m'aider à définir et implémenter un workflow de gestion de code propre à séduire les plus "codeurs du dimanche" de ma future équipe
* la maitrise de Docker, dont j’entends beaucoup parler en ce moment, me permettra de distribuer mon application sous forme de container prêt à l’emploi et quasiment insensible à l’environnement de déploiement
* enfin, la génération de logs normalisés, paramétrable au moment de l'exécution, couplée à l'utilisation d'outils d'analyse puissants, me facilitera grandement la tâche pour débusquer les bugs qui n'apparaitront qu'au bout de plusiuers mois d'exploitation.