There's Never Been a Better Time to Learn Game Development (or anything, really)

From a very early age I've had exactly one dream: to make video games.

My earliest introduction to computers came from games on floppy disk that needed to be booted in MS-DOS, like Jill of the Jungle:


Jill of the Jungle

I didn't know it at the time, but I was developing the technical and troubleshooting skills that I would use the rest of my life. I was highly motivated to hack on things when it meant the difference between getting an error message and getting to play.

Games encouraged my tech skills and feedback loops:

So how about today? Games made me love computers and directly lead to my 12 year career as a software engineer, but making games always felt out of reach for me for over a decade. This year, I was able to crack it. I finished 2 games and I want to share the secret:

"Oddly dedicated, and willing to be beat up by a computer"

I heard this on YouTube only after I had finished my games, but it really sums up how I got it done (and learned anything, really).

"I wish I could say everybody could create something like this but I think Gavin's special, I think he's a wizard, what do you think?"

"I wouldn't say special, I just think that I'm oddly dedicated and willing to be beat up by a computer."

I'm writing this article because it's what I needed to hear when I started: with enough persistence, you can do it. All you need is a certain stubbornness. I even figured that out halfway through as evidenced by this tweet:

I've learned that anyone who wants to make a game can absolutely do so, but those who actually do it are absolutely DETERMINED

The other half is having the right tools. And that's why I say the best time to learn is right now. My previous attempts over the last 12 years to learn game dev had me using the Unity game engine. I found the tutorials tedious the menus obtuse. It was slow in every sense of the word. While Unity may still be the current standard, and there may be reasons to choose it, luckily we have a much better choice today:


Godot is a lightweight, open-source, and easy to use game engine. Godot manages to distill a very complex domain down to its essentials and build them back up. The result is a simple, powerful, and well-integrated experience.

Godot has what I would call high "internal consistency". Once you understand one part of Godot, everything else will follow the same patterns and behave very predictably. This makes building up from foundational knowledge very natural.

There's often a promise of interplay between code and UI in many apps, but almost never is that promise as fulfilled as it is in Godot. The linkage is natural, unforced, and predictable.

For example, to build my first game in 2D I used Node2D and straightforward properties like global_position and visibility. Much later, when I was intimidated to start my 3D game (a whole extra dimension!), I found that the new Node3D had all the properties I already knew, including global_position and visibility, but just added extras for 3D!

Similarly, I can use the AnimationPlayer node and anything I learn carries over to the AudioPlayer node. Godot has strong foundations and applies them intentionally and consistently.

Some of this elegance and predictability comes from Godot's core design (and the fact that the Godot editor is itself a Godot game!). In Godot a game is a tree of nodes. Creating and editing nodes is all there is to it!

Node and tree structure of Godot

Godot is surprisingly flexible in how it allows you to build up your "game tree". You're never locked into GUI or code-only, but you could choose to use either exclusively. There's often a promise of interplay between code and UI in many apps, but almost never is that promise as fulfilled as it is in Godot. The linkage is natural, unforced, and predictable.

I often used the UI to drop in a node like Button and then clicked "Connect" to generate a pre-baked func onChange(): into my code. It's also incredible that the relations hold both ways. I could also add that same button via code with .add_child(Button) and then use the UI to change it's properties. Switching between code and GUI becomes frictionless in such a tightly integrated environment.

(Oh, and the Docs are incredible and built right in, just a click away. Oh, and the tutorials are excellent and are getting more numerous every day). Godot has a host of qualities I could gush about for paragraphs, but in short, it's one of the best pieces of software I've ever used and it continues to impress me daily.

Enough gushing about Godot, let's talk about the games.

Games With Friends Are Good Games

There's the concept of a "Third Place", not work, not home, but a gathering place for people to connect. For prior generations it may have been a bar or bowling alley, and then for my teenage years, it was the mall or movie theatre. Today, games are that gathering place.

When I set out to make my first game, I knew it had to be a shared experience. I wanted to make something for my friends that we could experience together. That was my driving force and I'm happy to report I succeeded:

My goal was to create a game for my friends, designed around mechanics I wanted to figure out. There is no intention to market or sell anything. I just wanted to do it. My next game will also be multiplayer.

It's clear from the mega-smash success of recent games like Among Us, Lethal Company, Palworld, and Helldivers 2, that games with friends are good games (and best sellers!). Even the entire survival-crafting genre like Minecraft or Valheim owes it's success to the adventure-with-friends feelings they create. There's no doubt these games would have lacked an essential part if they lacked multiplayer.

I expect this trend to continue, with studios quietly removing single player-only games from their docket, or adding multiplayer to existing plans. As we look to the future of gaming, I am confident that it'll be shared and it might just be built on Godot. I know I'll be sharing more soon. Get out there and learn what you want to, there's never been a better time.