Journal « Si Hemingway écrivait en JavaScript »

Posté par  . Licence CC By‑SA.
Étiquettes :
13
3
déc.
2014

I / Bookmark

"Le concept du livre If Hemingway Wrote JavaScript, c'est d'explorer les libertés de style de JavaScript en les mettant entre les mains (imaginaires) des poids lourds de la littérature anglophone, de Shakespeare à Douglas Adams en passant par James Joyce", résume Ars Technica.

Apparemment, tous les exemples du livre fonctionnent et certains sont très originaux. Voir ci-après.

Lu sur http://www.courrierinternational.com/article/2014/12/03/si-hemingway-ecrivait-en-javascript
Tiré de http://arstechnica.com/information-technology/2014/11/holiday-reading-for-a-certain-sort-if-hemingway-wrote-javascript/

II / Forum Javascript

Ce morceau de code, tiré du livre en question, affiche les nombres premiers inférieurs au nombre passé en paramètre. C'est beau. Et ça marche. Avec de vrais morceaux de H2G2 dedans. Mais je n'ai pas tout compris … Une bonne âme se dévouera-t-elle ?
(Bon je n'ai pas vraiment cherché, pressé que j'étais de le partager avec vous donc je m'y met.)

// Here I am, brain the size of a planet, and they ask me to write Javascript
function kevinTheNumberMentioner(_){
  l=[]
  /* mostly harmless --> */ with(l) {

    //Sorry about all this, my babel fish has a headache today...
    for (ll=!+[]+!![];ll<_+(+!![]);ll++) {
      lll=+!![];
      while (ll%++lll);
      //I've got this terrible pain in all the semicolons down my right-hand side
      (ll==lll)&&push(ll);
    }
    forEach(alert);

  }

  //You're really not going to like this...
  return [!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]];
}
  • # Version "traduite"

    Posté par  (site web personnel) . Évalué à 8. Dernière modification le 03 décembre 2014 à 21:32.

    Voila une version un peu plus lisible.

    function kevinTheNumberMentioner(number){
        var primes = [];
        for (var idx = 2; idx < number + 1; idx++) {
            var divisor = 2;
            while (idx % divisor != 0) {
                divisor++;
            }
    
            if(idx == divisor) {
                primes.push(idx);
            }
        }
        primes.forEach(alert);
    
        return 42;
    }

    Javascript étant ce qu'il est, [] est considéré comme true qui est considéré comme 1, donc par exemple !+[]+!![] vaut 2 (false + true + true).

    Une fois le nom des variables remplacés (l, ll et lll), la compréhension est également grandement facilitée.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 3.

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

  • # Des pistes

    Posté par  . Évalué à 1. Dernière modification le 03 décembre 2014 à 21:31.

    Déjà _ est un nom de variable valide. J'ignorais.

    ll=!+[]+!![]; // => ll = 2
    ll<_+(+!![]) // => ll < _+1
    
    return [!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]]; // => return 42;

    [edit] grillé par Gilles Meier

  • # Commentaire supprimé

    Posté par  . Évalué à 10.

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

    • [^] # Re: Je suis blasé

      Posté par  . Évalué à 2.

      Je pense que ce qui est intéressant ce n'est pas le code en lui même mais le fait d'attribuer un style à un auteur. Il faudrait voir les autres exemples du livre pour juger.

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 10. Dernière modification le 03 décembre 2014 à 21:54.

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

        • [^] # Re: Je suis blasé

          Posté par  . Évalué à 4.

          En l'occurence c'est le style de Marvin l'androïde de Douglas Adams.
          Et tu es sûrement un vieux de la vieille de la programmation mais d'autres, notamment les apprentis vont trouver ça sympa. Respire et passe ton chemin.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à 6.

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

            • [^] # Mouais ...

              Posté par  . Évalué à 4.

              Je vais casser un mythe, mais ce bouquin est très surfait je le déconseille : seuls 3 chapitres sont intéressants (le 4, le 5 et le 8), sinon dans l'ensemble ce livre a très mal vieilli : ça parle essentiellement de comment faire pour contourner les différences entre les navigateurs (comprendre "comment survivre à Internet Explorer") : John Resig est l'auteur de jQuery donc il en connaît un rayon là dessus, mais c'est assez peu intéressant en 2014 :

              • si on a IE6->9 à supporter on utilise jQuery (ou éventuellement une autre bibliothèque qui joue le même rôle)
              • sinon la grande majorité des problèmes a disparu

              Par contre John Resig a fait un petit exercice interactif qui concentre l'essentiel de ce qu'il a écrit d'utile dans son bouquin, et qui lui vaut le coup d'être fait : http://ejohn.org/apps/learn/

              • [^] # Commentaire supprimé

                Posté par  . Évalué à 3. Dernière modification le 04 décembre 2014 à 09:05.

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

                • [^] # Re: Mouais ...

                  Posté par  . Évalué à 5.

                  Je vais essayer de clarifier mon propos : je n'ai rien contre ce bouquin, il n'est pas spécialement mauvais mais il subit la loi du genre quand il s'agit de livre sur le JavaScript : un livre qui a plus de 3-4 ans est obsolète et il faut arrêter de le conseiller aux gens : The Good part de Crockford était un excellent bouquin en son temps, mais il a vraiment pris un coup de vieux, et c'est pareil pour The secrets of the JavaScript Ninja (sauf qu'il a encore plus mal vieilli).

                  Ce livre parle de du JavaScript à l'époque où ECMAScript 3 n'était pas encore universellement supporté, où les API du DOM n'étaient quasiment pas standardisées, avec 2 navigateurs ayant chacun leur vision des choses, et où JavaScript était un langage de script pour faire des animations et des petits widget sympa pour améliorer l'ergonomie des sites internet. Alors qu'aujourd'hui JavaScript c'est :

                  • ECMAScript 5 supporté partout, et ECMAScript 6 qui arrive tranquillement.
                  • JavaScript ce n'est plus seulement le navigateur : c'est aussi nodeJS (serveur), PhoneGap (mobile), et Qt (desktop).
                  • L'arrivée de Chrome a apporté une énorme bouffée d'oxygène au niveau de la standardisation du web, le w3c n'a jamais été aussi actif et aussi utile.
                  • Le JavaScript sert maintenant à faire de vrai logiciels, plus seulement des contrôles d'intégrité coté client sur des applications métier, mais de vrais logiciels : des lecteurs média, des éditeurs de texte (Atom, Brackets), des lecteurs PDF et des clients mails, des jeux, etc.
                  • Depuis que le développement en JavaScript s'est rapproché du développement logiciel plus classique, plein de nouvelles problématiques sont apparues, avec des outils pour y faire face : intégration continue, gestion des dépendances (npm, browserify, grunt, gulp), tests unitaires et fonctionnels de plus en plus indispensables, avec toute une panoplie d'outils, dont certains fonctionnent de concert (mocha et should.js par exemple) alors que d'autre sont en compétition (mocha et QUnit par exemple).

                  Ce livre aborde des problématiques d'une autre époque, et ne donne pas les clés pour faire du JavaScript en 2014, c'est pourquoi aujourd'hui je le déconseille.
                  Si quelqu'un a connaissance d'un bon livre plus récent, qui soit plus d'actualité je suis preneur !

            • [^] # Re: Je suis blasé

              Posté par  (site web personnel) . Évalué à 1.

              "Javascript Ninja" et on a un samouraï en armure sur la couverture :/

    • [^] # Re: Je suis blasé

      Posté par  . Évalué à -3.

      Moi si je fais une relecture de code, et que je vois du code comme ça, j'allume le gars qui a écrit ça! Mais bon, il y avait peut-etre une bonne raison d'obscurcir le code.

    • [^] # Re: Je suis blasé

      Posté par  . Évalué à 8.

      Bah, c'est aussi que les gens font ce qui est à leur portée. C'est 100 fois plus difficile d'écrire du beau code clair que de jouer à obfusquer un algo pondu par quelqu'un d'autre. J'ai l'impression que tu reproches à des enfants de ne pas respecter strictement les règles du foot en jouant au ballon : ils jouent au ballon, c'est déja pas mal, c'est mieux que de rester devant la télé. Les règles, ils les respecteront quand ils seront plus grands. Le côté ludique est important dans la vie.

      Ceci dit, je suis bien d'accord que pédagogiquement, ça n'est pas terrible. On est abreuvés de ce genre de code débile ; à un moment c'était la mode des one-liner perl abscons, il y a eu des périodes brainfuck/whitespace/mooMoo, etc. Ces jeux sont malheureusement souvent présentés comme des "trucs de geeks", et on les associe avec une courbe de progression en informatique : on est un gros nul quand on ne les comprend pas, on progresse quand on les comprend, et on est un dieu quand on les écrit. Le problème, c'est qu'on est rarement confronté à des exemples de ce qu'il faut faire, à moins d'avoir la chance de travailler dans un environnement où on bosse sur du code très propre écrit par des gens très forts. Ça serait vraiment sympa d'avoir plus d'exemples de beau code, qui brille par son élégance et sa simplicité, mais c'est moins vendeur.

      • [^] # Re: Je suis blasé

        Posté par  . Évalué à 2.

        Ça serait vraiment sympa d'avoir plus d'exemples de beau code, qui brille par son élégance et sa simplicité

        Le noyal, pour ceux qui aiment le C bas niveau. Qt, pour ceux qui aiment l'objet et le graphique. La lib standard haskell pour ceux qui aiment le fonctionnel, ou emacs pour ceux qui aiment le fonctionnel un peu moins extrême.

        Les exemples ne manquent pas, je ne parle ici que de ceux que je connais.

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 4.

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

        • [^] # Re: Je suis blasé

          Posté par  . Évalué à 5.

          L'intérêt d'obscursir est complètement esthétique.

          C'est un code supposément écrit par Marvin , un robot doté d'un processeur si puissant qu'un cerveau biologique, pour déployer une puissance de calcul équivalente, devrait mesurer la taille d'une planète .

          Donc l'auteur voulait rendre le code illisible au premier coup d'oeil. Ça n'a aucun intéret didactique, ce n'est pas un livre pour se former à quoi que ce soit, c'est purement ludique !

          • [^] # Re: Je suis blasé

            Posté par  . Évalué à 2.

            Je pense qu'on a bien compris, mais c'est juste que 99% du code sur lequel on peut tomber au hasard d'une discussion est pourri, que ça soit pour jouer ou non. Ce n'est pas un problème particulier, c'est un problème général : si 99% de ce que tu pouvais lire (publicités, magazines, etc) ne contenait que des fautes d'orthographes volontaires, il ne serait pas évident d'écrire correctement.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à 4.

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

            • [^] # Re: Je suis blasé

              Posté par  . Évalué à 0.

              Le code est laid, c'est fait pour. Bref tu fais exprès de ne pas comprendre.
              (En passant j'aurais honte d'écrire "Jore" au lieu de "Genre").

              • [^] # Commentaire supprimé

                Posté par  . Évalué à 2.

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

                • [^] # Re: Je suis blasé

                  Posté par  . Évalué à 0.

                  J'essaie une dernière fois (de défendre une unique page dans un livre qui en compte des dizaines, que je n'ai ni lu ni écrit …)
                  Voici ce que je comprend de l'intention de l'auteur :

                  • Marvin est très intelligent ->
                  • Les robots intelligents font des trucs incompréhensibles ->
                  • Un code à la Marvin devrait être incompréhensible au premier coup d'oeil.

                  C'est tout. On s'en fout que ce soit laid, efficace, que ne sais-je. Il doit juste être illisible.

                  Nouveau non, j'ai déjà croisé "jore" dans un contexte humoristique (eingousef) mais vu que tu l'as mis au moins quatre fois juste sur cette page je vois pas bien où est l'humour. Un peu comme toi et l'utilité du code de Marvin en fait.

                  Salut et merci pour le poisson.

  • # « Si Hemingway écrivait en JavaScript »

    Posté par  (site web personnel) . Évalué à 10.

    Ma foi, on tient une piste intéressante sur les causes de son suicide…

Suivre le flux des commentaires

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