Atelier Haiku Coding : comment créer du beau code?

Je reviens d’Agile Game France 2015, qui s’est déroulé sur 2 jours, vendredi et samedi derniers, au Domaine de Fompeyre à Bazas. Mis à part l’événement qui était magnifique et les rencontres très enrichissante, et je reviendrai plus tard sur l’événement, je souhaite partager quelques expériences en détail. J’ai profité de l’événement pour expérimenter à nouveau le Haiku Coding. Durant le Geek Camp 2014, nous avions déjà tenté cette petite expérience qu’est le Haiku Coding. L’idée était simple : comment rendre du code beau, lisible, intéressant, en respectant quelques règles du Haiku.

Mélanger poésie japonaise et code, vraiment ?

Pour commencer, qu’est-ce qu’un haiku? Après 5 minute passées sur l’article Wikipedia, je me sens un expert, alors je me lance. Un haiku est composé de 3 vers, est beau, simple et suit la règle de kigo, c’est à dire qu’il doit parler d’une saison. Voici quelques exemples de haiku:

Dans la vieille mare,

Une grenouille saute,

Le bruit de l’eau.

Un autre haiku:

De bouger il n’a pas l’air.

Pourtant il travaille dure

Son champ, le paysan!

Mais nous écrivons du code quand même

Et si nous souhaitons créer un haiku de développeur, celui-ci pourrait ressembler à ça:

Speedy unit tests.

Fast action replay ninja.

Pow pow pow pow pow.

Ou alors nous pourrions prendre quelques règles de composition d’un haiku et arriver à ce résultat. Comme règles, gardons les suivantes:

  • La concision (pas plus de 3 lignes de code significatives)
  • La beauté
  • La simplicité
  • La règle de kigo : inclure un élément de la saison. Et c’était la saison d’Agile Game France lors de la dernière session.

Allons-y, la tête la première

Chaque développeur, en binome, a donc pris un langage, son ordinateur, et a commencé à écrire un code respectant ces 4 règles. On se donne 5 à 10 minutes. Les premiers résultats montrent des codes simples, de 3 lignes significatives, si l’on exclu les ouvertures/fermetures de bloc et les déclarations, et d’une certaine beauté, sur le thème de la saison en cours. La saison peut-être “l’été et du geek camp” ou “Agile Game France 2015”. Nous nous présentons nos codes en fin d’itération. Après quelques remarques, nous tentons de les lire : lire le code est très difficile pour certains. Le code n’est pas beau à lire pour d’autres. Nous tentons de les exécuter : quelques-uns seulement s’exécutent (1/4 au Geek Camp, la moitié à Agile Game France).

Nous pouvons mieux faire

L’itération 1 étant terminée, nous pouvons partir pour l’itération 2: chacun repart sur son code avec comme règles supplémentaire de devoir “lire” son code à voix haute et de pouvoir l’exécuter. Encore une fois, présentation, lecture et exécution du code. Les critiques sont bien plus positives. Quelques remarques générales, issues des participants après ces 2 itérations :

  • Le code écrit avec la poésie en tête est expressif et exécutable. Il pourrait être utilisé pour une vraie application de production.
  • Aucun framework n’est nécessaire pour exécuer le code, sauf celui de base du langage.
  • Aucun commentaire n’est nécessaire pour rendre le code beau, simple, concis et parlant
  • Le langage n’est pas une barrière pour expliquer ou lire le code

Plus besoin de repères

Nous tentons donc une dernière itération, mais cette fois-ci, avec l’obligation de changer de langage. Chacun crée donc un nouveau programme, très rapidement, et le montre à tout le monde. Aucun langage n’empêche de rendre le haiku de code d’être lisible. Toutefois, dans certains cas, nous nous rendons compte que la technologie n’est pas aussi adaptée (passage de shell bash à python pour des opérations fichier par exemple).

Voici un exemple de Coding Haiku:

  
    'use strict'
    var bonnesIdées = ['des jeux', 'du fun', "des M&M's"];

    var on = {
      seQuitte: function (horaire) {
        process.stdout.write('On se quitte à ' + horaire + '\n');
      },
      seDonneRendezVous: function(lAnnée) {
        process.stdout.write('On se donne rendez-vous en ' + lAnnée+ '\n');
      },
      revientAvecPleinDe: function(bonnesIdéesL) {
        process.stdout.write('On revient avec plein de bonnes idées : ' + bonnesIdéesL.join(', ') + '\n' );
      },
    };

    function a(horaire) {return horaire;}
    function lAnnée(année) {return année;}

    /* Notre Haiku */
    on.seQuitte(a("16h"));
    on.seDonneRendezVous(lAnnée("2016"));
    on.revientAvecPleinDe(bonnesIdées);

    /*                  - Jean-Pierre & Bastien */
  

Pour introduire l’exercice, je vous propose mes slides:

Voici quelques exemples de ce qui a été créé: https://github.com/okiwi/haikucoding . N’hésitez pas à reproduire l’expérience chez vous et à proposer votre Haiku !