I've been interested in games programming since I started learning programming as a teenager more than 25 years ago (gasp!)
I started with Qbasic and Gorillas.bas, but never understood the code.
Of course, I didn't get anywhere at the time, beyond very basic games. I wrote a simple Shoot the UFO type game in BASIC (later ported to C). All it had was a UFO moving left and right across the screen, and you could shoot a bullet at it. The biggest problem in the game: The UFO would stop moving as the bullet was fired, as I didn't know the concept of background processing. Which meant the game was stupidly easy to win.
And for the next 15-20 years, I didn't make much progress beyond that. Sure, I learnt background processing, but the games didn't get any more complex. Game coding was hard.
Enter Unity / Unreal / Godot
Last 5-10 years, we've had a bunch of tools to make games programming easy. Unreal and Unity are industry standards, Godot is racing to catch up with them. It suddenly became easier to make games, as these tools did a lot of the heavy lifting for you. Level design, physics, collision detection, player animation – a lot of the things we did with code can now be done by the tools.
Not only that, these gaming platforms come with a lot of prebuilt examples you can just copy and use. Even Godot comes with an awesome 3d shooter demo:
Unity is the top player here– you can buy full skeletons for whatever game you want to make– all the code done for you, just tweak for your own use case.
So making games is now easy right?
The sad truth – most developers will never finish their game
I myself have abandoned 2 dozen games, in platforms ranging from PhaserJs to Unity to Godot.
Browsing online forums, it looks like I'm not alone. Most people never finish games. I've seen beautiful demos, that developers spent multi-years working on and then just abandoned. I asked one guy when he sent me the files to his last game (on Google drive, no less): "This is awesome! Why don't you release it? At least put it on Github?"
His answer: He had abandoned the games months ago. Just didn't care anymore.
I struggled with Unity for a long time before discovering Godot. Godot is awesome, it is very easy to get started with (at least for 2d games).
Here's what I found in my own journey: No matter how easy the tools make complex things the simple truth is: Games programming is still a lot of work
Even designing and completing a whole level is tons of work. Even worse, it looks like never ending work.
It took me just a month to get a simple mechanism in my game working– the player throws a grenade and the enemy can kick it back.
Granted, it took a month because:
a) I'm still learning Godot
b) I have limited time to work on this in the evenings.
c) I found a lot of gotchas in how Godot works– things you only learn by doing
Now, some of this stuff might become easier over time.
But still– this is just one enemy. Ideally, you need multiple enemies with their own quirks/attacks, coins, environmental hazards (like spikes), parallax (moving backgrounds) etc
And my biggest fear– designing a whole level just seems like a nightmare; maybe because I've never done it before, maybe cause my design skills suck.
When I looked at how much work there is just to create one simple level, I can understand how people can spend months/years on a simple game, just to abandon it.
The skills are not transferable
So I spent a lot of time learning the quirks and gotchas of Godot (and before that, Unity). Here is the problem though: these skills aren't transferable.
And worse, they have little to no market value.
What do I mean by this?
I also spent some time learning about AWS(and still learning and crying. Is it normal to cry when learning 'bout Aws?).
It's a huge ugly monster with dozens of keywords (buzzwords?). You spend 6 months passing an AWS exam, and all you have learnt is how AWS works.
Except– some of these skills transfer. IAM might be an AWS specific tool, but similar tools exist for Azure, GCP and every other platform, and the concepts will transfer.
I had already managed Linux servers, so working with EC2 servers wasn't that big a learning curve.
So even though AWS has a steep learning curve, those skills can be used elsewhere.
Not so with game engines
You learn the quirks of how Godot handles a physics object colliding with a player object, it doesn't help you at all in Unity. And vice versa.
Plus, the gaming industry is very exploitative and low paying, so it's not like you are learning any "in demand" skills. Your boring programmer maintaining a 10 year old Java app written with vanilla Js earns more than most game programmers.
And it isn't any better for indie devs– most indie games (I don't have any statistics on hand, just my feeling based on talking to other devs) rarely make enough money to even justify the cost of their game assets, let alone their own coding time.
Gaming, like Hollywood, is a hit-driven industry, where a few big players take in 90-95% of the profits, while most others barely survive.
Games Programming is more than just code monkeying
To be a games programmer you have to know about art, music, AI, level design, dialogue, story, just to mention a few.
Sure you can outsource or buy art (and there are dozens of free resources). And it's not like most games have much of a "story".
Sample video game story: Evil gubbamint has taken over, rather than fighting elections, take this machine gun and kill everyone (which might be how things work in America, from what we hear).
But you as the developer still need to know the basics of these. Even if you end up buying art/music, you need to understand how it works in your genre of gaming.
Especially for an indie dev– you are more than just a code monkey. You will have to know a bit of everything. And even in traditional gaming, most developers seem to know more than their narrow field of coding (just my impression from interviews etc).
A tldr of why games programming is so hard
- Completing a full game can take years
- It's hard work– and I mean this literally. Hours and hours of coding
- There is no treasure at the end of this rainbow: You can spend years with nothing to show for it
- It's easy to lose heart and just quit. Or move to a different game, different engine, try another library etc
And that is the harsh truth of game programming: Recent technologies have made the process much easier and smoother, but it's still a lot of work, and it's very easy to become disillusioned and give up.
If anyone has a good solution, I'd be happy to hear your thoughts.