I started working in the games industry in 2008. As a fresh Computer Science graduate, the first project I ever worked on was the sequel to Doodle Hex, a game created by a local studio that had just been released for the Nintendo DS I recently stumbled upon this YouTube video remembering the original game and was pleasantly surprised to learn that some people keep fond memories of it. For some reason, it never really got a lot of press or traction back then.
Personally, I always felt the game was a bit ahead of its time. Its innovative gesture-based gameplay has surprisingly never been replicated on mobile platforms, where it should be an even better fit.. While the game sadly never got published, it was a very educational experience for me to get to play a small part in its creation.
The opportunity to work on a console project right out of college was a dream come true, but also a bit of a reality check. This industry did not care about my degree, my software engineering classes and their UML diagrams, or my incipient C++ template metaprogramming skills At the time, and specially after reading Alexandrescu’s Modern C++ Design, I was fascinated by the level of complexity that C++ offered. Templates, templates everywhere!. It was all about writing good code. Straightforward, performance-aware code that was easy to reason about and simple to debug.
This project was also my first exposure to a codebase written in C-like C++ (sometimes referred to as “C with classes” or C+), which I later learned was quite a prevalent style in the industry.
In the context of writing code for the Nintendo DS, there was an important reason for wanting to keep things simple. The hardware of the console featured:
4 MB ought to be enough for anyone, right? Let’s set the record straight here. It turns out the “640K ought to be enough for anyone” quote, often attributed to Bill Gates, was something he actually never said. Well, as it turns out, it is quite hard to fit an entire game in such a constrained hardware. It forces you to make hard choices all the time, and really ingrains in your brain this idea of not being wasteful with your code. I feel very grateful for having had my first industry role in such an environment, as it completely changed the way I approach my work for the better and demolished many misguided preconceptions in terms of best practices along the way.
Fast forward to almost two decades later, and the landscape of the industry has changed quite dramatically. Exotic console hardware like the Nintendo DS/3DS or the PlayStation 3 has long been replaced by circuitry that is not too distant from that found in a mainstream desktop computer. Mobile devices are incredibly powerful. Third-party general-purpose game engines like Unity, Unreal or Godot have become commonplace, increasingly displacing bespoke technology built in-house.
A few years ago, I had the opportunity to teach a game programming class in a Spanish university. This experience made me realize a few things:
So I decided that I wanted to do something about it, and the first step is the launch of Inner Computing, an online school that teaches game programming from first principles. The first course is an introduction to 2D game engine programming with C and SDL 3, because I always wanted to write a course teaching the process of creating a small 2D game engine starting from an empty C source file. Explaining every single line of code and finding joy in the process of understanding how things work at a fundamental level.
I look forward to sharing more about this journey here.