- Published on
How I learned to program
- Authors
- Name
- Giovanni Orciuolo
- @Wolfrost
Part 1: How I discovered programming (2007-2013)
My very first console was a Nintendo DS Lite bought second-hand in 2007. I was 7 years old, I was born in 1999. One of the most incredible features of the Nintendo DS Lite was its TOTAL backwards compatibility with the games of the previous console (the GameBoy Advance). That's how I came into contact with one of the video games that would change my life forever: Pokémon Emerald Version.

Maybe you don't realize what video game we're talking about here. Pokémon Emerald. Incredible. Insane. A game where you set off on an adventure with a few friends, with whom you share a single passion: those fucking Pokémon. Backpack on and it's straight into battles, discoveries of incredible new places, unforgettable scenes. Anyone who has played at least one Pokémon game (between the first and the fifth generation) knows exactly what I'm talking about.
Needless to say, I picked this game clean from head to tail, replaying it on many occasions and in many different flavors (different cartridges, too). Then it was Pokémon Diamond's turn, another fucking masterpiece (surpassed only by Platinum, which is its definitive version). To this day I still play Pokémon, even though I never bought a Switch (I emulate everything lol).
So, long story short, I was obsessed with Pokémon. Since the games cost quite a bit though, my dad had the brilliant idea of buying an R4 (the TTDS, specifically), a special cartridge for the DS where you could put files in NDS format and play them. Obviously also pirating, but don't tell Nintendo or they'll sue me.

Thanks to the R4 I played a ton of games (for example: all the Pokémon spin-offs and the entire pre-3DS Professor Layton series, which many years later I caught up on in physical form), and since you had to be a bit technical to manage to operate the R4, I started building up some knowledge about it. I visited all sorts of forums (in English, and this helped me a ton to learn it) to download games, and in no time I discovered it was possible to modify games using special "cheat codes". For me it was incredible, because I could discover brand new sides of my favorite Pokémon games (for example the special Arceus event).
From there the question came pretty naturally: but how do I write my own cheats? How do I modify the game from the inside to get what I want? I started thinking about the ramifications... imagine how cool it would be to WRITE your own Pokémon game with the events and dialogues you want, a story entirely made up by you, and so much more...
Since I had picked the games clean to the bone, this turned out to be the only frontier left to aim for. Again through the forums I found out about the existence of an entire scene producing what are called "ROM Hacks" (ROM was the term used for the game files, hack to say they were modified).
And how do you create these "ROM Hacks"?
My first programming language: ASSEMBLY (THUMB dialect)
Back then I was a not particularly bright kid, so I couldn't really understand how it worked, but I had more or less figured out that my Nintendo DS (or an emulator on my desktop PC with Windows XP) was executing instructions written somewhere on the ROM. These instructions could be used to draw stuff on the screen, or to assign certain Pokémon to a certain trainer.
"So cool!" I thought "So to change the behavior of the game I just need to change these instructions in a targeted way...". On the forums there were already plenty of tools that allowed quick and easy editing of some "fundamental" parts of the Pokémon games. For example, you could use one program to add new dialogues, another program to create new Pokémon. The program "Advance Map" comes to mind, used by practically the entire community to customize maps and tilesets of the third generation games.
However, to create more complex behaviors (for example new ad hoc scenes with cool special effects), the only way was to write assembly routines and write them onto the ROM so they could then be executed by the game.
Pokémon Ruby was by far the easiest game to modify, for all sorts of reasons, so I started from that one. In a relatively short time (about a year, it was already 2009) I learned all the instructions and how to put them together to create complex scenes, combining everything I had added to the ROM with the other tools. This way, I was creating my very first custom ROMs, which I showed to my school friends (Pokémon fans too).
Obviously on my own I could do very little, so I got help from the members of the community. I remember they were very nice and helpful, even though every now and then you'd run into some more "elitist" ones (in Italian I never know whether to say "elitisti" or "elitari", daaamn I hate Italian) for whom everything was "obvious" and who thought I was basically too stupid to figure certain things out on my own. Maybe they were right? Who knows.
At some point I had started writing about my progress on some threads (lost in the sands of time by now), to help other newbies like me make some sense of it.
Suddenly, the turning point: someone in a thread mentioned something called "C". They said that with it you didn't have to write ASM, you wrote that and the output was ASM. I thought "WHAT? Why didn't anyone tell me before!". The reason is simply that back then nobody had bothered writing a compiler that targeted that "dialect" of ASM (and the compiler used by Nintendo was obviously super private and secret at the time - not that things have changed much in 2025).
I was completely taken aback, so they explained to me what C was, and also how everything I had done so far was "programming".
I remember I was simply ecstatic at the sight of C. Things that were super hard for me to write before could now be written very easily.
So "programming" means putting together super simple pieces of logic (atomic, almost) to create complex logic? Oh my god, what are these things called "algorithms"? I was learning so much, I was like a sponge. I had started writing my routines in C, and to me watching that compiler work was almost magic.
All in all, nobody actually explained the difference between low-level and high-level languages to me, I only discovered it much later.
It was love at first sight: I decided that from that moment on programming would be my life.
Part 2: Between C++ and Java, with a pinch of Game Maker (2013-2017)
This period of my life as a programmer matches exactly my high school years. Since we hadn't done anything about programming in middle school (and I consider this a HUGE MISTAKE of the Italian school system), my first approach to programming at school was during scientific high school (since I chose the Applied Sciences Option, the legendary OSA, those who "OSA-rono" (dared, in Italian) to skip Latin, but that... that's another story...)
The Applied Sciences Option sacrifices Latin entirely to add computer science as a subject (in more depth) and more hours of biology and math. Great for me!
Anyway, school did help by pointing me towards which theory topics to study and dig into, even though there was very little practice. Think about pointers, which are THE FOUNDATION of C: barely touched. I hope they improved the curriculum in these years...
Meanwhile, in my free time, I was focusing my efforts on learning C++: back then it felt like the "natural" next step after C. I had no idea about the bad blood between C and C++ developers, I found out much later. C++ introduced the concept of object-oriented programming as a fundamental part of the language, so I couldn't avoid learning it.
This programming paradigm goes hand in hand with another language called Java. So I learned that one too (noticing how it was much simpler but also more "stupid" compared to C and C++). To me the "garbage collected" nature of the language made no sense, because I thought that if the programmer was good enough they would surely know like the back of their hand how to properly deallocate memory. I was dead wrong. Around here I discovered that loads of people in the world don't take programming as a passion but just as a nine-to-five toll booth job... so in the end Java makes a lot of sense, despite all its countless flaws.
During this period, there was also another game in particular taking up part of my free time... Counter-Strike: Global Offensive (CS:GO).
I played it with my friends online very often, I was even part of an "amateur" competitive team (the SealX), with whom we took part in tournaments and had fun together (actually it was more cursing God together, but whatever). In that period I also got into the skin trading scene, a topic so vast and wide that I'd rather not open it here.
At the beginning of 2016 I got a bit tired of the game, partly because of the constant presence of cheaters: I'm talking about scumbags who use software external to the game to get an unfair advantage inside the game itself (for example seeing enemies through walls). In plain words: they played dirty. So I decided that I would play dirty too: using my knowledge of low-level C and C++ to build complex objects, I created my first cheat (following some online guides for CS:GO) and joined the community (as I always do when it comes to learning something new).
It was a really fun period, because I tested my cheats with my friends, and we destroyed other cheaters online and made them seethe. Plus CS:GO was a really broken game, so one exploit after another got discovered, always fun (how could I forget the exploit that made the bomb blow up instantly?)
From there to actually selling my cheats was a really short step: my price for the software was around 200 euros for the entry (invite) + 20 euros a month to keep the cheat active. It sounds like a lot, but other cheats asked for much more. And lots of people paid. How sad. But hey, MONEY IS MONEY. It had really become my job: I spent entire afternoons reversing the game to add new features for HvH (Hack VS Hack, where 2 cheaters face off to decide who wrote the best cheat, or rather the best fake angle resolution algorithms).
A small digression: the Game Maker Italia community
In this period of my life I was also very active on a forum of indie video game creators, called Game Maker Italia. Since I love programming and I love video games, obviously I like creating video games from scratch, not just modifying them. I also made some tutorials (still available on my YouTube channel, but I'm embarrassed so don't look for them).
I made several games (really ugly ones). My most famous one is definitely Serious Zeb, a 2015 video game dedicated to the well-known Italian YouTube personality Zeb89. Unfortunately the project was never finished for all sorts of reasons (some also related to the youtuber himself, who for some reason didn't look kindly on the game). With the Serious Zeb demo I won the yearly Game Maker Italia competition in 2015 (the competition, nicknamed "compe", is still held every year today!).
I also took part in several game jams, sometimes even winning cash prizes. Those are real satisfactions, for sure, but right now, for various reasons, I think making video games will stay just a hobby for me.
Part 3: Starting to work and the bachelor's degree (2017-2020)
🚧 WORK IN PROGRESS 🚧
Part 4: The pandemic and the post-pandemic (2021-2023)
🚧 WORK IN PROGRESS 🚧
Part 5: Milano City and the master's degree (2023-present)
🚧 WORK IN PROGRESS 🚧