Full-Stack Developer & Designer
Parfois, les meilleurs défis naissent de conversations anodines. Imaginez la scène : je traîne avec un pote quand il me parle de ce truc appelé Advent of Code. "C'est comme Noël pour les programmeurs", qu'il me dit. "Chaque jour du 1er au 25 décembre, tu as un nouveau casse-tête de programmation à résoudre."
Mon cerveau s'est immédiatement dit : "Je pourrais rendre ça plus intéressant, non ?"
Spoiler : c'était bien plus compliqué que prévu, mais ça valait totalement le marathon de code qui a suivi.
Pour ceux qui ne connaissent pas, Advent of Code c'est un festival de programmation qui dure tout le mois. Chaque décembre, Eric Wastl publie des défis de programmation quotidiens qui commencent simples et vous font progressivement remettre en question vos choix de vie. Chaque puzzle a deux parties : la première est généralement gérable, puis la deuxième partie vous balance un twist qui vous fait réaliser que vous avez mal appréhendé le problème depuis le début.

Le truc génial ? Vous pouvez le résoudre dans n'importe quel langage de programmation. La plupart des gens choisissent leur langage préféré et s'y tiennent pour tout le mois.
Mais oĂą serait le fun lĂ -dedans ?
Après avoir entendu parler d'Advent of Code, mon cerveau a décidé de chercher encore plus loin : "Et si j'utilisais un langage de programmation différent chaque jour ?"
Ça semblait être l'occasion parfaite de :
Quelle difficulté ça pouvait représenter d'apprendre 25 langages de programmation en 25 jours tout en résolvant des puzzles de plus en plus difficiles ?
Narrator voice: It was very hard.
J'ai commencé par lister les langages que je connaissais bien, mélangés avec d'autres dont j'avais entendu parler mais auxquels je n'avais jamais touché. Ma logique était brillamment défaillante : "Les premiers défis sont censés être faciles, donc je vais commencer par les langages que je ne connais pas et garder ceux que je maîtrise pour les trucs difficiles à la fin."
Le problème ? Je n'avais planifié que les dix premiers langages environ. Je n'avais aucune idée de comment j'allais gérer les quinze jours restants. Grand classique : résoudre le problème d'aujourd'hui, s'inquiéter des problèmes de demain... demain.
Mais attendez, il y a mieux ! J'ai aussi décidé que ce serait "amusant" (pourquoi ??) de tout implémenter en utilisant le TDD (Test-Driven Development). Pour ceux qui ne connaissent pas, le TDD consiste à écrire les tests avant d'écrire le code qui les fait passer. C'est une excellente pratique pour s'assurer que votre code fonctionne comme prévu.

Combiner le TDD avec l'apprentissage quotidien de nouveaux langages ? Du pur génie, non ?
Les dix premiers jours se sont étonnamment bien passés. J'ai pris des langages que je connaissais – Python, JavaScript, Java – implémenté des tests unitaires simples, et écrit du code qui les faisait passer. Les premiers puzzles étaient effectivement plus faciles, et je me sentais plutôt bien dans mon élan.

J'ai même commencé à partager mes progrès quotidiens sur la communauté Reddit officielle d'Advent of Code. La réaction était encourageante ! Les gens étaient vraiment intéressés par mon expérience "un langage par jour". La communauté là -bas est incroyable – vous y trouverez tout, des solutions élégantes aux délires complets comme résoudre les puzzles en un minimum de lignes ou utiliser des langages complètement obscurs.

C'était parfait parce que je commençais à manquer de langages familiers. La communauté Reddit est devenue ma bouée de sauvetage pour découvrir de nouveaux langages et des guides de démarrage rapide.
Puis la seconde moitié de décembre est arrivée, et tout a changé.
Non seulement les défis devenaient considérablement plus difficiles, mais je devais maintenant gérer des langages comme F#, Q, D, C, et R. Ma routine quotidienne est devenue ce magnifique chaos :

Je passais plus de temps sur la configuration des langages que sur la résolution des problèmes !
À un moment, en regardant ma liste de langages, j'ai réalisé que j'étais accidentellement en train de parcourir l'alphabet. F#, puis G (Go), puis... attendez, est-ce que j'allais vraiment tenter tout l'alphabet ?
Laissez-moi prendre un moment pour apprécier le chaos que j'ai créé dans mon environnement de développement. Imaginez : chaque jour, j'installe de nouveaux compilateurs, interpréteurs, gestionnaires de paquets et outils de développement. Certains langages nécessitaient des versions spécifiques de dépendances. D'autres avaient des exigences conflictuelles.
Ma pauvre installation WSL (Windows Subsystem for Linux) ressemblait au sous-sol d'un collectionneur compulsif – couches sur couches d'environnements de développement à moitié configurés, chacun laissant des traces de son existence. Au jour 20, je n'étais même plus sûr de ce qui fonctionnait encore.

Le point de rupture est arrivé quand j'ai essayé d'installer un langage obscur qui nécessitait une version spécifique d'une bibliothèque qui entrait en conflit avec quelque chose que j'avais installé pour le langage d'un jour précédent. Tout le système est devenu si instable que j'ai juste... recommencé. Deux fois.
Les derniers défis étaient vraiment difficiles. On parle d'algorithmes complexes, de structures de données, et de problèmes qui vous font fixer votre écran en vous demandant si vous avez oublié comment coder.
Ma stratégie a évolué : je résolvais d'abord chaque puzzle en Python (ma zone de confort) pour comprendre le problème et valider mon approche. Ensuite, j'essayais de porter la solution vers le nouveau langage que j'apprenais ce jour-là .
Ce n'était pas de la triche – c'était de la survie. L'alternative était de passer des journées entières coincé sur une syntaxe inconnue ET des défis algorithmiques complexes simultanément.
Quand le 25 décembre est finalement arrivé et que j'ai posté ma dernière solution, le sentiment d'accomplissement était incroyable. Je l'avais vraiment fait; 25 jours, 25 langages, 50 parties de puzzles résolues.
Le meilleur ? La communauté l'a remarqué. J'ai fini par être sélectionné comme l'un des 10 meilleurs dépôts de l'année sur le subreddit Advent of Code. Pour ma première année de participation, c'était incroyable !

J'étais aussi fier de maintenir une série parfaite de commits – chaque jour de décembre avait au moins un commit dans mon dépôt de solutions. Il y a quelque chose de satisfaisant à voir ce graphique complètement vert.
Au-delà de l'évidence ("n'installez pas 25 environnements de programmation différents en un mois"), cette expérience m'a enseigné des leçons précieuses :
Chaque langage a sa propre philosophie et ses forces. Certains excellent dans les opérations mathématiques, d'autres dans le traitement de texte. Certains privilégient la sécurité, d'autres la performance. Certains vous font écrire des romans (Coucou Java), d'autres vous permettent d'exprimer des idées complexes en quelques lignes.

La partie la plus frustrante n'était pas le codage – c'était la configuration de l'environnement. Chaque langage a son propre écosystème, ses gestionnaires de paquets, ses frameworks de test, et ses bizarreries. Prévoyez du temps pour ça, surtout si vous explorez un territoire inconnu.
La communauté Advent of Code sur Reddit était inestimable. Pas seulement pour découvrir de nouveaux langages, mais pour la motivation, l'aide au débogage, et célébrer les petites victoires. La programmation peut être isolante ; la communauté la rend amusante.
Essayer d'apprendre une nouvelle syntaxe tout en implémentant des pratiques de test appropriées était... ambitieux. Les deux sont des compétences précieuses, mais les combiner créait une charge cognitive inutile. Choisissez un objectif d'apprentissage à la fois.
Certains langages que je pensais difficiles se sont révélés délicieux (Rust). D'autres que j'imaginais simples, m'ont posé des défis inattendus (Haskell).
Les langages de programmation fonctionnelle m'ont poussé à penser différemment la résolution de problèmes. Les langages avec des paradigmes uniques m'ont forcé à complètement restructurer mon approche de certains problèmes.
Absolument, mais avec des modifications. La contrainte "un langage par jour" était à la fois la force et la faiblesse du défi. Ça forçait l'exploration rapide mais empêchait la compréhension profonde.
Pour les futurs événements Advent of Code, je pourrais essayer :
...
Advent of Code 2022 était plus qu'un simple défi de programmation, c'était une exploration d'un mois des langages de programmation, des paradigmes, et de mes propres limites. J'ai découvert des langages que je veux explorer davantage, renforcé mon appréciation pour de bons outils, et gagné en confiance dans ma capacité à maîtriser rapidement de nouvelles technologies.
Plus important encore, ça m'a rappelé pourquoi j'aime la programmation en premier lieu. Chaque langage est la tentative de quelqu'un de rendre l'expression d'idées en code meilleure, plus rapide, ou plus élégante. Expérimenter cette diversité de première main était vraiment inspirant.
Si vous envisagez de participer à Advent of Code, je le recommande vivement. Peut-être ne poussez pas la bêtise aussi loin que moi avec le changement de langages et le TDD, mais profitez définitivement du défi. La communauté est accueillante, les problèmes sont bien conçus, et vous apprendrez plus que vous ne l'attendez.
Et qui sait ? Vous pourriez bien trouver votre nouveau langage de programmation préféré en chemin.
Vous pensez à essayer Advent of Code vous-même ? N'hésitez pas à me contacter – j'adorerais entendre parler de vos propres aventures dans les défis de programmation quotidiens.
Dans le même esprit, n'hésitez pas à jeter un œil à mon post où je raconte comment j'ai organisé et réalisé ma propre compétition inspirée d'Advent of Code : AlgoHive