Dans ce billet, j’aimerais vous parler de Pokémon et de programmation. Les deux thèmes peuvent vous paraître assez éloignés, mais ils sont pour moi très liés.
- Un jour je serai le meilleur dresseur
- L'ADSL, je veux l'avoir et je l'aurai
- Dans une grande clarté il apparaîtra
- Ça fait bientôt 15 ans que j'ai 10 ans
Un jour je serai le meilleur dresseur
Je suis né dans les années 1990, et j’ai grandi avec un jeu vidéo apparu lui aussi dans ces années là, Pokemon. Ce jeu a rythmé mon enfance et n’est sûrement pas pour rien dans mon apprentissage de la programmation. Je vous explique tout ça.
Revenons d’abord 15 ans en arrière, si vous le voulez bien, à l’automne 2002. Je fêtais alors mon 10ème anniversaire, et j’ai reçu en cadeau une Action Replay pour ma Game Boy. Pas n’importe quelle Action Relay, une sur laquelle il était possible de générer des codes. Mon premier défi a été d’adapter ma Game Boy pour que la cartouche (conçue pour les Game Boy Color) puisse s’y loger. Cela consistait à scier le loquet permettant de retenir les cartouches sur ces anciennes consoles. Quelques minutes de bricolage plus tard (et de grandes frayeurs1), j’avais enfin un système fonctionnel.
Le jeu par excellence avec lequel j’allais explorer ce nouveau monde était bien sûr Pokémon. J’ai d’abord passé pas mal de temps à essayer les différents codes du livret, et bousillé un bon nombre de sauvegardes. Mais vint ensuite le moment d’aller au-delà du livret, avec la génération de codes. Je considère cela comme ma première confrontation avec le monde de la programmation.
Il s’agissait de mettre le jeu en pause, et d’assigner une valeur à une variable. Le programme s’occupait de chercher en mémoire tout ce qui pouvait correspondre à cette variable. Puis, par itérations, faire varier la valeur de l’indicateur et signaler le changement à la variable. L’ensemble des codes possibles se réduisait alors à chaque itération, jusqu’à ne contenir plus que quelques lignes probablement responsables de la valeur étudiée.
Pour donner un exemple concret, imaginons que vous ayez dans le sac 8 poké-balls : vous lancez la génération avec une variable valant 8. Puis vous ouvrez le sac et jetez l’une des poké-balls, il ne vous en reste alors plus que 7. Vous ouvrez à nouveau l’outil de génération de code pour signaler que la variable vaut maintenant 7. Et vous recommencez jusqu’à découvrir le code qui vous permettra de multiplier les poké-balls.
Le tout se faisait avec des représentations hexadécimales, qui permettaient alors de se confronter aux conversions entre bases.
-
Du genre Game Boy qui ne démarre plus car pleine de poussière… ↩
L'ADSL, je veux l'avoir et je l'aurai
La prochaine étape importante fut l’arrivée de l’ADSL au foyer familial, en 2005. À moi Internet, j’allais pouvoir utiliser l’ordinateur pour autre chose que jouer aux Sims ! Mes débuts m’amenèrent logiquement vers des forums Pokémon. Ces communautés étaient formées de beaucoup de petits sites qui apparaissaient et disparaissaient, et donc de gens pour les développer. Petit à petit, je me suis retrouvé à apprendre le HTML et le CSS, sur le Site du Zéro. Dans le même temps, je m’essayais à RPG Maker, pour créer mon propre jeu Pokémon (sans succès ), et ainsi aux concepts de variables et conditions.
La suite « logique » fut de vouloir créer mon propre site/forum, et de m’intéresser à PHP, comme proposé sur SDZ. Cela passait par le copier/coller d’extraits de code trouvés çà et là, plus que par l’apprentissage proprement dit. Mais après de nombreux codes chaotiques, je me suis enfin vraiment décidé à comprendre ce que je faisais, et à finalement apprendre la programmation plutôt que de bidouiller des bouts de code, courant 2006. Bon, avec PHP, mais la programmation quand même.
Mon apprentissage fut assez progressif : d’abord des petits sites, puis des scripts en tous genres, pour en revenir à mon projet phare, la réalisation d’un Pokémon-like. Une sorte de jeu dans le navigataur, piloté à la souris pour se déplacer de carte en carte, déclenchant événements et combats, assez loin du RPG original.
2007, en plus de mon perfectionnement en PHP, fut l’occasion de découvrir, installer puis effectuer une transition complète vers GNU/Linux (Kubuntu), et d’apprendre à l’administrer. J’ai alors plus ou moins commencé à apprendre/comprendre le Bash.
Et 2008 fut l’occasion de m’ouvrir à d’autres horizons et technologies, voulant améliorer le gameplay de mon jeu : JavaScript, Actionscript, SVG et même XUL. J’en suis arrivé à un prototype fonctionnel en SVG+XUL+JS (ou assimilé), multijoueur avec échanges réseau.
Dans une grande clarté il apparaîtra
Mais 2008 fut surtout marquée par ma découverte de Python. Une révélation. Si beau, si clair, si concis. Pourquoi tant d’années à errer dans le péché avec PHP ? J’allais pouvoir continuer vers les programmes GUI avec quelque chose de bien plus facilement maintenable (et pas voué à disparaître comme XUL). À l’époque, Python 3 en était à ses balbutiements, et je me suis naturellement tourné vers Python 2.5 puis rapidement vers la 2.6.
J’ai exploré de multiples facettes de Python, en commençant par le web. Django était un changement radical pour moi qui n’avais fait que du PHP. Un site devenait une vraie application, pas juste un script exécuté à chaque requête. Le HTML n’était plus écrit sur la sortie standard, mais renvoyé dans des objets spécifiques.
J’ai aussi cherché à continuer mon jeu, et je suis passé successivement par Pygame, pySFML et pyglet. Chaque fois, je l’ai recommencé pour tester une nouvelle bibliothèque.
Je me suis essayé aux interfaces graphiques plus complexes avec PyGTK et PyQt. Avec toujours le même fil rouge, mon dernier programme PyQT (datant d’il y a 5 ans maintenant) étant un éditeur de cartes.
Je me suis enfin amusé avec des bibliothèques telles que numpy, matplotlib ou PIL. J’ai pris beaucoup de plaisir avec Python, ce qui ne m’a pas empêché d’explorer d’autres langages (notamment dans le cadre de mes études ou de mon boulot). Mais toujours, j’en reviens inéluctablement au Python.
Ça fait bientôt 15 ans que j'ai 10 ans
Octobre 2017. Il est bien loin ce jour d’octobre 2002. 15 ans, déjà. Putain 15 ans ! Mais plus vraisemblablement 11 ans de réelle programmation, dont 9 de Python.
Le projet qui a rythmé tout mon apprentissage est aujourd’hui (à nouveau) délaissé, hébergé sur un dépôt Git qui prend la poussière. La dernière version en est une cherchant à s’abstraire de la bibliothèque graphique, avec une implémentation pyglet. J’ai surtout apprécié architecturer l’application, et une fois que j’ai eu un modèle convenable, je n’ai plus trouvé tellement d’intérêt à continuer à développer ce projet.
Mais je le garde, dans un coin, à disposition pour le jour où j’aurai envie de m’y replonger. Ce projet m’a accompagné dans toutes les étapes de mon apprentissage du développement informatique, je ne doute pas qu’il sera encore à mes côtés pour les prochaines.
Par extension, tout comme un apprentissage n’est jamais achevé, je peux admettre sans crainte que ce jeu ne sera jamais complété. Mais on verra bien ce que je pourrai en faire par la suite.
Voilà, c’est tout pour aujourd’hui. Et oui, le logo représente un Abo en forme de logo Python.