Conception de logiciels: c’est quoi ce bordel !?!
Dans ce billet, j’ai envie d’évoquer quelque chose qui m’interpelle depuis plusieurs mois au sein de la communauté des développeurs de logiciel et dont je commence à me lasser très sérieusement: les logiciels super user-friendly qui pullulent dans le monde de l’open-source ces derniers temps. Plus particulièrement, c’est leur pile logicielle qui me choque de plus en plus. Je ne sais pas si c’est moi qui devient un peu « vieux con » sur les bords ou si la mélancolie de l’hiver ne m’a pas encore lâché, mais je trouve que ces derniers temps, tout devient extrêmement compliqué dans le monde du développement.
Une pile logicielle javascriptisée à mort
De plus en plus de « bonnes idées » développées sur Internet finissent par être « javascriptisées » pour être plus fun à utiliser. Je parle ici notamment des excellents Discourse (système de forum à la Stack Exchange) et Mattermost (équivalent à Slack, le service centralisant les notifications de plusieurs applications) qui sont vraiment très agréables à utiliser, mais un enfer en terme d’intégration JavaScript. Il y en a partout ! Autant le dire tout de suite, je suis tout bonnement allergique à ce langage, mes propos ne sont pas impartiaux.
Mais franchement, regardez autour de vous: JavaScript, Node.JS, Angular et j’en passe et des meilleurs. A mon sens, JavaScript n’était déjà pas une bonne idée du côté client, mais alors le ramener sur le serveur, à quoi bon ? J’imagine que c’est très fun quand on sait s’en servir, mais je trouve ça très peu propre. ça reste mon avis, bien sûr. Toujours est-il que la couche JS prend souvent de la place (~650 ko pour Discourse) pour pas toujours grand-chose mise à part des petits effets de présentation. Oui, c’est très vieux con comme discours, je sais, mais j’assume.
Du coup, aujourd’hui, si vous voulez faire quelque chose d’à peu près présentable, JS reste la dernière alternative que j’entrevois. HTML5/CSS3 apportent quelques éléments intéressants, mais ce n’est jamais suffisant pour faire des applications orientées Web. Et puisqu’on parle de JS, parlons de JSON également ! Je déteste tout autant ce format qui, pour moi, n’est pas assez normalisé. XML a certes de gros défauts (le plus gros à mon avis étant qu’il est verbeux, et pas qu’un peu !) mais il a aussi et surtout quelque chose d’extraordinaire: un schéma. C’est simple, mais un petit schéma XSD permet de normaliser tout le contenu, de mettre les choses à leur place et de renvoyer les mauvais élèves à leurs copies si le message n’est pas formaté correctement. Et ça, j’aime.
Des environnements de développement inexistants ou tout simplement mauvais
Pour la plupart des langages du moment, j’ai de la peine à trouver des IDE qui soient vraiment utiles. Certes, je connais les excellents Eclipse, Netbeans et Visual Studio qui simplifient vraiment la vie des développeurs en leur faisant gagner du temps sur des choses qui ne les intéressent pas (après en avoir fait 2, vous savez comment fonctionnent les boucles, non ? Alors arrêtez de les réécrire sans cesse et demandez à un outil de vous les générer !). Personnellement, j’attends beaucoup d’un bon IDE, notamment qu’il anticipe un peu ce que je suis en train de faire (auto-complétion, contrôle du code obsolète, etc.), qu’il sache m’informer des changements qui ont été faits sur les versions précédentes (version control avec SVN/GIT), qu’il me génère du code sur demande si possible. Bref, qu’il réduise ma part de job chiant et qu’il me laisse faire ce qui m’intéresse de faire.
Aujourd’hui, pour des langages comme Python, Go ou je ne sais encore quel Node.JS, tout ce que je vois ce sont des IDE qui font vaguement mieux qu’un bloc-notes ! Sérieux, changer la couleur de fond de l’éditeur et la police d’écriture, tout éditeur sait le faire, arrêtez de produire des Notepad++ en les appelant « environnement de développement ». Regardez les trois que j’ai cités au début de ce chapitre ! Alors oui, ils sont un peu lourds, oui il y a beaucoup d’options et ça demande un temps d’adaptation, mais ils apportent beaucoup à celui qui le maîtrise.
Bref, tout ça pour dire que si je veux écrire du code avec un éditeur de texte, j’ai déjà Notepad++, VI, emacs ou je ne sais quel autre éditeur de base.
Des softs toujours plus compliqués à installer
Malgré mon aversion envers tout ce JavaScript, je m’intéresse à beaucoup d’outils qui en sont pleins, parce que je reconnais que c’est agréable à utiliser. Cependant, il vient un dernier gros point noir: l’installation d’un logiciel pareil. Avez-vous déjà essayé d’installer un Discourse, un Mattermost ou encore un noeud Diaspora ? Je plains honnêtement les sysadmins de nos jours, tellement c’est touffu et inextricable. Une application PHP, ça nécessite Apache avec PHP, basta. Une application Java ? Une JVM, c’est tout. Une application C# ? Le .Net Framework.
Maintenant, prenez du Ruby ou du Node.JS. Le nombre de dépendances différentes me fait hérisser les poils du dos. Pas étonnant que la plupart des scripts livrés aujourd’hui sont intégrés dans une image Docker à déployer et qui met généralement 10 minutes à se déployer sur un serveur modeste. Elle est passée où la vague du KiSS ? Les petites applications qui n’avaient rien à envier aux plus grands et qui s’installaient simplement en lâchant quelques fichiers sur un FTP ?
Alors oui, je sais, je parle à nouveau comme un vieux con. Mais je n’ai pas envie de passer ma vie à gérer une pile logicielle de malade mental pour trois applications déployées sur un serveur Web, avec toutes les mises à jour et les failles de sécurité que ça comporte ! Il y a des jours où, tel un utilisateur lambda, j’aimerais que ça juste marche ! Les pré-requis longs comme le bras, les dépôts clandestins et les git pulls me filent des boutons à l’heure où on a ce que j’estime être de bons mécanismes comme apt-get chez Debian. Une commande qui met tout à jour, simplement. Pas 50 lignes de commandes à exécuter pour aller rechercher la copie d’un package sur Git, que je dois décompresser et où je dois naturellement remettre tous les droits parce que le chmod n’a pas tenu le coup.
Typiquement, quand je vois que pour installer un put*** de serveur Web avec une GED, je dois faire ça, ça m’énerve:
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr unpaper poppler-utils -y virtualenv venv source venv/bin/activate pip install mayan-edms mayan-edms.py initialsetup mayan-edms.py runserver
Les gars, faites simple, s’il-vous-plait. Pensez aux vieux cons du développement comme moi et cessez de faire des trucs qui se mettent à jour n’importe comment (ou pas du tout), merci ! 😉
Note: ce qui me fait aussi beaucoup rire (pour ne pas en pleurer), c’est de voir que le retrait d’un package de NPM réussit à « casser Internet » (qu’à cela ne tienne, je pense qu’il a bien fait) parce que tout le monde fait des références à des modules en se disant que tout va toujours fonctionner. Mais cessez donc de lier vos applications en prod à des serveurs qui ne vous appartiennent pas, bon dieu ! Depuis le temps qu’on clame haut et fort que ça ne peut pas toujours fonctionner… Prenez un peu exemple sur des Apache Maven ou des NuGet, ça c’est du stable pour la prod. Et si vous n’avez pas ça, mettez au moins vos dépendances en local, le monde vous en sera reconnaissant.
Source: Pixabay.