There is a common pattern among talented game programmers: they all feel like they are not skilled enough. Strangely, this often biased feeling make them even better than they already are.
Programming is a complex activity whatever the language or subject. Its vastness often implies to deal with several fields of specialization such as A.I., rendering, physics, sounds, gameplay… etc. The fact that mastering every game programming field is not humanly possible can transform a good coder into a good coder with a lack of self-esteem1.
The trick in game programming, as for every other activity, is not to become the best in a specific domain but to try to be as good as possible in a various set.2
Anyone can become better and it only requires two things: time and curiosity. Combine them and you might just have new super powers.
Books are beautiful objects full of knowledge.
Let me be clear here: you can’t improve your skills without reading a lot. It’s a fact. It’s how things work: you have to read about techniques, ideas, design patterns, software architecture, networking optimization, compression, complex A.I…
But books can sometimes be expensive (especially books about video game development). That’s why the mighty leprechaun of technology has invented this magical thing we now call the Internet.
You can find thousands of websites talking about game programming online. Big news! Of course you knew that. But have you tried to see the content from outside of the box?
Internet has slowly become a giant copy/paste section full of codes ready to be used. We almost forgot how to read and understand the content. Next time you will make a search about a random subject, let’s say meta heuristics optimization for example, you will surely find blogs and sites talking about that. Some will even offer you to download code samples or examples. Don’t rush, it’s a trap.
Try to take five minutes and analyze what you’re doing. Ask yourself if you understand what the code you’re looking at implies. If you don’t understand one thing, gather material on it, and start the whole process again until you reach a [90%]3 satisfaction feeling.
The idea is not to fall down a Wikipedia hole but is to take few more minutes to be sure that you understand what you’re going to use. That way, next time you will need to work with meta heuristics, maybe you won’t need the Internet to help you. Maybe you will have the knowledge to do it by yourself.
Here are some books and sites every game programmer should know about:
One of the best way to learn something new is to teach it.
That may sound dumb but that’s true. If you have to teach your little sister how to juggle, you have to know how to juggle first. You will try. You will fail at start. But soon (if you’re not too clumsy) you will improve your skills and add juggling to your skill portfolio.
Learning to teach is a very efficient way to keep the knowledge. Because as you will put yourself in a student posture in order to become the teacher later, you will be able to anticipate students needs before they happen.
There are various way to learn by teaching when you’re a game programmer.
Help people online
You surely already know about Stack Overflow, the Q&A board you land on 99 times out of 100 when you search about a programming topic online. Well, Stack Overflow is part of a gigantic hub called Stack Exchange. And there is one very particular board for when you want to teach / help people about game programming called Game Dev.
There you will be able to ask questions about game development but you will also be able to answer questions. If you aim at becoming a better game programmer I suggest you take some time (at least 15 minutes a day) and dedicate yourself at answering other people questions. Your ideal goal would be to answer at least one question a day.
Using Stack Exchange will help confronting your ideas and views on game programming to a large community composed of both experts and beginners. You will sometimes be corrected and learn a lot in the way. It’s always a good idea to help other people (be it online or in the real life).
Write a book on a subject you don’t master
Writing a book requires a lot of effort, time, and practice. In a book the content stays for ever. You can’t make a mistake and remove it easily once the book has been published. The very nature of a book makes writing the essence of the learn by teaching methodology.
Learn something new by actually doing something new. It is even more efficient than teaching if you want to become a better game programmer.
Push yourself into small challenges. Aiming at small but interesting goals can help you learning on subjects more easily than if you would have to find where to start.
Doing game jams will put you in a context where you will have a clear deadline, and a limited amount of time to digress or procrastinate. Jams are ideal for making things and not just wonder about things.
Challenges like One Game a Month will teach you about game programming but also about yourself. And if you’re looking for even more challenge I would suggest you to make a game a week. I’m in this particular mood these days, where I force myself to make mini-game and release them in two hours. That’s short but I’m amazed by the quantity of things I’ve learned in only few weeks.
If you want to learn about a specific subject try specialized jams. You want to learn how procedural generation works? Subscribe to ProcGen Jam. You want to learn how game controllers work? Subscribe to AltCtrl Game Jam. Well, you got the idea…
Games are not life
Now that you have reached the end of this post I will share you the best advice I know to become a better game programmer: don’t do only games.
Be curious about the other fields of the computing world. Learn a new language and make it yours. Tons of interesting programming languages exists and you should, sometimes, try to see what they propose. They all use different idioms and logic and they can help you solving problems in a different way that you would find unusual.
What works with languages works for everything. Be curious about hardware. Be curious about extreme programming and agile methodologies.
Be curious about the outside world!
In the end
Curiosity added to time can lead you to an extraordinary new set of knowledge. You just need to push yourself a little bit into new habits to become a better game programmer.
Yes, a programmer, this mighty creature made of pride, honour, and ego, can also lack of self-esteem. ↩
Note that we NEED specialists in every fields. However this post is directed to solo indies (or very small studios) eager to be better in their every day job. With that in mind it’s easy to understand how being good in several fields can be better than specialist in one. ↩
You can’t always be 100% sure that you grasped 100% of a concept. If you feel you are at 90% that’s fine, you got it. ↩