Make a game from scratch
2026-02-20
Not long ago I finished my first playthrough of The Witness, a 2016 puzzle video game by Thekla Inc. This game felt so intentionally and beautifully crafted that it really inspired me to start looking into making my own game, which I have wanted to do for some time.
I went out seeking game dev videos, talks, articles, etc. and came across a plethora of great resources online. There really is a lot of good content out there in the game dev space. In particular, Handmade Hero is unparalleled, and the whole Handmade community make some excellent stuff, I would highly advise that you give those a look.
It feels to me that game dev may be one of the small areas of development left where the people writing the programs are actually somewhat in-tune with the constraints of the machine that they are writing it for. Years ago when computers were much more infantile, programmers had much harder constraints in regards to memory, processor speed, etc. that the median developer nowadays just doesn't even consider at all. Hardware has advanced to the point that a lot of programs can be written without paying keen attention to performance and efficiency and still get the job done, but to me it is obvious when someone has spent the time and energy to develop a well-crafted, performant piece of software and it becomes a joy to use it.
To me then, it seems like learning to build a game would be beneficial for a lot of developers, because they would be introduced to, and have to pay more close attention to, constraints that they aren't used to dealing with. Your game probably wants to render at a smooth 60FPS at least, so you need to do everything for a single update cycle in under ~16.6ms.
If you're doing this, it also feels important to me that you do not use an existing engine, or a garbage-collected language to do so. The point of this exercise really is to learn, not make a game, which is more of a side-effect. Using an engine will prevent you from learning some important concepts that they abstract away, and a garbage-collected language will do the same, but you also suffer from not being able to manage resources with as much precision as you would like to squeeze out performance gains.
My personal language of choice after some tinkering around was Odin. It comes with raylib baked in, but you could also use OpenGL, Vulkan, SDL etc. raylib is just my choice because it has a simple interface. Odin itself feels very C-like with some quality of life improvements, and some features that make it an especially great choice for games and rendering software.
Here's some of the concepts that I've learned about so far, that I would expect you to learn as you go as well:
- Custom memory allocators, in particular arena allocators
- Struct of Arrays vs Arrays of Structs, how that affects caching and performance
- How pointers are not used for relationships between things, and why you should use indices/generational ids instead
- SIMD
- Immediate vs Retained UI
I've only really just started my journey, but I have learned so much so far. I would highly encourage other developers out there to give building a game "from scratch" a go as well.