Ce défi de puzzle apporte de la joie dans le monde du code

À minuit le 1er décembre 2015, lorsqu’Eric Wastl a lancé pour la première fois son défi annuel de programmation Advent of Code sur le thème du Père Noël, 81 personnes s’étaient inscrites. Cela correspondait à peu près à sa planification de capacité pour 70 participants. Wastl s’est dit que cet amusement pourrait intéresser quelques amis, des amis d’amis, et peut-être aussi certains de leurs amis.

Mais Wastl, un ingénieur logiciel qui travaille comme architecte principal pour TCGPlayer, une place de marché en ligne pour les jeux de cartes à collectionner, n’avait pas anticipé comment la contagion récursive des médias sociaux pourrait dépasser ces modestes attentes. Il plaisante en disant que le terme technique pour ce qui s’est passé ensuite est : « OH NON ! » En 12 heures, il y avait environ 4 000 participants. Le serveur a failli planter. A 48 heures, il y avait 15 000 personnes, et à la fin de l’événement, le 25 décembre, le grand total était de 52 000. L’année suivante, il a transféré l’opération à Amazon Web Services, et les chiffres ont depuis continué à augmenter.

L’année dernière, peut-être en raison de la pandémie, l’événement a connu une augmentation de 50% du trafic, avec plus de 180 000 participants dans le monde.

Et maintenant encore cette année, des milliers de codeurs de San Francisco à la Slovénie, étudiants, ingénieurs logiciels et programmeurs compétitifs, comptent à rebours jusqu’à Noël avec Advent of Code (AoC). Alors que les calendriers de l’Avent traditionnels offrent des cadeaux quotidiens de chocolat ou de jouets (et certaines versions alternatives offrent des friandises pour chiens, des figurines Jack Daniel’s, Lego ou même des délices numériques via des applications), Advent of Coders déballe de manière ludique des problèmes mathématiques, puis écris des mini-programmes informatiques qui la résolution.

Le plaisir, en partie, réside simplement dans la magie séculaire d’un rituel de vacances. Mais c’est aussi en se soumettant à une agréable perplexité. Peter Norvig, directeur de recherche chez Google, trouve cela amusant parce qu’il fait confiance au créateur, Wastl, « pour que cela en vaille la peine » – de la même manière, dit Norvig, à la façon dont les mots croisés du New York Times font confiance à Will Shortz pour bien faire. par eux. « Il y aura quelques astuces qui le rendront intéressant », dit Norvig, « mais il y a des limites sur la difficulté. »

Le plaisir de coder

À minuit, heure de l’Est des États-Unis (Wastl est basé à Buffalo, New York), tous les soirs du 1er au 25 décembre, un nouveau puzzle s’illumine sur adventofcode.com, intégré dans un récit de câpres de Noël intelligemment composé – un joueur a décrit l’histoire comme « un complot d’excuse s’il y a jamais eu une telle chose. »

L’événement de cette année a bien commencé lorsque les lutins du Père Noël ont perdu les clés du traîneau. Le premier problème plantait le décor comme suit : « Vous vous occupez de vos affaires sur un navire en mer lorsque l’alarme de débordement se déclenche ! Vous vous précipitez pour voir si vous pouvez aider. Apparemment, l’un des Elfes a trébuché et a accidentellement envoyé les clés du traîneau dans l’océan !

Heureusement, les Elfes avaient un sous-marin à portée de main pour de telles urgences, et à partir de là, les participants se sont lancés dans une quête sous-marine de 25 jours. Ils essaient de résoudre deux énigmes par jour (la seconde ajoute un twist, ou plus de difficulté), chacune valant une étoile et quelques éloges : « C’est la bonne réponse ! Vous êtes une étoile d’or plus près de trouver les clés du traîneau.

Chaque joueur gagne une étoile pour avoir résolu un problème, mais si vous êtes le premier à obtenir une étoile, vous recevez 100 points ; si vous êtes deuxième, vous recevez 99 points ; et ainsi de suite, la 10e place gagnant un point.

« Pour sauver Noël », explique le maître du puzzle, « vous devrez obtenir les cinquante étoiles d’ici le 25 décembre. »

bonnet de noel ascii

MS TECH | L’AVENEMENT DU CODE

L’objet d’Advent of Code est de résoudre les énigmes en utilisant le langage de programmation de votre choix (Python est le plus populaire). Les participants utilisent également des stratégies au crochet ou à l’escroc, telles que «la folie Excel», comme le décrit Wastl, ou des rames de papier millimétré, et un nombre surprenant résout les énigmes de Minecraft.

Mais la motivation plus large varie d’un joueur à l’autre. Certains le considèrent comme une mise au point annuelle de leurs compétences en programmation ; d’autres y voient l’occasion idéale d’apprendre à coder ou d’essayer une nouvelle langue. José Valim, créateur du langage de programmation Elixir, diffuse en direct ses solutions AoC sur Twitch.

Au sommet du classement mondial, qui classe les 100 joueurs avec le score total le plus élevé, des programmeurs compétitifs comme Brian Chen (son pseudo est « betaveros ») et Andrew He (« ecnerwala ») sont à la recherche de vitesse. Ingénieur logiciel de sécurité travaillant sur le chiffrement de bout en bout chez Zoom, Chen s’est classé premier l’année dernière (et l’année précédente), tandis qu’il arrivait juste derrière.

« Aller vite est amusant », dit Chen, « tout comme optimiser tout ce qui vous permet d’obtenir des commentaires assez immédiats. Il y a beaucoup de petits boutons à régler, et beaucoup de petits moments pour être fier de l’endroit où vous avez fait le bon choix ou préparé quelque chose qui s’est avéré utile.

Chen et He, deux anciens élèves du MIT en informatique qui vivent dans la région de la baie, sont des rivaux amicaux qui ont participé ensemble à des défis de programmation au fil des ans – dans la même équipe au concours international de programmation collégiale. (ICPC) et en tant que concurrents de Codeforces et de Code Jam de Google. Cette année encore, Chen bat He. « Pour être honnête, c’est parce qu’il est un peu meilleur que moi » – meilleur dans diverses astuces et implémentations qui optimisent la vitesse – « mais je n’aime pas l’admettre », déclare He, ingénieur fondateur de la startup Modal, qui construit infrastructure et outillage pour les équipes data.

Le classement est hors de portée pour la majorité des participants, d’autant plus que les énigmes deviennent de plus en plus difficiles de jour en jour. Kathryn Tang, qui dirige une équipe d’opérations d’ingénierie chez Shopify, s’est classée 36e au premier jour et 81e au troisième jour, mais elle savait que son statut de leader ne durerait pas longtemps. « Je fais ça pour le plaisir en utilisant des feuilles de Google », dit-elle.

L’élément du concours, cependant, est reproduit – chez Shopify et Google et dans de nombreuses entreprises, grandes et petites – avec des classements privés, ainsi que des canaux de discussion dédiés où les joueurs partagent des solutions et examinent les problèmes lors des autopsies.

« La compétitivité aide à l’engagement », a déclaré l’ingénieur Alec Brickner, commentant dans une chaîne Slack à Primer.ai, une startup de traitement du langage naturel à San Francisco (Brickner a fait le classement sur quelques jours jusqu’à présent).

« Meh », a répondu son collègue Michael Leikam. « La récompense pour moi est la joie de coder. »

John Bohannon, directeur scientifique de Primer, a appuyé cela avec un emoji : « SAME. »

Bohannon aime aussi l’histoire idiote qui pose les problèmes, mais l’intrigue a peu ou pas d’utilité. « Les solveurs de speed-demon ignorent complètement l’histoire, se concentrant sur les variables du problème à résoudre et s’y attelant », dit-il.

Nora Petrova, data scientist et ingénieur au bureau de Primer à Londres, au Royaume-Uni, est là pour la beauté, pas pour le sport : « J’aime le drame qui se déroule dans chaque puzzle », dit-elle. Par exemple, le quatrième jour, un calmar géant s’est attaché au sous-marin – il voulait bien sûr jouer au bingo. L’entrée du puzzle était un ensemble aléatoire de 100 planches de bingo, et le défi consistait à prédire la planche gagnante et à la donner au calmar.

Aimer OU EXCLUSIF Le detesté

La principale motivation de Wastl dans la création d’Advent of Code était d’aider les gens à devenir de meilleurs programmeurs. « Les débutants qui se lancent dans la programmation sont les personnes dont je veux en tirer le meilleur parti », dit-il. « La mesure du succès pour la plupart des gens devrait être ‘Combien de nouvelles choses ai-je apprises ?’ – et non ‘Est-ce que j’étais l’une des personnes les plus rapides au monde à résoudre ce casse-tête ?’ »

Russell Helmstedter, professeur de collège à la De Anza Academy of Technology and the Arts, à Ventura, en Californie, utilise Advent of Code pour enseigner Python à ses élèves de sixième, septième et huitième années. Ils ont abordé les deux premiers problèmes ensemble en classe. Du point de vue de l’enseignement, les problèmes sont des exercices efficaces car si vous échouez, vous pouvez simplement réessayer, tout à fait dans l’esprit du développement logiciel piloté par les tests.

Helmstedter a constaté que certains de ses étudiants étaient un peu dépassés par le défi à deux volets – déchiffrer le problème et coder une machine pour le résoudre – mais la plupart ont embrassé la lutte. « J’aime que ce soit difficile à faire », a déclaré un étudiant lors d’un sondage. Et un autre a déclaré : « Honnêtement, il n’y a aucun inconvénient. J’aime vraiment la façon dont vous commencez à travailler progressivement vers un objectif. Bien que le classement des questions à choix multiples de l’enquête « semble » a suscité un « Je déteste ça », 41 répondants ont choisi « J’aime ça » (à des degrés divers) et huit « J’adore ça. »

renne ascii

MS TECH | L’AVENEMENT DU CODE

À l’Université de Ljubljana, en Slovénie, l’informaticien Janez Demšar utilise les problèmes AoC à la fois en tant que professeur et pour perfectionner ses propres compétences (il fait partie de l’équipe principale d’Orange, une boîte à outils open source d’apprentissage automatique et de visualisation de données). « J’ai besoin d’avoir une pratique régulière, comme un violoniste qui joue dans un orchestre et enseigne mais a encore besoin de petites pièces pour pratiquer », dit-il. « Donc, ce sont mes études. » Demšar enseigne la programmation 101 à un groupe hétérogène de plus de 200 étudiants. « Ma plus grande préoccupation », dit-il, « est de savoir comment garder ceux qui connaissent déjà une partie (ou beaucoup) de la programmation intéressés et occupés. Les tâches AoC sont excellentes car elles nécessitent diverses compétences », du codage pur aux algorithmes.

Gregor Kikelj, un étudiant de troisième année en mathématiques à l’université, a essayé Advent of Code pour la première fois en 2019. Il a assez bien réussi pour décrocher un stage chez Comma.ai (travaillant sur Openpilot, son logiciel pour les systèmes de conduite semi-automatiques), depuis le fondateur de l’entreprise était également en compétition. Et Kikelj a amélioré sa note dans le cours de programmation (avec un autre professeur), car chaque problème résolu valait des points supplémentaires à l’examen final, ainsi que des points bonus pour être placé dans le classement.

Kikelj (« grekiki ») se levait tous les matins pour lancer le puzzle – 6 heures du matin en Slovénie – et s’est classé 52e au classement général, accumulant un total de 23 points d’examen supplémentaires. « Après cette année-là, ils ont plafonné le nombre de points que vous pouvez recevoir à 5 », se souvient-il. Mais il se lève toujours avec le soleil pour bondir sur le puzzle. Cette année, son meilleur classement, le cinquième jour, était 25e – il vise à rester dans le top 100. « Nous verrons comment cela se passe à mesure que les problèmes deviennent plus difficiles », déclare Kikelj.

Comment faire un classement

Si le classement est votre jeu, la concurrence est féroce et le compte à rebours quotidien est la clé – les joueurs attendent comme un faucon que le puzzle tombe, puis cliquez sur lickety-split pour télécharger. L’année dernière, cette « explosion de trafic géante synchronisée à une seule seconde » (comme le décrit Wastl) a même troublé les équilibreurs de charge d’Amazon.

L’AoC Subreddit – l’une des nombreuses communautés sur Internet – regorge de plaisanteries à l’intérieur du baseball sur la façon de l’emporter (avec des solutions et des fils d’aide, ainsi que de l’auto-satire et des mèmes). Mais la meilleure ressource est peut-être le billet de blog de Brian Chen sur « comment faire un classement ».