So, you want to get into game development. Or, more specifically and simply: you’d like to become a game developer working on the technical side of things. Well, anyone would have questions about how to do that!
For instance:
- Where to start?
- How to improve your skills?
- Which game engine is better to master first?
- Which programming language to choose?
There is tons of information about these topics out there — so much so that this can easily overload your brain, thus making it hard to make worthwhile choices.
My name is Andrey Mikheev, and I’m the Senior Backend Developer at Pixonic, MY.GAMES. I’ve been in the gaming industry for 20 years. I first tried making games back in the 90s on the then-popular ZX Spectrum. In this article, I’ll illuminate the options you have when switching to game development, and I’ll explain how these options differ.
A few things first
In this post, we’ll operate under the assumption that the reader is just starting their journey into the industry. It’s impossible to learn everything simultaneously, and therefore you’ll have to prioritize and choose how to go about your studies. Of course, everyone has a different experience; there is more than one path to develop in this profession.
The beauty of game development (and with many other areas of IT) is that there are many areas where you can apply your skills: you could become a producer, marketer, artist, designer, scriptwriter, modeler, analyst, client-side developer, core developer, meta-services developer, render developer, and so on. As a matter of fact, in the world of indie games, you pretty much have to combine almost all the aforementioned skills — but this is a topic for another day.
When thinking about starting a career in game development, people often focus on the technological aspects: the engine to master, the programming language to pick first, or the specific skills to work on.
But keep in mind that technology is just a tool; you don’t have to build your entire identity as a developer around a particular thing; a mechanic isn’t the wrench. Today, it’s a crosshead screwdriver, tomorrow it’s an electric one, the day after tomorrow it’s a pneumatic tool. The goal isn’t to learn how to use a specific screwdriver, but to understand the structure of cars, and how to assemble and repair them.
Replace these wrenches with game engines, coding languages, and other stuff — and the point won’t change. These are just tools for you to utilize
Some advice on general skills for game developers
So, in my opinion, general skills are the most important thing at this stage. Because you’re not charged with the task of creating a “game”, but with writing good code.
The goal isn’t to make a billion-dollar hit game but to grow as a developer. Making a billion-dollar game isn’t so much about development anyway, but about ideas and marketing; the code is a secondary thing to that. Of course, these two goals don’t contradict each other, but I wouldn’t set stunning success as your first goal — do so and you could quickly find yourself disappointed with the entire enterprise in general.
Back on the topic of code, a general focus on code is important because high-quality code will always be in great demand in any industry, and this has many applications: games, fintech, robot control algorithms, launching rockets into space. Some might say high-quality code means huge delays, and time is key in this business. Don’t believe it. If you can write good code, there will be no downtime.
Another thing is if your code is sloppy, then to create a high-quality product you’ll have to correct your habits, and that will take a lot of time and effort.
Another very important point concerns timing: time spent creating good code is always offset by the reduction in time spent on maintaining it. After all, with a game, and especially a multiplayer, is a long-living product, and the quality of the code is of great importance in this case.
Other specialists should be able to easily understand your code, be able to adapt it, without the need to rewrite it. And you should be able to easily read it too, if you suddenly decide to change something in a few years. As a rough example: it’s better to spend a couple of months writing high-quality code once, and be able to quickly make some changes in a couple of days, than to write something incomprehensible in a week, then need a month for each minor edit in the future.
In a nutshell, clean code, clean architecture, ECS, SOLID, KISS, OOP, algorithms and data structures — all these topics should be paid special attention to if you want to be a good technical specialist in the game development field.
Yes, algorithms might cause headaches for some people. But there are many more of these “algorithms and structures” in game development than in typical web projects, and if you master them, they will greatly simplify your life.
A more profound understanding of these concepts will, naturally, only come with experience. Over time, you will have participated in a variety of projects, you’ll start understanding how other specialists work, and see what personally troubles you when working with game code.
Learning from other people’s experiences is critical. Study open-source projects, listen to lectures by industry experts, and remember, there are a lot of information sources available now. But what you shouldn’t do is stew in the juice of your project, especially if you don’t have a good mentor on your team. No competent developer can work in a vacuum. The main thing here is not to overdo it and start using code from other projects without understanding what you are doing and why.
And one more important point: rewriting code is normal, don’t be afraid to do so. Moreover, during the training period, this is critically important. You’ll see how using good practices will allow you to improve your code and make it more maintainable.
The process of improving your general programming skills isn’t quick. It can take months — or even years. So be ready for this, because you simply can’t do without it.
If you have the opportunity to get an internship at a good studio, this will greatly speed up your growth. You’ll have the chance to learn various aspects of game development and get answers to your questions from mentors. But let’s be honest, this isn’t the most common way.
Looking for a first job in the gaming industry from scratch is another challenge. The famous paradox: to get a job, you need experience, and to get experience, you need a job. In this case, it’s worth considering self-study. Let’s immediately discard the idea of paid courses: they aren’t suitable for everyone for many reasons. Luckily, there are dozens and hundreds of guides on the Internet for all aspects of game coding.
Choosing a game engine
Once you’ve answered those basic questions for yourself and understood what and how you will learn, it’s time to decide which game engine you’ll work with, and this will also determine the programming language that you’ll have to learn.
This topic is too broad to be covered in one article. Moreover, as developers, we aren’t so much interested in engines as in programming languages. If you want to delve deeper into the topic, I advise you to read this
At the beginning of your journey, you don’t have to immediately choose some big and serious engine like Unreal Engine or Unity. If you don’t have any theoretical or practical background, some engine for web games will be enough: something like PlayCanvas or its analogs.
The Defold engine can also be a good option to start with. It’s simpler than Unity and more focused on 2D games. It uses a very simple language, Lua, which is easy to learn.
Prioritizing programming languages
To save some of your time, I’ll simply describe some aspects of the languages and arrange them in order of priority, as I would learn them; this order doesn’t speak for the quality of the language or its problems. Instead, it’s my assessment of the balance between complexity, relevance, and the capabilities of the languages.
For example, Lua is a very interesting language, easy to learn, you can write a game with it using the Defold engine. But you can’t choose it as the main language for your development experience. It’s an auxiliary language used together with more popular languages like C++ or C#.
Of course, this isn’t a complete list of all programming languages. There are more than a dozen of them. But this is what I feel like pointing out for you. So, here is what I would learn and in what order:
- English: Yes, don’t be surprised. It’s probably the most important language for a developer. If you’re not a native speaker, studying it will pay off — big time. Most information on programming is available in English: guides, courses, documentation, forums; in general, everything you’ll need to study. In theory, you could search for local communities of programmers in your native language and ask for help there, but if you do this on an English-language resource, the problem will be solved a hundred times faster.
-
C#: If you plan to work in development seriously and for a long time, then it’s better to start with popular general-purpose languages. C# is one of them. It’s also a language suitable for your backup plan: even if you suddenly get bored with game dev, you can write a variety of software in C#, like fintech, business applications, and so on.
C# will allow you to get acquainted with standard programming concepts and implement a variety of development approaches. You’ll learn all about those seemingly scary abbreviations like OOP, CQRS, DDD, ECS. Of course, most of these approaches can be implemented in any programming language. But there are nuances. For example, not all languages have the concept of “class”, and, accordingly, the concepts are implemented differently. This can blow the mind of a novice developer, and create a bunch of unnecessary problems, including motivational ones. So, in my opinion, C# is the best (but not easiest) choice for starting a career in development compared with, for example, JavaScript.
-
Java: Like C#, Java is a general-purpose language. But in game development, it’s mainly relevant in terms of servers. There are, of course, Java game engines (for example, LibGDX), but they aren’t as popular as something like Unity for game development.
Again, these general languages are good for a situation when you already know Java, but work in, for example, Fintech — and then suddenly you decide to make a game. You wouldn’t want to learn a new language from scratch just for the sake of an experiment, right?
-
JavaScript: As Jeff Atwood, one of the founders of Stack Overflow, said, “Anything that can be written in JavaScript will be written in JavaScript.”
It’s sad but true that more and more game projects are being written in this language. The fact is that JavaScript is very simple, especially for beginners. And if you work on some kind of web engine, you’ll most likely even be told where to enter your lines of code.
Despite its simplicity, I don’t think JavaScript is a good place to start your journey in game development. It’s too different from other general-purpose languages, and this can play tricks on developers. There is this idea that a developer thinks in terms of the concepts from their first programming language. There is some truth to that, so at the very beginning it’s better to learn more general techniques and approaches. But if you decide to start with web games, you probably won’t be able to get by without JavaScript. It reigns in the web world. In this case, I would advise you to pay attention to TypeScript. This language is very similar to C# and will make it easier to switch to another language in the future.
-
Lua/Python: Why did I put them together? These are scripting languages, usually used to script individual parts of game logic. (Yes, there are engines like Defold where these are the main development languages. But these are exceptions to the rule.) For example, Python is a very popular tool for inline scripting, and it’s used in Blender 3D editor.
Knowing and being able to use Lua and Python is useful, but as I mentioned earlier, they are auxiliary languages and I would keep them for later. Unless, of course, you chose the Defold engine for your first project, then Lua is indispensable.
-
C++: Some of you may be surprised that C++ is at the bottom of the list. And it’s not because the language is bad, but its path is the most difficult. This is the most powerful language out of the presented ones, but also the most complicated, with its own features.
C ++ is used to make AAA games, and it makes it possible to get the most out of hardware. But I wouldn’t suggest this to a novice developer — chances are high, you’ll become disappointed in the industry. But if you truly know that C++ is what you really need — and you aren’t afraid of the difficulties involved and you have a clear plan of action — then go ahead!
Choosing a programming language is important, but don’t forget that first and foremost you should level up your technical English — it will help you navigate guides, courses, and other sources of valuable information
Single-player or multiplayer?
In my opinion, this is the next decision a game developer has to make. (Not something like the choice between developing mobile games, AAA, or web games.) The reason is simple: at the very beginning of your journey, you’ll almost certainly won’t have the choice of making big games. Think about it, how could you work on some kind of Escape from Tarkov or Call of Duty with no experience under your belt? Your first game shouldn’t be big and complex, otherwise, you won’t finish it. You’ll just burn out and leave game development.
It’s good to understand exactly what you want to do. For an experienced developer, this isn’t so important, but at the beginning, the answer to this question will narrow down the pathways of possible study.
In terms of single-player vs. multi-player: from the point of view of client development (that is, the part of the game with which the player directly interacts), the difference for a developer may not be that big. But multiplayer requires a backend and all the issues associated with that, and this is also a separate, and vast, topic.
A single-player game is easier in this regard because you don’t have to worry about synchronizing the state of the world for other players, separating game logic, or other such problems.
In terms of game mechanics, a single-player game can also be much simpler than multiplayer — and the simpler the project, the easier for you to finish it. And finishing what you started is a critical skill in any business!
To sum up, I would advise starting with single-player games — it will just be easier. But if you really want to make some simple multiplayer game to play with friends, then why not? You just need to understand that this will require more time to get your first working version. However, a person’s internal drive is a very complex thing — perhaps creating online games will motivate you much more than single-player games, increasing the chance to finish your first project.
Your first project
Well, here we come to the main question — where exactly do you start if you want to make games?
Step 1: Select your tools
Let’s say we already understand roughly the type of game we want to make in the first place. We know what kind of programming languages are mainly used and in what engines they are used. This is the stage when this language and engine must be selected. (I would advise starting with C#. You’ll need C++ to create AAA hits, but let’s save that for later when we gain experience.) So, our language-engine combo might be C# + Unity. These are in demand and make an excellent choice.
Step 2: learn the language
This is an important point: don’t start with an engine, select the language first. Without a language, you won’t be able to learn the engine effectively at all; you simply won’t understand anything in the examples and documentation and you’ll only get confused. Ideally, you wouldn’t start to learn a game engine before you’ve mastered the language and can confidently write simple programs.
To improve your programming skills, check out projects like
Step 3: the engine
After you get the hang of your language a little, you can finally start studying the engine. In 2023, there’s plenty of information out there on this topic: the internet is full of resources; dozens of YouTube channels for anything you’d pick. Plus, like I said, Unity is wildly popular, so there’s no shortage of material.
You can find a video solution to any problem by the creators of the engine (available directly on Unity Hub, which you’ll install at the start),
The next steps of the journey
Those were the three basic steps to get started, and from there, your path can continue. Let me give an approximate outline.
Once you learn a bit of your chosen language and engine, try to create a simple game. Any game, even tic-tac-toe. Do everything as you’d like — no limits. You must write the code yourself. (Avoid copy-pasting from Stack Overflow, which is nonetheless a very useful resource). The main criterion is that the game must work.
Next, come up with some new features for the game and try to add them. For example, if you’re creating a platformer, try making a feature that changes the level’s gravity when pressing a button; or the ability to teleport from one part of the level to another.
Try to note how easy/hard it was to add something new to your working draft. the amount you needed to change the structure of the code, and so on. After that, study best practices, see how other developers suggest organizing the project, and the code (OOP, SOLID, KISS), and rewrite the game, taking into account your new knowledge.
Then, come up with a new feature again and create it using that new knowledge. Take into account how the improved code makes it easier or harder for you to add a new feature, and how many bugs you can find.
Gradually, through several iterations, add complexity to the project and rewrite it with the lessons you’ve learned.
Assuming you don’t cut corners, you’ll see how the decisions you make interfere with or help implement new features. One of the main criteria for code quality is how easy it is to make changes to the project. Unfortunately, there are no clear laws to this; it all comes with experience.
If you don’t feel like creating simple games, you could start by coding individual mechanics instead. For example, you could start by making a rudimentary “car” composed of a couple of cubes driven on some surface — then, gradually add other mechanics into the mix.
After that, you can come up with a more complex game — and again go through several iterations to improve the project. If you get an interesting result, you can eventually try to release this game in stores.
Releasing your first game
You can try releasing via
I can offer you a small life hack regarding game releases: web/browser games. Although this format seems to have lost popularity given that users now mainly play on mobile devices, PCs, or consoles, web games still have a sufficient audience, so you can try to launch your debut project as one. This is also much easier than releasing it as a native game on mobile devices.
Mobile games competition is fierce, and your game is most likely to go unnoticed, assuming it isn’t promoted — and it’s very difficult to promote a project without a publisher. For web games, there are special portals (for example: Armor Games, Newgrounds, WebGames) that host these projects: it’s very easy to release there, and you can even earn something on advertising. Don’t get your hopes up, but still, if it happens, it’s a pleasant bonus.
A small warning on the “no-code” approach
Now, a little warning. These days, the “no-code” approach is very popular. This is when a project is created without writing code. (It’s also called “mouse-click programming”). My advice? Better to stay away from this approach.
These no-code approaches are ideal for trying out game mechanics or building a simple prototype. But we have a different overall goal — and assembling a simple game without code won’t bring you any closer to becoming a developer.
Remember: no amount of reading articles and watching YouTube guides can replace practice. Only by creating several (and really, several, not just one) projects, will you learn something meaningful. To chart your path as a programmer in game development, the manta here is to go step-by-step, from simple to complex.
I’ve tried to give some advice on getting into game development and starting to program games. Choosing the right language and engine, persistence and perseverance, collecting feedback, and introspection — these are all very important. But there’s another component to this process that cannot be neglected: having fun.
If you’re not passionate about games and you don’t play them, most likely, nothing will come of this venture; a sad truth that applies to basically any creative work. Without fun, it will become just some routine for making money. Sure, you may lose interest years later anyway, but hopefully by then, you’ll already be accomplished and able to choose between some related work, or you’ll have earned enough to do something new and interesting for you at that point.
Especially at the beginning of your journey, all work and no play will definitely lead to burnout and disappointment.
Therefore, my last piece of advice: look for what makes you passionate, the thing that drives you to work on a project for days and nights (of course, you should not do this literally!) Once you find your driving motivation, that which would otherwise be a typical routine will turn into an interesting, engaging challenge — and this will be sure to speed up your professional growth!
Also published here.