Envie de meurtre 42


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.

42 thoughts on “Envie de meurtre

  • Pocket Tiger

    Ho oui =) une émission de code-review par Sam&Max.
    Avec du code sale, la répartie légendaire de Sam et les blague de cul de Max pour coller à l’ambiance. Ou es-ce que je dois signer ?

  • Djiko

    Alors oui, c’est de l’open source, faut pas faire le difficile, etc.

    Et pourquoi ? Le fait que les sources soient ouvertes invite au contraire à faire des choses lisibles, compréhensibles, que tout un chacun peut améliorer ou adapter. Sinon autant faire du proprio : Personne ne voit ta merde…

  • Sam Post author

    @Salvatore : je ne suis pas fan des preprocesseurs. J’ai essayé coffeescript plusieurs fois, au final je reviens toujours au JS. Et ça ne règle pas le code des autres ^^

    @desfrenes : je me sens pas de lyncher les gars en publique. Ca me ferait mal que quelqu’un prenne un bout de mon code sur github et ma crucifie en ligne.

    Bon, je vois que les gens ont pris ma blaque du “codeur du grenier” à le lettre :-) L’idée est séduisante, mais vu qu’il faut un mois au JDG pour pondre une vidéo alors que ce sont des pros, je vais passer mon tour.

  • foxmask

    bonne maitrise pas JS pour me permettre de taper dessus donc je passe. par contre j’ai pas vu de fot dortograf pour faire ma revue d’f’rzncayes Ca fait chmir :-) sinon ça serait marrant une telle émission mais a la longue ça lasserait car ça supposerait que de zetes tous parfait avec du bo code trop clean etfiniriez par passer pour des l33t chiants :-P sinon a dos soporiphique un article comme celui la ça serait plus cool :-)
    bien le soir bon a’touch

  • Sam Post author

    @Salvatore : je connais très bien rapydscript, mais les contraintes d’usage (setup, generation continue, debug en différé ou seup de de sourcemap et bien sûr les éternelles erreurs de génération) dépassent pour le moment ce qu’on gagne.

  • Daïku

    Bon, allez, je viens faire mon chieur. Pas sur JavaScript vu que j’y connais que couic, mais sur les “coquilles” :

    Je tape et non je tapes.

    Ras le cul et non raz le cul. Raz c’est pour les marées (raz-de-marée) et ras c’est pour le cul (ras le cul), mais aussi pour le bord (à ras bord, par exemple. Le bord en question pouvant d’ailleurs être celui du cul) et les cuillers (cuiller rase).

    Comme foxmask, je n’en ai pas vu d’autres, mais bon, j’ignore le sens de d’f’rzncayes et chmir, un truc de programmeur ?

    Sinon, j’aime bien vous lire, bien que je ne comprenne pas la moitié de ce que vous racontez.

    A+ !

    PS : pourquoi le trombonne il ne fait rien qu’à s’agiter à côté de la fenêtre de saisie de mon commentaire ?

  • Salvatore

    @gentilnaqunoeil: Ou c’est bien moi :-). A l’époque j’animais un forum ‘Python & Cie’ pour débutant en Python. Malheureusement mon hébergeur (Freezope) ferma et ce fût la fin d’une belle aventure…

    Quand à Karigell le framework de Pierre Quentel, j’avais conçu un blog ‘Kariblog’.
    Pierre est aussi l’auteur de Brython, le superbe programme qui traduit directement Javascript en Python, la communauté est très active. Un must a tester…

    Cela fait plaisir que l’on souvienne de moi après si longtemps :-)

  • Arrowbaz

    En même temps s’ils vendent leur code, les mecs ne se cassent pas la tête pour le rendre lisible au contraire. Puis ils mettent OpenSource, c’est tendance, c’est une bonne force de vente. Est-ce vraiment un bon exemple ?

    Après, dommage que ça ne fonctionne pas….

  • Rumsteak

    Du code dégueu il y en a dans tous les languages : C, C++, Python, Ruby, JS etc.
    Je penses qu’on voit plus de code dégueu en JS qu’ailleurs parce qu’il y a beaucoup de codeurs JS (4eme tag sur Stack Overflow avec avec 410 000 questions), et qu’avec ce langage on fait rapidement du code dégueu si on a pas étudié un peu la question.

    J’ai aussi vu du beau code C, du beau code Python, Ruby, etc. J’enfonces des portes ouvertes mais en général il faut un bon/brillant développeur pour faire du bon/brillant code.
    Dans les milieux autorisés et peu connus de la populasse, on peut trouver du beau code Javascript !
    En général ils font beaucoup de programmation fonctionnelle car JS s’y prête étonamment pas trop mal, ils utilisent les promise/future (http://goo.gl/PS1VP) pour éviter les callbacks et autres codes imbriqués, etc etc. Ensuite, faire du code propre, savoir bien nommer ses variables, classes, faire un code qui se lit facilement de bas en haut comme une histoire, etc etc, c’est indépendant du langage. J’ai vu des connards faire le même genre de merde indiqués dans l’article en Java/Python/Ruby/JS.

    Je ne suis pas dév Javascript, mais j’ai eu la chance de cotoyer des collègues JS/NodeJS brillants qui m’ont fait changer d’avis sur JS. Alors oui, il faut du level, de la rigueur etc, comme partout.

  • gentilnaqunoeil

    @Salvatore

    Ca me fait plaisir de te revoir, j’aimais bien ta façon d’explorer plein de trucs différents dans l’univers Python avec humilité et curiosité.

    Putain ça nous rajeunit pas ;), j’ai tâté du zope/plone aussi ;), après je suis allé plutôt vers du micro framework. Maintenant, je fais du twisted, du libzmq, du tornado et du Go parfois et je développe aussi pour et avec Kivy (kivy.org) en dehors du web…

    Malheureusement, mon pseudo ne te dira rien car je change régulièrement.

    Reste avec nous, il y a une bonne ambiance avec un bon niveau technique et des discussions intéressantes.

  • Salvatore

    @gentilnaqunoeil

    Je suis très touché, merci beaucoup.
    C’est vrai que cela ne nous rajeunit pas, mais manifestement
    l’enthousiasme de la communauté Python ne faiblit pas :-)

    Je n’ai pas perdu une once de curiosité :-), et je suis toujours aussi attaché à inciter les ‘jeunes’ à la programmation.

    Professionnellement parlant j’ai rarement pu utiliser Python. Au boulot, j’utilise essentiellement C#, et encore, j’ai eu de la chance, on voulait m’imposait VB.NET.

    En privé, je m’intéresse beaucoup à RapydScript,
    et à ELM (dialecte de Haskell compilant en Javascript)
    Je suis aussi chez coursera.org, un cours d’Algèbre Linéaire où tous les exercices sont donnés en Python.

    J’ai regardé Kivy, c’est pas mal du tout, dès que j’aurai un peu plus de temps, je m’y pencherait plus longuement.

    Je suis très content d’avoir découvert ce blog, j’aime beaucoup ce mélange entre technique et choses de la vie :-).

    Merci encore pour ton très sympathique message.

  • Max

    @Salvatore

    Bon et au lieu de raconter ta vie dans les comments t’as pas envie de nous pondre un article sur RapydScript ?
    Votre rencontre, comment t’as tombé amoureux, la première fois où tu as glissé tes doigts dans son code chaud et humide…

    on a un lien pour les contributeurs impertinents

    ça en fera ptet changer d’avis :)

  • Salvatore

    @Max,
    Je ris encore de ta remarque, décidément vous êtes vraiment très drôles Sam et toi :-).
    Ok, je m’inscris sur la liste des contributeurs afin de publier un article sur RapydScript.

  • murlock

    rare sont ceux qui utilisent “use strict”; lors de leur développement en javascript ( ou l’option –use_strict pour nodejs)

    Vivement qu’un navigateur l’impose d’office !

  • said

    Sans vouloir troller, si on exclu le fait que ce soit MS au commade, je trouve la plateforme excellent. Superbe IDE, différents framework de qualités payant ou gratuit. C’est une plateforme qui évolue régulièrement, qui en plus essai de garder une compatibilité avec les anciennes versions. Il n’y a que Microsoft pour proposer une telle synergie entre ces différentes technologies(WCF, Sharepoint, SQL SERVER, ASP.NET, Outlook, WPF, WF, Windows) etc..

    Les points négatifs : fermé (mais de moins en moins ASP.NET et entity framework passés en open source).
    J’exclue de facto le facteur payant car il existe des versions gratuite.

  • sil

    Le principal inconvénient des technos Microsoft est qu’elles changent tous les 10 ans, rendant les programmeurs vites obsolètes. Python, JS, Ruby, Perl… évoluent continuellement et les programmeurs avec.

  • Salvatore

    @Sam je me contenterai uniquement de servir les elfes en brochette au Troll :-)

    @Said
    Je m’amuse bien avec C# et VSStudio, il se trouve que j’ai investi beaucoup de temps sur Python, et que j’aurais aimé l’utiliser dans mes activités professionnelles.
    Voici une video que j’aimerai présenter à mes responsables :-)

  • said

    @Sil : Effectivement sur le point que tu as cité je suis plutôt d’accord. Sauf que .NET étant un édifice de plus en plus importante dans l’écosystème windows, je les vois pas mal changé de technos. Et .NET à plus de 10 ans maintenant :)

    Mais bon on sait jamais avec eux. Qui vivra verra.

  • said

    A mon avis si tu veux convaincre réellement tes responsables de choisir python, crée un programme identique en c# et python. Et montre les avantages de python ;)
    Grâce à quoi tu as GAGNE DU TEMPS, de la qualité, l’avenir et la stabilité de la plateforme.

  • sil

    Malgré les qualités du langage, la courbe d’apprentissage de l’écosystème Python peut être assez raide.

    Par rapport a .NET, le gain de temps n’est pas évident des lors que l’on réfléchit a très court terme.

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.