I have very limited background in programming. I quite want to develop the game myself, or with only minimal help. Is there one language that is better than others for game development, or is more versatile?
So! If you don’t have much experience in programming, you DO NOT want to write your own engine. Period.
“I wrote my own game engine” is the kind of thing you’ll see masters/doctorate computer science students (or crazy industry veterans) do. While it may be possible to write a simple text-based game that only uses the command line, it gets complicated fast.
There are some libraries out there like PyGame which let you set up “toy” games quickly (in Python), but no shipping game is going to be built entirely in PyGame.
When you’re out applying for jobs in the industry, having a studio you’re applying for say “We built our own engine” in 2023 is a red flag. There are multiple battle-ready game engines that have made thousands of games. Most places want to build games in either the Unreal Engine (C++) or the Unity Engine (C#). There is a third one I should mention - Godot - which is a flexible FOSS game engine. But most places use Unity or Unreal.
There is so much that goes into making a game engine. Not only are you making a game, you’re making a tool that lets you make a game. You’re making stuff that can read model and animation data. You’re making something that can handle a bunch of different input methods. You’re making something which needs to calculate lighting and collision, parse images, run scripts, save and load data, multiplayer games need a full networking model with local prediction, correction, and latency mitigation, etc.
By definition, making your own engine is untested. You are going to run into issues, whether you have 1 person or 1000. What starts off simple quickly balloons as you want to do more than just show white text on a black screen. Something like Unity has had a bunch of production games (like Hearthstone) use it and find all the issues already so you don’t have to. There is literally zero reason to make your own engine today.
I myself work at a AAA game studio, as a programmer. I’ve worked on the Battlefield series in the past, although it’s not what I work on now.
Let me give you the advice I wish I had 15 years ago, when I was starting out: think small. It is far better to have made 10 projects in 1 year than 1 project in 10 years. The only way to “make it” as an indie dev is to be incredibly talented, incredibly lucky, and have an incredible amount of funding. Even supposed “one-man teams” like Toby Fox had help making their games; it is very difficult to make a game with 100 people working on it, let alone 1.
Make small toy projects that you can do in a weekend. Drop it if you spend more than 2 weeks on it. Don’t be like me where I spent years working on a dream project that I never got in a good spot to show to anyone. When I talk to people now, when I talk to interviewers or coworkers, I don’t really mention my white whale of a dream project I never finished. I mention the little games I made for gamejams, the ideas I had and how I played around with them.
It is so much more impressive to show an interviewer an active GitHub and a bunch of free games you’ve put on itch.io. I’ve literally gotten jobs because of it, but it took me years to realize I was doing the wrong thing and needed to pivot.
With that rant out of the way. C++ is industry standard. Any programmer will need to know C++ inside and out. Even if you don’t work in it directly, you’re almost guaranteed to be working with something that works in C++. But C++ is a hard language to learn.
If you have taken a programming class already, I’d recommend Unity. Unity isn’t as common as Unreal, but C# is easy to learn and somewhat similar to C++ (not that similar, but a lot can carry over). It is code, though, so you need to know syntax.
If you’ve never taken a programming class before and you’re self-taught, then I’d actually recommend Unreal. Unreal has “blueprints”, which is a visual scripting language. This means you don’t need to know the syntax of what you want to do; you just grab nodes and connect them together. It’s very easy to understand and intuitive, and it helps you build the foundation you’d use if you ever delve into the code side. You can make a whole game in blueprint, without touching code - the game won’t be huge and mega-performant, but it’ll be relatively easy to make and doable by a single person working on a very small project.
Bear in mind that there are other disciplines in game development other than programming as well. That’s sort of the best part about making your own stuff - you have to learn to do everything, from art to design to programming. Designers typically aren’t expected to know much about code, but they are expected to be creative, collaborative, and intuitively know what makes something a fun game to play. If you find out that programming isn’t for you but you still really want to get into game development, making all these tiny projects is a great way to exercise your design muscles as well.
I’d highly recommend you start with a game engine like Godot. Very few studios, let alone individuals, code games from the ground up. Besides having lots of functions and libraries specifically designed to do the math required for games, these engines will have lots of tools that will be useful for performing all kinds of game-related work.
If you’re looking for a true challenge and really hate yourself, and you really want to go from scratch, you could write your own engine in C or C++. Again, this is a Bad Idea™.
How is Godot compared to Unity?
I’m on my language journey, and I’ve made stuff in Python, and I’ve also got some work in javascript and html. Eventually I’d like to learn C# as my main, working language so that I can make efficient windows apps and maybe hopefully create a game in Unity.
But if Godot is strong and it takes (practically) python, maybe I’ll give that a go.
Honestly the biggest issue you’re gonna run into when swapping into C# (or Java) is how truly object oriented they are.
Yes python has objects but it’s not the same.
Personally I’d recommend starting with pure Java first and doing the basics like Pong, pinball, whack-a-mole before migrating fully into C# then try to add Unity.
Java is a lot easier to compile and you’ll get to skip all the annoying C based compiler problems you’ll get with C#
Thanks for the tips! Is it really that difficult to go straight to C#? I just don’t see myself using Java in any of my own projects
(Sorry for the delayed response!)
That’s a good question that I find a lot of newer programs ask. The short answer is yes because the Java runtime environment abstracts out all of the platform specific things you’ll have to be aware of in C# to some extent. Long answer is you can probably figure it out with some extra struggle that’s going to be C# specific.
I fully understand that Java is not supported in Unity and that you will probably not use Java once you figure that out however, Java is still useful as a learning tool. I think that people focus on specific language too much (ie c# vs java) when in reality they are 99% the same. I think it’s more important to learn the data structure and logic behind object oriented programming over the specific nuances of a language. When to use an if/else vs a switch. When to for vs foreach. Abstract classes vs interfaces. These things are all the same amongst all object oriented languages and are the real things you should be focused on. Once you figure out how to do it on one language it’s a 30 second Google to look up the key words for whatever language you want to swap to.
So in summary use Java for it’s ease of compiling to learn (and there’s a lot of good java tutorials online for this) then be amazed when you swap to C# and how much worse the compiler is lol.
Thanks for the response!
My main desire towards C# is that i’m 100% a microsoft guy. I’ve always used Windows OS. I’ve tinkered with MacOS and Linux but I just, I cut my teeth from when I was a child to well in adulthood with Microsoft and it just feels like a natural fit for me. So I’d like to have as my main language be the #1 supported language by Microsoft because I want to make Microsoft applications. I wouldn’t necessarily call it a fanboy thing, it’s just a comfort thing. I know my way around the OS like riding a bicycle