Meilleurs Voeux à toutes et tous !

Je démarre cette nouvelle année par… un coup d’oeil dans le rétroviseur ! En décembre 2021, comme chaque année depuis quatre ans, j’ai pris un plaisir fou — et quelques sueurs froides aussi — avec Advent of Code.

April 1, 2022

💫 Je démarre cette nouvelle année par… un coup d’oeil dans le rétroviseur ! En décembre 2021, comme chaque année depuis quatre ans, j’ai pris un plaisir fou — et quelques sueurs froides aussi — avec Advent of Code.

📆 Advent of Code, c’est une sorte de calendrier de l’avent, sauf qu’au lieu de sortir un chocolat de la petite fenêtre tous les matins, c’est un problème algorithmique qu’on a le droit de découvrir chaque jour du 1er au 25 décembre. Une proposition alléchante qui émane de Eric Wastl, ingénieur adepte de Python, féru de jeux de réflexion, et qui de jour, travaille pour un magasin en ligne de jeux de cartes à collectionner.

Ce que je trouve particulièrement attachant dans Advent of Code c’est …

…un fil rouge narratif sur le thème de Noël, souvent parsemé de petites allusions et clins d’œil à la culture geek (mais qui ne sont jamais essentiels pour résoudre les problèmes posés). 🎄

…des exercices de difficulté graduée et progressive; le premier jour est souvent quasi-trivial et se résout en une ligne de code ou deux ; mais rapidement « ça pique » et on se retrouve en difficulté… à moins d’être très, très entraîné·e. 🏋🏽‍♀️

…un côté « épreuve technique de Mercotte » sauf que ce n’est pas « lisez bien la recette » mais « lisez bien la spec ». Il y a souvent des petits pièges, pas tellement des choses qui ne sont pas dites noir sur blanc, mais plutôt des détails qu’on a tendance à survoler trop vite et qui peuvent faire perdre beaucoup de temps par inattention. 🍰

…le libre choix des outils : contrairement à des plateformes comme CodeWars ou Codingame qui proposent de soumettre du code source qui sera compilé et exécuté dans un « bac à sable » pour vérifier qu’il trouve bien la solution, quitte à imposer certaines limites de temps d’exécution, Advent of Code vous demande seulement de découvrir la réponse algorithmique à une question qui dépend d’un « input », un fichier texte dont le contenu est personnalisé pour chaque joueur. Vous pouvez choisir le langage qui vous plaît, mais aussi tous les modules ou librairies complémentaires qui peuvent vous aider et le faire tourner sur un supercalculateur si ça vous chante. Ou alors, le faire sous Excel. Ou changer de langage tous les jours. 🦋

…un micro-prisme sur la « dette technique » qui est souvent une excellente source de remise en question. En effet, la solution à ces exercices constitue du code « jetable » par excellence, pour lequel par exemple vous ne devriez pas avoir besoin d’écrire de tests unitaires… sauf que, sauf que ! Sans prendre le risque de divulgâcher, ce n’est pas toujours le cas, et il arrive que la complexité intrinsèque des problèmes rende très utile un jeu de test, voire vous oblige à déployer TDD presque scolairement. De plus, l’épreuve du jour est toujours en deux parties, avec une deuxième partie qui généralement ajoute un petit cran de complexité et pose un défi de réutilisation du code qu’on a écrit pour la première partie ! ⚙️

…un parcours de découverte de certains « grands classiques » de l’algorithmique, mais revisités, histoire de ne pas tomber dans des questions d’entretien d’embauche vues et revues un million de fois, avec un petit twist qui leur redonne de la fraîcheur — mais qui, mine de rien, peut constituer un très bon entraînement ou une occasion de réviser. 🔢

…un petit aiguillon compétitif, mais qui ne se prend pas non plus trop au sérieux. Oui, on peut chercher à être dans le « Leaderboard » global de celles et ceux qui finissent dans les 100 premiers. Et dans ce cas, il vaut mieux s’accrocher et se lever tôt (les exos sont mis en ligne à 6h du matin). Mais on peut très bien se fixer soi-même des objectifs différents : par exemple simplement les finir le jour-même de leur sortie. Ou si c’est encore trop compliqué, les finir en moins de deux mois… ou juste les finir, et même ça ce n’est pas une obligation ! C’est juste un jeu. 🏆

…une occasion de partager entre ami·e·s ou entre collègues. La plupart des Slacks où je traîne avec mes ami·e·s dév ont maintenant un channel « Advent of Code » et on s’encourage (ou parfois on se charrie un peu). 👩🏽‍🤝‍👨🏻

…un superbe outil pour accompagner des développeuses et développeurs dans leur parcours d’apprentissage. Depuis peu, j’ai commencé à m’en servir de façon systématique dans nos parcours de recrutement et d’embarquement pour CodeWorks : c’est à la fois un bon indicateur sur l’aisance algorithmique, mais aussi comme d’autres exercices du type kata, sur les habitudes et les bonnes pratiques. 🌱

…un moment d’apprentissage sur soi. Tous les ans, je me dis que ce n’est qu’un jeu, que je vais y aller de façon détendue, que ce n’est pas grave de finir ou de ne pas finir. Et à chaque fois, je me rends compte que ne pas parvenir à traiter un problème me met dans tous mes états. Je ronge l’os, je m’obstine, j’ai du mal à lâcher. Certains problèmes ardus m’ont fait renoncer à ma séance de sport du dimanche et ça, ce n’est pas terrible ! (Mais comme on est en décembre, c’est aussi une excuse pour rester au chaud.) Quand ma chérie me voit dans cet état, elle me dit « Mais pourquoi tu t’obstines à trouver tout seul, alors que tu viens de me dire que tu as débloqué un de tes collègues sur un gros bug qui le coinçait ? Pourtant, ça devrait être automatique pour toi de faire ça en collaboration… avec tout ce que tu racontes sur le pair et l’ensemble programming ?!» 😅

(Vous savez quoi ? Elle a totalement raison. On n’est pas mariés pour rien…) 😍

Pour aller plus loin :

  • Le site https://adventofcode.com — comme dit Eric, ça fait 6 ans, vous pouvez faire une étoile par jour pendant presque un an entier si vous commencez maintenant !
  • Synacor Challenge, un autre jeu de réflexion/code par Eric Wastl
  • Un chouette billet de Thibault Jouannic sur son AoC 2021, avec des éclairages plus « tech »

CodeWorks, un paradigme d'ESN équitable, solidaire et durable

Notre Manifeste est le garant des droits et devoirs de chaque CodeWorker et des engagements que nous avons vis-à-vis de lui.
Il se veut réaliste, partagé et inscrit dans une démarche d'amélioration continue.

Rejoins-nous !

Tu veux partager tes connaissances et ton temps avec des pairs empathiques, incarner une vision commune de l'excellence logicielle et participer activement à un modèle d'entreprise alternatif, rejoins-nous.