Le premier jour du reste de ma vie

Ou comment j'en suis venu à la programmation puis au Python

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

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.

8 super-balls dans le sac.
L’interface nous propose à la fin les 2 codes correspondants, que l’on modifie pour mettre 63 (99).
Et hop, 99 super-balls !

Le tout se faisait avec des représentations hexadécimales, qui permettaient alors de se confronter aux conversions entre bases.


  1. 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 :D ), 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.

La première version.

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.

Voilà ce que ça donnait.

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.

La version pySFML.

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.

Éditeur de cartes PyQt.

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.

La version « finale ».

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.

12 commentaires

Et tu as fais de la programmation ton métier ou une compétence professionnelle utile ou pas ? Ou cela reste un plaisir à coté ? :)

+1 -0

Et tu as fais de la programmation ton métier ou une compétence professionnelle utile ou pas ?

Demandred

Oui. J’aurais peut-être préféré faire dresseur Pokémon à plein temps, mais ça n’était pas possible, donc je me suis rabattu sur le développement.

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.

Je faisais pareil avec Warcraft II ! J’en étais même venu à écrire un keygen pour ce jeu. :D

Merci pour ce retour d’expérience. :)

A 10ans tu as scié ta gameboy ? :euh: Quel courage et belle initiative. :lol:

A-312

Il le fallait bien. Puis ce n’est pas grand chose, juste un petit loquet en plastique, celui qui empêche normalement de ressortir une cartouche si la console est allumée.

Surtout qu’en forçant un peu ou en enlevant l’arrière de l’AR, elle passait :P

JuDePom

Euh, comment ça ?

Moi je tirais mon AR vers l’arrière, et ça laissait suffisamment de place pour le loquet.

Sinon, tu pouvais la démonter (une vis étoilée super bizarre je crois, ou c’était celle de ma PS1 comme ça…).

En tout cas, ma gameboy est toujours complète (mais un peu jaunie par le temps, malheureusement …)

(Et sympa le abo :P)

+0 -0

Sympa ce billet. Tu met le doigt sur plusieurs aspect super important dans l’apprentissage de la programmation :

  • Ne pas avoir peur d’essayer et être curieux ! Quitte à refaire mieux plus tard en ayant eu des illuminations :D
  • Se trouver un truc qui nous passionne pour en faire un projet qui nous motive (parce que bon, les hello world et autre TP vu et revu on fini par s’en lasser quand même)
  • <insérer ici un troll sur PHP>
  • Persévérer, Rome ne s’est pas faite en un jour (mais c’est vrai pour tout apprentissage ça)
+8 -0

Tiens, j’étais passé à côté de ce billet. Mon histoire à moi est très différente mais je retiens cette phrase :

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.

Story of my life!

Je commence très souvent de nouveaux trucs, poussé par l’envie d’en découdre avec un problème précis, mais une fois que je tiens la solution et qu’il n’y a plus qu’à la dérouler, les projets deviennent ennuyeux et perdent tout leur intérêt.

Si par contre j’aborde un projet pour son utilité (même si ça reste très subjectif), là par contre je finis par aboutir quelque part.

Je suis bien content de constater que je ne suis pas le seul !

+6 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte