On a terminé le FALL CHALLENGE 2021

Notre mission Lever la malédiction des cinq guerriers.

Notre équipe : 4 développeurs tous fans d'escape games et remontés à bloc.

Nos outils : Le javascript, la réflexion, l'intuition et surtout la coopération.

Notre objectif : Finir les premiers bien sûr !!

Le challenge

Pour le commun des mortels, CodinGame.com est une plateforme proposant une multitude d'exercices de programmation. Le site est très orienté recrutement mais possède un aspect ludique très attractif. Les exercices sont scénarisés et animés. On peut par exemple essayer de défendre Sion dans Matrix ou contrôler Batman évoluant sur un building pour désamorcer une bombe. Le tout disponible dans une multitude de langages au choix de l'utilisateur.

Pour aller plus loin, la plateforme propose également un volet escape game à résoudre en équipe. Notamment dans le cas présent, un évenement compétitif à grand échelle : le fameux FALL CHALLENGE 2021.

C'est bien connu, à Marmelab, nous adorons les défis, nous adorons jouer et évidemment coder. Nous avons donc constitué une petite équipe pour tenter de relever le challenge le plus rapidement possible.

Challenge

L'exaltation

Début de l'épreuve 28 Octobre 2021 18h00.

L'interface est très bien adaptée. Le jeu se présente à la manière d'un point and click sur lequel nous pouvons interagir à l'aide d'un IDE intégré à l'interface. Chaque participant peut voir l'éditeur des autres et "pair programmer" avec l'un ou l'autre. On peut alterner d'un usage "code first", pour lequel notre fonction devra retourner le résultat, à un usage "manual first", où nous devrons saisir le résultat "à la main". Cela rend le challenge accessible à des non développeurs.

Dans leur grande majorité, les énigmes n'ont pas une complexité exceptionnelle. Mais ce qui rend l'usage du code pertinente, c'est la quantité énorme de données à traiter et à comprendre. Les principaux concepts nécessaires sont donc la manipulation de listes ou d'arbres. Nous déployons donc notre attirail : .map(), .filter(), .reduce() et récursivité.

Swiss army

Le travail en équipe fonctionne. Certains privilégient une tâche ou une autre. La communication est fondamentale pour informer des découvertes, demander de l'aide ou encore tester des hypothèse. De ce point de vue, aucun soucis pour nous : c'est notre lot quotidien. On travaille constamment en petites équipes et on connait déjà à peu près les forces et faiblesses de chacun.

Le jeu avance, et notre satisfaction avec.

Le recul

Une fois l'effet waouh passé, nous commençons à prendre un peu de recul.

Notre principal constat : ce n'est pas de cette façon que l'on apprend à faire du "beau code". La rapidité prime, le temps de réflexion est réduit à son minimum. Dans ces conditions, on produit souvent des fonctions renvoyant seulement des fractions du résultat, que l'ont interprètera ensuite directement ou que l'on injectera manuellement dans d'autres fonctions.

On se retrouve très loin des valeurs prônées par marmelab :

  • lisibilité et réusabilité du code.
  • testabilité
  • éviter toute duplication
  • mettre l'accent sur le naming

Tout ça a vite été mis de coté, avec un léger sentiment de honte, qui s'atténue finalement à chaque petite victoire remportée.

Un principe subsiste tout de même : la rapidité de livraison. Tout est fait pour que le "produit" soit prêt le plus rapidement possible, de ce coté là, on n'a pas perdu nos repères.

On comprend bien une chose : Dans un contexte ludique et compétitif, cette façon de travailler fonctionne. Mais il faut vraiment la proscrire dans un contexte professionel où la durabilité importe.

La déception

500, 502, 504

Malheureusement, voilà les principaux "codes" que l'on a retenu du jeu.

Parce que, environ 30 minutes après le départ du challenge, le site commence à montrer des signes d'instabilité. Et au bout d'un certain temps, le site semble totalement figé pour nous (et pour d'autres au vue des messages que nous voyons sur le Discord de l'évènement).

Une chose que les organisateurs ne semblent pas avoir bien planifié, c'est bien la popularité de l'évènement. Dans ce contexte, l'aspect compétitif nous est vite apparu comme absurde. On comprend très rapidement que celui qui finira le premier ne sera pas seulement celui qui est le plus doué, mais surtout, celui qui subit le moins d'erreurs de connexion. Et que choisir de commencer le challenge au moment du lancement va finalement grandement dégrader notre expérience de jeu.

Tant pis, dans ces conditions, nous prenons une pause, laissant éventuellement le temps au serveur de respirer un peu. Mieux vaut s'occuper autrement que de rager bêtement des heures devant une page web figée.

La victoire enfin

Une petite heure est passée. Nous avons pu terminer le challenge dans des conditions normales. Le "fun" est finalement vite revenu. Étrangement, le fait de chercher désormais sans pression nous permet d'être plus efficace, plus rapide.

Cela confirme notre impression précédente : la pression ça peut marcher, ça peut même être amusant, mais ce n'est définitivement pas la meilleure méthode de travail.

Et finalement : le succès. Les 5 guerriers sont sauvés !

Tout compte fait, et malgré les désagréments techniques, notre score reste assez satisfaisant pour nous. Nous sommes la 110e équipe à finir la mission (sur plus de 3000).

Et maintenant le challenge terminé, nous sommes 866e en temps de jeu avec 3h19. On ne sait pas bien ce que le classement révèle au final mais on retiendra surtout un bon moment passé, et une satisfaction d'avoir su résoudre tous les défis proposés.

Resultat

Prêts pour le prochain tour

Tout n'était pas parfait, mais l'expérience reste très agréable.

On vous conseille fortement les différents escape games proposés par la plate forme CodinGame. Pour vous excercer ou simplement vous amuser.

Conscients des problèmes rencontrés, l'équipe de CodinGame annonce travailler pour améliorer l'expérience de jeu et le classement. Et ils annoncent déjà la préparation d'un prochain évènement similaire : "le Spring Challenge"

Pour nous, une chose est sûre : nous y serons.

Did you like this article? Share it!