Sam & Max: Python, Django, Git et du cul » nodejs http://sametmax.com Deux développeurs en vadrouille qui se sortent les doigts du code Wed, 05 Feb 2014 14:20:37 +0000 en hourly 1 http://wordpress.org/?v=3.3.1 Envie de meurtre http://sametmax.com/envie-de-meurtre/ http://sametmax.com/envie-de-meurtre/#comments Fri, 19 Jul 2013 09:55:57 +0000 Sam http://sametmax.com/?p=6725 Oui, je tape beaucoup sur nodejs et la communauté javascript en général. Mais ils le méritent, bordel !

Je tombe sur un projet OpenSource qui est sorti en janvier dernier. Ils vendent leur popote “As A Service”, donc a priori, on pourrait se dire qu’ils voudraient qu’on les prennent au sérieux.

Ils fournissent un serveur pour se faire la main en local avant de taper dans leur API payante. Cool. Merci.

D’abord, il faut évidement passer par l’installation de node et tout le bordel. Bon, admettons. Même si Python est installé par défaut, il faut bien installer pip.

Mais ensuite, au lancement du serveur, rien. Il reste là, silencieusement. Pas de mode verbose, un mode debug qui ne fait absolument rien.

Mon code client se connecte, et puis nada. Silence radio sur leur lib client et serveur. Vide intersidéral.

La doc est succincte (3 pages) et rien qui ne parle du problème. Question sur la mailling list. Pas de réponse.

A ce stade j’en ai déjà ras le cul. Les libs node qui marchent pas et qui en plus veulent pas mettre un putain de message d’erreur, y en a déjà un paquet. C’est une épidémie dans cette communauté.

Mais je retrousse mes manches, et je vais voir dans le code source.

Et là, je tombe sur 400 lignes de ça :

    var client;
    if (!self._clients[key] || !(client = self._clients[key][id])) {
      if (req.params.retry) {
        res.send(401);
      } else {
        // Retry this request
        req.params.retry = true;
        setTimeout(handle, 25, req, res);
      }
      return;
    }

C’est un appel au génocide, un style de coding comme ça ! Sérieusement, déjà Javascript est un langage moche, avec un scoping de merde, du nesting en pagaille et tout un tas de pièges qui fait que le code est dur à lire et à comprendre.

Mais là, vous imaginez la concentration qu’il faut pour lire ces 10 putains de lignes ? Et les remettre dans le contexte du script complet (qui au passage est commenté comme un diabétique sucre son café).

C’est trop dur de ne pas pondre des trucs innommables comme !(client = self._clients[key][id]) ? Un ligne de plus a taper. Trop difficile de mettre des noms de variables complets ? id, mais id de quoi connard ? Je remonte tout le script pour m’en souvenir ? Et pourquoi tu assignes client = self._clients si c’est pour ne pas t’en servir ? Et puis un double if imbriqué suivi d’un appel récursif asynchrone, c’est tellement fun pour suivre le workflow !

400 lignes comme ça, après le dîner, ça fout la chiasse. Alors oui, c’est de l’open source, faut pas faire le difficile, etc.

Mais bordel, qu’on ne vienne pas me dire que c’est l’avenir. Les ex-script kiddies d’hier, codeurs PHP et VB, commencent à peine à écrire du code propre. Et là grosso modo on va se taper la vague des intégrateurs Web qui se mettent à coder parce que c’est du JS comme dans le navigateur ?

GGGGGGGGGGGGRRRRRRRRRRRRRRRRRRRRRRRR !

Je devrais faire une émission style “joueur du grenier”, mais pour le code pourri.

flattr this!

]]>
http://sametmax.com/envie-de-meurtre/feed/ 42
Non, nodejs n’est pas mature http://sametmax.com/non-nodejs-nest-pas-mature/ http://sametmax.com/non-nodejs-nest-pas-mature/#comments Mon, 14 May 2012 13:34:28 +0000 Sam http://sametmax.com/?p=608 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 éxactement 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 ventent 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 passionés hyper compétents et productifs;
  • 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érénité 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évenus.
  • 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 un mec sait s’en servir, vous êtes à peu prêt sur qu’il est bon.

Ç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 parceque 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 déchire sa génitrice. 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.

flattr this!

]]>
http://sametmax.com/non-nodejs-nest-pas-mature/feed/ 19