Du code, du communisme

Non, nodejs n'est pas mature

La maturité d’un projet ne se juge pas seulement par le code source lui-même, il se mesure aussi à tout l’écosystème et à la communauté.
Un jour je me suis retrouvé à devoir choisir, sans m’y connaitre vraiment, entre apprendre Python ou Ruby. La raison pour laquelle j’ai choisi Python n’a rien de profondément philosophique: ça marchait.
A l’époque, et c’est encore dans une moindre mesure le cas aujourd’hui, l’écosystème Ruby était bancale:

  • installation de gem qui foire une fois sur deux;
  • projets sans tests (oui, on est mal placé…) ni documentation;
  • environnement isolé très compliqué à mettre en oeuvre.

C’est exactement ce que je ressens aujourd’hui à propos de NodeJS. Un de mes amis prosélyte quand il s’agit de ce projet m’assurait que c’était le repo le plus suivit sur github, qu’il y avait maintenant moulte ORM, frameworks, et tout ce qu’il fallait pour développer.

Et c’est vrai, Node avance très vite. Trop vite.

Emporté par l’élan de l’enthousiasme, les amateurs de la techno vantent les (réels) mérites de la bête:

  • performances époustouflantes;
  • websocket ou fallback les doigts dans le nez;
  • un seul langage côté serveur et client;
  • une communauté de passionné-es hyper compétent-es et productivs;
  • et pleins de vrais projets en prod pour le prouver.

Sur le papier c’est cool, mais en pratique, voici ce qu’on a oublié de vous dire:

  • les packages ont un goût de pas fini: doc fébrile, -h qui fait planter le programme, erreurs de locale impossible à résoudre, etc.
  • il y a 100 initiatives pour tacler le même problème. Pour l’instant pas de clair gagnant pour les libs les plus importantes. La pérennité de vos dépendances se joue à pile ou face.
  • toutes les libs sont en travaux. C’est la seule chose qu’on trouve toujours dans la doc: version beta, l’API va changer, tout va péter, vous êtes prévenu-es.
  • un seul langage, mais c’est du JS. Syntaxe de merde, gestion de scope tout pourri, passage des arguments à la walou et nested callbacks en pagaille. Si bien que les projets JS les plus connus (hors jQuery et cie) sont coffeescript et les libs qui inlinent les appels asynchrones. Ça me fait penser à Microsoft qui vente les qualités de son défragmenteur alors que la concurrence ont des FS qui ne fragmentent pas.
  • les debug toolbars, les ORM, les générateurs de formulaires, les libs d’i18n, bref, tous ces trucs qui vous rendent 10 fois plus productifs sont loin d’offrir l’équivalence en terme de features ou de facilité de mise en oeuvre.
  • la seule bonne source d’infos à jour sur NodeJS c’est stackoverflow… Hum… Oh certes, vous avez des docs de références au poil sur plein de sites, mais en 5 minutes, vous allez tomber sur le cas de programmation réel qui n’est décrit nul part.
  • vous avez du mal à trouver un dev Python ou Ruby ? Essayer de trouver un dev NodeJS. Et pour la formation, bonne chance. Ca ne demande pas du tout le même niveau de compétences. La bonne nouvelle : si quelqu’un sait s’en servir, vous êtes à peu prêt sûr-e qu’iel est bon-ne.

Ça me rappelle le buzz qu’il y avait eu autour de Python Twisted. Travailler en asynchrone est tellement difficile pour le programmeur lambda que quand j’ai passé un entretien d’embauche chez Jamendo, le mec voulait me recruter rien que parce que je savais à quoi ça servait. Du coup, les alternatives sont encensées, mais vous trouvez vraiment les greenlets si simple ?
Je crois fermement que NodeJS va s’imposer dans le développement Web (merde, encore un truc à apprendre) car, avouons le, ça roxx du poney. Mais ne vous faites pas avoir par les barbus betaddict qui prêchent la dernière update de la bonne parole, si vous mettez les mains dedans, vous allez en chier.