The Why Behind the What. The Skills You Need to Learn to Make Video Games: Part 1

Drew Coleman
8 min readMay 15, 2019
Photo by Emily Morter on Unsplash

It can be intimidating to start learning any new skill. You literally know nothing, and even finding the start of the path can be a challenge, especially if you are self-taught, and rely on the internet for guidance.

I have come across many great articles, or forums posts, of people giving excellent advice on how beginners can start their journey to becoming a game developer like this roadmap here. However, one way in which I think a lot of advice on the internet could be made even better is if people spent more time explaining why some of these skills are important.

Mostly, I think knowing why we need to learn something is important is because it gives you that motivation to learn something, especially if it’s not an overly exciting subject and doesn’t present immediate feedback or results, say improving your programming skills.

Also, knowing why can save you from wasting time learning things you didn’t need to know. Don’t want to be a physics programmer? Good, because then you don’t need to know calculus. But even if you did want to, and so wanted to learn calculus, the amount that you needed to know also comes into question because you can’t just learn a subject such as calculus. Subjects like this are not static, they are constantly changing and evolving as people spend their entire life devoted to studying and improving them. The path is not always clear on why, or even how much we should learn.

Learning and knowing stuff is good because it gives you more tools for solving problems, but you don’t need to know everything. Additionally, we don’t always have the luxury of infinite amounts of time to dedicate to learning, which is why I come back to the point of this article and the importance of knowing the why behind what we are trying to learn.

I want to spend the rest of this article delving into why some of the most common referred to skills such as: C++, computer graphics, data structures, algorithms, and certain fields of mathematics are so important to game development, and programming in general, and what benefits you would get out of learning a bit about them.

C++. The Language of Game Developers

For those looking to get started in game development and have already done some research then you might have come across many people talking about C++ being the programming language of choice for game developers.

This is often the case. C++ is an old language, having been used for the last two decades. When it was first used there was no alternative language that gave developers the performance required to make games on older generations of hardware.

There is an argument that it is becoming less important. Companies like Unity are planning on rewriting their entire engine in C# and newer languages like Rust are hailed as being the replacement of C++ but either way C++ is here to stay for the foreseeable future. Mostly because most of the industry have engines and games written in the language by developers with decades of experiencing using it.

If you are looking to work in the games industry, then you’ll often see C++ written as a requirement. C++ gives great performance when used properly and knowing how to use it properly requires a certain amount of knowledge about how computers work at a lower level.

Also, if you are looking to dive into topics such as computer graphics, artificial intelligence, or game engine development, then you’ll often find that much of the code you’ll make use of is written in C++. Therefore, there isn’t really anyway to avoid it unless you plan on sticking solely to developing games in an engine, which my previous article will hopefully convince you is a bad idea.

Ordering and Operating on Data with Data Structures

A data structure is a collection of data that is stored in a particular way, and has a particular set of operations, or actions that can be performed on that data. If you are new to programming, then that might not make much sense, so instead, think about a bookshelf. A bookshelf can be used to store a collection of books, and we can perform certain actions on our books. We can place books on our bookshelf or remove books. We can also sort our books on a shelf, say alphabetically by author and this would give us the advantage of making it easier to find a particular book later. Also, just having the books on the bookshelf makes them easier to find then opposed to having them scattered throughout our house.

That is how you can look at data structures. We have a collection of data and we can perform actions like inserting, removing, sorting, and searching our data. There are many types of data structures, and it’s important to understand each of their strengths and weaknesses so we can know which is best to apply in a certain situation.

For example, we could decide not to store our books on a book shelf and instead store them in a box. The difference between storing them on a bookshelf, as opposed to in a box, is that unless the book we want is on top, we would have to take books out of the box until we found the one we wanted, then put all the books back in the box. If the books were sorted in the box, then when we were finished with our current book, we would have to take out all the books again to put our finished book in the correct place and then put all the books back again. In this instance it would be more efficient to have the books stored on a bookshelf than in a box.

Therefore, I hope the above example shows that how are data is stored in our programs is hugely important. It affects where our data is stored, and how we access it, which can have implications on our programs such as making it perform slower than it should if we choose the wrong data structure.

Data structures are a fundamental part of programming, and thus game development and aren’t something that should be ignored.

Algorithms. Reusable Problem Solving

An algorithm is another hugely important part of learning to program. An algorithm is a set of steps that can be followed to solve a problem. These steps are written in such a way that they can be easily implemented in code, but algorithms are not code. Algorithms also take in data as input, and produce data as output, the solution to our problem.

You can think of an algorithm like a food recipe. If, for example, we wanted to make a sandwich we could describe this in terms of an algorithm. We would have as input bread, butter, and sandwich filling, the steps to create our sandwich could be to butter the bread place the filling on top of one piece of bread, place the second slice of bread, butter facing down onto top of the filling. Optionally cutting our bread in squares, triangles or whatever. The output though is that we have a sandwich.

Similar to with data structures, there already exists a large number of algorithms that can be used within your own programs. What algorithm is used is important. An algorithm will take a certain time to run and whilst it runs it might also use up a certain amount of storage space on your computer. Based on the hardware your code runs on there might be limitations on time and space, and thus choosing which algorithm to use, or even designing your own becomes an important consideration.

Yes, as programmers we should be designing our own algorithms. One of the good things about solving problems is that there are many different ways of doing it, each solution having its own strengths and weaknesses. When we learn to write our own algorithms, we gain invaluable experience on how to tackle problems, gaining an understanding of all the different ways something can be solved.

Therefore, algorithms are also important to understand as a game developer. Knowing about them to help solve certain problems, to know how they perform in terms of time and space to ensure we choose the correct one for our problem and learning to design our own to gain intuition about how to look at solving problems in different ways.

Computer Hardware. Learning How it All Works.

The software we build is run on more software called an operating system whose job it is to coordinate and allow communication between all of the different hardware devices that make up a computer. Each hardware component has its own job whether that’s understanding the code we have written so that it can carry out the actions we have given it or storing the program somewhere so we can use it later.

It can be surprisingly practical to have some understanding of the environment both software and hardware that our programs exist on. Again, the more you know the greater the chance you have at solving problems and understanding when things go wrong in your program.

For instance, C++ is often widely used by game developers because it allows greater control over memory management. Managing memory, means controlling where, and how are data is stored, but also when it is created, and destroyed. Good memory management can lead to performance improvements in games.

Also, when debugging, you’ll often come across errors that won’t make much sense without knowledge about the hardware and some topics such as computer graphics, and multithreading just require a certain level of knowledge about GPUs, CPUs, and memory before you can really start to learn about them.

Therefore, especially for game development, where there is such a huge importance on performance, there is a need to understand how parts of your computer work in some detail. Not knowing won’t stop you making games, but as your games get bigger and more complicated this knowledge will become increasingly important. Just think those beautiful visuals in your favourite AAA games don’t come without a deep understanding of the hardware they run on.

I hope this article has provided some answers as to why some of these topics are important to game development, I intended to cover a lot more, but then this article was already getting pretty long and I realised that the importance of maths in games could cover an article itself. Therefore, I will do just that, and focus on talking about mathematics, what you need to know, and most importantly why in my next blog post so stay tuned if you’re interested and enjoy the rest of your day :)

To read me more check out my blog at: www.gamedevunboxed.com

--

--

Drew Coleman

Game developer writing articles about: game development and programming.