Journal Javascript: mais pourquoi ?

Posté par . Licence CC by-sa
21
25
fév.
2011

Cher Journal,

bien tes nouveaux atours.

Sinon, je me demandais. J'ai lu avec intérêt la news sur la sortie de Node.js. Ça tombe bien, je vais être amené à bidouiller avec ça dans les jours qui viennent.

Du coup, je jette un oeil au langage JavaScript. Pour le coup, il ne s'agit pas du JavaScript kikoo lol pour animer des pages web, mais de JavaScript de daicidor pour programmer des services internet facilement.

Et je déchante. Je ne parviens pas à déterminer si ce langage est absolument génial, mais je n'arrive pas à comprendre (et le fait de programmer pour Node n'aide pas vraiment, l'API est pas stable du tout, c'est l'enfer pour trouver des tutoriaux un peu à jour). Je ne capte rien, je n'arrive pas à faire les exemples les plus simples sauf la centaine d'exemples de "Hello World!").

Je sais programmer. Je ne suis pas une bête, mais le jour où j'ai voulu programmer en Ruby, j'ai pris la doc et j'ai commencé à programmer. Le jour où j'ai voulu programmer en Python, j'ai pris la doc et j'ai commencé à programmer. Le jour où j'ai voulu programmer en Haskell, j'ai pris la doc et l'ai reposé.

Mais JavaScript quoi. C'est mes yeux ? Le langage est-il du pur génie, ou est-ce une énorme bouse complètement WTF, que les gens utilisent parce que c'est un langage qu'ils connaissent (parce qu'ils ont appris la programmation avec les exemples kikoolol pour faire des pop-up).

  • # Pourrais-tu être plus spécifique?

    Posté par (page perso) . Évalué à 9.

    Qu'est-ce qui te choque en particulier avec Javascript? T'as jamais dû faire de VBscript (j'ai toujours pas compris comment on gère les erreurs, mon esprit est peut-être formaté par l'utilisation de try/catch), c'est 100 fois pire.

    • [^] # Re: Pourrais-tu être plus spécifique?

      Posté par . Évalué à 8.

      Effectivement, je n'ai jamais fait de VBScript.

      Un exemple ici : Javascript in Ten Minutes dans la section "Object Prototype". Ils essaient de faire un truc un peu orienté objet. Le premier exemple ressemble effectivement pas mal à ce que l'on attend, mais on fait on t'explique qu'il faut pas faire comme ça, mais un truc complètement wtf à coup de objet.prototype (et parfois objet.prototype.proto, mais le proto est pas supporté par tous les navigateurs).

      Il y aussi une notion d'héritage, j'ai rigolé fort !

      Finalement, les gens qui utilisent JS mettent en avant la puissance des /closures/, j'y vois surtout un grand n'importe quoi, complètement bug-o-gène et impossible à tester/débugger correctement. Mais c'est pour ça que je demande un avis, parce que c'est peut-être complètement du au fait que je ne connais pas JS.

      • [^] # Re: Pourrais-tu être plus spécifique?

        Posté par . Évalué à 7.

        Les closures c'est pas un avantage de javascript, puisque c'est possible dans à peut prêt n'importe quel langage un peu récent.

        Pour le reste javascript c'est un langage comme un autre à mon avis, avec effectivement le côté prototype qui peut être déroutant. C'est un langage dynamique qui pousse le concept à l'extrême, tu crées des types à l'exécution par exemple, les objets sont des tableaux associatifs ...

        Après ça permet de faire des choses quand même, par exemple le json pour échanger des données dans un contexte web ça combine les avantages d'être complètement naturel en javascript, facilement échangeable et lisible dans n'importe quel autre langage.

        • [^] # Re: Pourrais-tu être plus spécifique?

          Posté par . Évalué à 2.

          Les closures c'est pas un avantage de javascript, puisque c'est possible dans à peut prêt n'importe quel langage un peu récent.

          On me susurre à l'oreille que ce n'est toujours pas disponible en Java. Un vague histoire de gouvernance du JCP qui n'a pas été capable de se mettre d'accord sur une des nombreuses specs soumises en 3 ans...

          • [^] # Re: Pourrais-tu être plus spécifique?

            Posté par (page perso) . Évalué à 5.

            Le monsieur a dit « langage un peu récent ». Je pense qu'il voulait dire « langage à la syntaxe un peu moderne ». Java n'entre clairement pas dans cette catégorie.

            pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

      • [^] # Re: Pourrais-tu être plus spécifique?

        Posté par (page perso) . Évalué à -1.

        Salut,

        C'est vrai que faire de la POO en javascript c'est difficile au début.

        Sans prétendre être un dieu de prog non plus, j'ai fait une petite classe pour implémenter des Hash (tableaux associatifs). Voici mon code, en espèrant qu'il te soit utile (AGPL):

        http://pastebin.com/4gMhJPmz

      • [^] # Re: Pourrais-tu être plus spécifique?

        Posté par . Évalué à 0.

        Finalement, les gens qui utilisent JS mettent en avant la puissance des /closures/

        Les promoteurs de Ruby aussi, pour enfumer ceux qui reprochent l’absence de destructeurs, mais dans cette utilisation c’est moins souple.

        Perl supporte les closures aussi, mais pour ce que j’en sais, c’est peu utilisé. Dans un langage OO complet, je n’ai pas l’impression que ce soit vraiment utile tous les jours, même s’il y a certains cas où c’est une solution pratique (ça m’a servi... une fois ; bon, je ne suis pas développeur, non plus).

        Théorie du pot-au-feu : « Tout milieu où existe une notion de hauteur (notamment les milieux économique, politique, professionnels) se comporte comme un pot-au-feu : les mauvaises graisses remontent. »

        • [^] # Re: Pourrais-tu être plus spécifique?

          Posté par (page perso) . Évalué à 3.

          Perl supporte les closures aussi, mais pour ce que j’en sais, c’est peu utilisé. Dans un langage OO complet, je n’ai pas l’impression que ce soit vraiment utile tous les jours, même s’il y a certains cas où c’est une solution pratique

          Je trouve que ça a beaucoup d'intérêt avec l'utilisation des callback

          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # WTF

    Posté par (page perso) . Évalué à 9.

    Je penche sincèrement pour une bouse complètement WTF, un mélange de plusieurs façon de voir et concevoir un language interprété...

  • # Hype ?

    Posté par (page perso) . Évalué à 4.

    J'ai eu affaire récemment à un truc similaire — que je n'ai pas choisi, c'était pour le boulot.

    Plein de gens qui en parlent, qui « suivent » sur github, des conférences des auteurs mais :

    • doc inexistante, et quand présente, incorrecte
    • API pas stable
    • des bugs énormes qui font se demander si la chose a déjà été réellement utilisée en production

    Je me suis retrouvé à patcher leur truc sans vraiment savoir si c'était ça que c'était sensé faire. Enfin bon, de mon côté ça marche mais devant l'absence d'informations claires j'ai juste publié mes patches sans demander leur intégration.

    Finalement, ça ne m'a pas vraiment simplifié la tâche. Maintenant, je me méfie de ce genre de projet.

    Note : je ne juge pas Node.js, je ne l'ai jamais utilisé. Mais je me méfie ;-)

    DLFP >> PCInpact > Numerama >> LinuxFr.org

    • [^] # Re: Hype ?

      Posté par . Évalué à 1.

      Le hype sans doute, mais Google l'utilise pourtant en prod et on ne peut pas dire qu'il sagit d'webapp moisis.

      Si je dis une connerie, je suis avide d'apprendre.

    • [^] # Re: Hype ?

      Posté par . Évalué à 1.

      Est-ce que ça commence par un 'z' ?

  • # et RoR ?

    Posté par (page perso) . Évalué à 6.

    pour lancer un troll, j'aurais plutôt choisi RoR, vu l'actualité du changement de linuxfr.org.

    • [^] # Re: et RoR ?

      Posté par . Évalué à 3.

      Clair ce serait terrible d'avoir un interpréteur Ruby dans les navigateurs web!!

      • [^] # Re: et RoR ?

        Posté par . Évalué à -2.

        Pluße ! Surtout que le Ruby reßemble à du Perl dont on aurait décidé que l'obfuscation via une syntaxe de merde fait partie intégrante du langage de base. Il est peut-estre mesme pos²ible que ça ait le mérite de filtrer les dévelop²eurs Web compétents en entrée.

        « Je vous présente les moines Shaolin : ils recherchent la Tranquillité de l'Esprit et la Paix de l'Âme à travers le Meurtre à Main Nue »

        • [^] # Re: et RoR ?

          Posté par (page perso) . Évalué à 4.

          les dévelop²eurs Web compétents

          …que l'on retrouve souvent à côté des licornes.

          DLFP >> PCInpact > Numerama >> LinuxFr.org

      • [^] # Re: et RoR ?

        Posté par (page perso) . Évalué à 0.

        Dans le sens anglo-saxon du mot <i>terrible</i> ?

  • # javascript : un peu plus loin

    Posté par . Évalué à 10.

    Javascript attire du monde parce qu'il tourne dans les navigateurs, ,et que tout le monde converge vers là.

    Modèle à objet sympathique (basé sur des prototypes), variations syntaxiques insupportables, langage figé à cause des plateformes sur lesquelles il tourne et de l'existant : si tu ne peux changer le langage, construit par dessus !

    Pour cela :

    Les librairies en javascript qui donnent une bonne base :

    Cela devrait t'occuper cette après-midi et améliorer ta vision du langage.

    • [^] # Contre jquery & co

      Posté par (page perso) . Évalué à 0.

      Je m'inscris en faux.

      C'est vrai que jquery et ses potes sont pratiques quand on veut faire un truc kikoolol sans s'ennuyer, mais dès qu'on veut faire de la vraie programmation et débuguer pas à pas avec firebug, jquery est un cauchemard.

      Apprenez javascript avant d'apprendre jquery...

      • [^] # Pour jquery & co

        Posté par . Évalué à 5.

        Certes, il n'est à mon avis pas une bonne idée d'apprendre directement le javascript via jquery (comme à peu près tout langages d'ailleurs, on n'apprend à faire du PHP en utilisant symfony par exemple). Mais une fois les bases du langages apprises, Jquery est un excellent framework qui simplifie grandement les choses. Et pas forcément que pour les effets "kikoolol" (qui sont du reste bien pratique si utilisés avec retenue et intelligence). Je l'utilise souvent pour cibler facilement les éléments (adieu le getElementBy*), et faire de l'ajax. De plus, la doc jquery est relativement claire.

        • [^] # Re: Pour jquery & co

          Posté par . Évalué à 4.

          (adieu le getElementBy*)

          Sans oublier :

          • les ajouts/suppressions de classes à un élément, grâce à addClass/removeClass ! Parce qu'entre IE6 qui ne reconnait que "classname" et Firefox qui ne reconnait que "class" (ou l'inverse, je sais plus, du coup...), ça devenait vite super casse-couilles ;
          • Les en:fluent interface ;
          • La quantité de plugins de bonne qualité, permettant de ne pas réinventer la roue (carrée, qui plus est) ;
          • ...
          • [^] # Re: Pour jquery & co

            Posté par . Évalué à 2.

            On trouve certes quelques bons plugins, mais je suis toujours frileux avant de les utiliser, de crainte d'alourdir encore un peu le chargement de la page. De plus, on rencontre dès fois des bugs bien génants, et le développeur du plugin ne propose pas toujours un bon suivi de son projet.

            • [^] # Re: Pour jquery & co

              Posté par (page perso) . Évalué à 2.

              Pour ça tu as des outils qui peuvent réunir et compresser le code JavaScript en un seul fichier.

              Sinon, se limiter à un seul fichier (JavaScript ou CSS) c'est pas terrible si tu te retrouves avec des fichiers illisibles d'un millier de lignes.

              DLFP >> PCInpact > Numerama >> LinuxFr.org

            • [^] # Re: Pour jquery & co

              Posté par . Évalué à 2.

              Il existe ce site, qui centralise de bons plugins, et les rend compatibles entre eux. Je dois avouer que pouvoir coupler Sortable, Draggable et Droppable ensemble permet de faire des choses très sympa ! :-)

      • [^] # Re: Contre jquery & co

        Posté par (page perso) . Évalué à 7.

        J'aime bien jQuery, mais je suis tout à fait d'accord. (D'ailleurs je connais peu JavaScript mais au moins j'en suis conscient !)

        Sinon, ça m'a fait bien rire : http://img180.imageshack.us/img180/3305/addanumbertoanothernumb.png

        DLFP >> PCInpact > Numerama >> LinuxFr.org

    • [^] # Re: javascript : un peu plus loin

      Posté par (page perso) . Évalué à 1.

      langage figé à cause des plateformes sur lesquelles il tourne et de l'existant

      ah bon ? https://developer.mozilla.org/en/JavaScript (voir les pages de chaque version)

      Et Ecmascript 5, que sont en train d'adopter tout les navs ?

      • [^] # Re: javascript : un peu plus loin

        Posté par . Évalué à 3.

        toutes les NOUVELLES versions des navigateurs

        le temps qu'elles sortent, soient stabilisées et adoptées ça peut prendre des années.

  • # Plein de défauts mais puissant

    Posté par (page perso) . Évalué à 6.

    Je recopie ici un lien publié récemment dans une dépêche

    Un livre (disponible entièrement en ligne) qui te présentera le langage de façon assez drôle et sans pour autant le porter aux nues.

    http://eloquentjavascript.net/

    Vraiment très très bien écrit.

  • # programmation fonctionnelle

    Posté par (page perso) . Évalué à 8.

    Le jour où j'ai voulu programmer en Haskell, j'ai pris la doc et l'ai reposé.

    Oui, donc, la programmation fonctionnelle n'est pas pour toi. Comme JS est à mis chemin entre la POO et la programmation fonctionnelle, donc ne te pose plus de question ;-)

    Note: il ne faut pas essayer de faire de la POO avec JS, JS n'est pas un langage orienté objet, mais orienté prototype. C'est comme si tu essayais de faire un cube avec une machine conçue pour faire des balles.

  • # Mon avis

    Posté par (page perso) . Évalué à 4.

    Je développe en Javascript (côté client) car c'est le seul langage de programmation supporté par les navigateurs. Mais si j'avais le choix, je ne le prendrais pas.

    C'est un langage qui peut faire des merveilles, c'est vrai mais ce que je "déteste" le plus c'est qu'il n'y a pas de compilation, et que tout (variables, fonctions, etc) est trop générique.

    Je préfère un langage comme Java/C#/C++, etc. qui fait un contrôle stricte de mon code source lors de la compilation. Ca permet d'éviter un paquet d'erreurs idiotes qui me font perdre un temps fou en JS.

    Donc, si tu n'as pas le choix, alors oui prend JS mais si tu peux éviter, évite !

    • [^] # Re: Mon avis

      Posté par (page perso) . Évalué à 3.

      Ca permet d'éviter un paquet d'erreurs idiotes qui me font perdre un temps fou en JS.

      Alors qu'en C++, c'est la compilation qui te fait perdre ton temps!

      http://devnewton.bci.im

    • [^] # Re: Mon avis

      Posté par (page perso) . Évalué à 2.

      (je ne comprends pas le "tout [...] est trop générique".)

      Pour le problème de "pas de compilation", c'est un faux problème que l'on peut éviter.

      En ce qui me concerne je bosse sur un serveur de taille moyenne en node.js, et ca se passe très bien. Pour palier a l'absence des vérifications que fournie d'habitude l'étape de compilation, on soumets systématiquement tous nos fichiers sources a JSLint, accompagnés de tests unitaires, et on s'assurent qu'ils offrent une couverture de 100% du code.

      On a branche tout ca dans Hundson (intégration continue), jslint ou tests qui ne passent pas = rouge (= cassé ) , coverage < 100% = jaune (= instable) .

      On perd un peu en vélocité mais on gagne énormément en confiance dans le code déjà écrit, on a pas peur de tout péter, c'est vraiment agréable comme environnement.

      (note: on a aussi une petite partie cliente, qui est également testée et soumise a jslint)

      Bref, pour moi javascript est un langage un peut spécial et parfois farceur, mais ma fois pas beaucoup plus qu'un autre.

      • [^] # Re: Mon avis

        Posté par (page perso) . Évalué à 2.

        Comment tu exécute les tests JavaScript ? Surtout la partie cliente, ça m'intéresse.

        DLFP >> PCInpact > Numerama >> LinuxFr.org

        • [^] # Re: Mon avis

          Posté par (page perso) . Évalué à 1.

          Je ne me suis pas occupe de la mise en place de l'infrastructure de tests, je me contente d'en écrire, donc je ne voudrais pas te raconter de bêtises.

          On passe par un makefile. Les tests et le coverage du serveur nodejs utilisent expresso, pour la partie cliente, on utilise QUnit et jscoverage (on doit lancer le makefile et visiter une url)

          voila la règle en question:

          checkclient:

              @/usr/bin/jscoverage public/lib/ public/lib-cov/
              @echo 'run `node app.js`, go to http://$(HOSTNAME):31331/lib-cov/jscoverage.html?../test/coverage.html to run client tests'
          

          clairement c'est relou pour les tests clients, on va peut-être s'orienter vers une solution de tests clients dans nodejs avec jsdom, mais c'est pas gagné.

          • [^] # Re: Mon avis

            Posté par . Évalué à 2.

            Sinon des tests fonctionnels à la Selenium, c'est possible aussi non ?

    • [^] # Re: Mon avis

      Posté par . Évalué à 1.

      qui fait un contrôle stricte de mon code source lors de la compilation

      Pour ça il y a JSLint qui permet repérer les bugs les plus courrants. Bien sur il ne vérifie pas les erreurs de type, mais ça c'est plus une question de style.

      PS: Il a déjà été évoqué dans un autre commentaire mais discrètement alors je le reprécise.

    • [^] # Commentaire supprimé

      Posté par . Évalué à 2.

      Ce commentaire a été supprimé par l'équipe de modération.

  • # Passe à GWT

    Posté par (page perso) . Évalué à 3.

    Passe à GWT, comme ça tu as le coté plus carré de Java et un code optimisé en javascript.
    Tu as accès à une grosse API, de la programmation objet "classique" et un vrai débugueur.

    • [^] # Re: Passe à GWT

      Posté par (page perso) . Évalué à 2.

      Comment peut-on déverminer le code JavaScript généré ?

      DLFP >> PCInpact > Numerama >> LinuxFr.org

      • [^] # Re: Passe à GWT

        Posté par . Évalué à 5.

        GWT a un mode "hosted", en gros le code java est compile en bytecode java au lieu de javascript. Ensuite, le code tourne dans ton ide (eclipse/intellij au moins, netbeans je sais pas), rendu comme si c'etait un browser. Comme c'est du code java qui tourne, tu debugge comme d'hab. Tu t'occupes des problemes a ce niveau.

        Ensuite, tu compiles en javascript, tu laches ca en pature a la QA et tu pleures quand ils te rapportent un bug IE ou que tu peux pas reproduire en mode hosted.

        If you can find a host for me that has a friendly parrot, I will be very very glad. If you can find someone who has a friendly parrot I can visit with, that will be nice too.

    • [^] # Re: Passe à GWT

      Posté par . Évalué à -2.

      Ouais, au prix de "au revoir l'integration spring" et de couche sur couche de generation de code. Ca depend beaucoup de ce que tu fais, mais a moins de faire une tres grosse appli ou l'absence de modele objet fort et de compilation, je conseillerais pas GWT.

      If you can find a host for me that has a friendly parrot, I will be very very glad. If you can find someone who has a friendly parrot I can visit with, that will be nice too.

    • [^] # Re: Passe à GWT

      Posté par . Évalué à 2.

      Le code JS généré est monstrueusement lourd. Par exemple, la bibli de google pour faire des petits histogrammes sature le cpu pendant un bout de temps (freeze d'une minute à dessiner 15 histogrammes minables, avec une bonne machine et un bon navigateur), alors que Flot je ne la sens pas passer.

  • # Les deux

    Posté par (page perso) . Évalué à 6.

    En fait, JavaScript est mi-génial, mi-WTF. Le problème, c’est qu’il y a beaucoup, beaucoup de mauvaises ressources sur le web.

    Pour ce qui est génial, je te conseille de lire « The Good Parts » de Douglas Crockford, et cette vidéo : http://video.yahoo.com/watch/630959/2974197

    Pour le WTF : WTFJS

    Tes difficultés avec NodeJS viennent peut-être du positionnement assez « bas niveau », comparé à Rails ou Django par exemple ?

    En plus de la doc officielle, je peux te recommander le blog « How to Node », et les vidéos du « NodeCamp ».

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.