A programmer's story

November 26, 2018 - Jos van Tol

I never was the gamer. The new edition of Modern Warfare couldn't ever excite me. Even World of Warcraft bored me pretty quickly. The world was amazing, I had never experienced anything like that before. (I earned all the exploration achievements.) But waiting 6 hours for a dungeon to open up to get that one epic magic sword never really got me. I wasn't interested in mechanics, I was in worlds.

I never was the sporty one. Playing outside was mostly a drag and competition never interested me. You know, that kinda kid. Instead I programmed Logo. Those were my C64 or ZX Spectrum days; typing over programs from books. Not really caring about what the code did. But still, it stuck with me. In the end the only thing you could really do with it was create screensavers with pretty pictures for your Windows machine. Logo (or I) wasn't really capable of creating a simulation of any sort. Later I would create the little "guess the number" game or two in Visual Basic. But I couldn't be very much bothered.

What is a world? A carefully constructed balance of autonomous objects. Like a flock of birds, but on a larger scale, with many more parameters, internal details and external influences. It's like playing God, man! These objects go over a multitude of scales. From large cities and continents to the smallest molecules and electrons that make our very existence.

The magic of code never really left me. In 1996 I would create my own World Wide Web by creating BMP bitmaps that I would load in a browser. I didn't even understand what the Internet was. A few years later, when we finally got a connection at home I started creating a whole lot of frames and table-based websites in HTML. Also for other people. Now I can't even imagine how crazy it would be to ask a 16-year old kid (with no real skills whatsoever) to design the website for your business.

Sometimes I would find one of those magical worlds through my computer. Via the internet or one of the dozen CD-ROMs I bought at the toy store. I remember vividly the window of Norns I carefully bred. Or the ant-like citizens of SimCity that I tried to give anything they wanted for the lowest taxes possible. (No disaster-menu for me!) It was way more exciting than those stick-bugs in our terrarium in the living room or some fish tank at the Chinese restaurant!

Later when I studied at the art school I got back in touch with real programming. I learned Max, Csound, ChucK and Processing. At first I was really into Max, using it for almost everything. Composing music, running a webcam, to making coffee. But soon I would try to create my own objects and I met with the limits of such a purpose-built language. I switched to Processing and discovered how GPUs and shaders worked. Also Dan Shiffman's amazing book The Nature Of Code showed me what would be possible if you wanted to simulate natural behaviour.

It can very well be that I'm the only person that is still a bit excited about No Man's Sky and Spore. Since I'm not a game designer at all (or gamer for that matter) those worlds scratch my itch. I couldn't care less that there is no interesting gameplay. They do both lack natural evolution but have interesting procedural content generation (PCG) for creature and environment design.

After my study I travelled a whole lot for a year or two. I started to really learn programming. Different programming paradigms (which I would soon start to hate). Really understand memory management. Understanding the hardware. Understanding what programming is and isn't. I slowly got rid on of any overhead and libraries. I went from Processing (Java) to openFrameworks (C++) to SDL (C) to writing my own custom platform code.

Programming computers is about arranging values (data) in memory with the right algorithms. Not about using a big complicated language that encapsulates and abstracts everything to "real-life" objects. It's not about any language at all. It's about what you do with it. (Also don't stick your code into a huge game engine. That's the reason your game runs slow.)

And this gives you the clear canvas to really create your own worlds: The plan is to create a playground engine where I can test simulation algorithms. As an experiment I will try to build this natively on macOS. If this gets too messy I will go back to SDL as a platform layer.