Before going further, it’s important to say that there is no magic formula to be a better coder and, as with everything else, the key to success is hard work and discipline.
As programmers, one of the things that makes us improve is having as much knowledge as possible on algorithms. It’s how we’re able to tackle a wider range of problems; either because we need “the correct” solution or the fastest one (usually being the latter in our field). Every problem can be decomposed into sub-problems until reaching a point where the sub-problem is really easy to solve.
However, it’s not always easy to decompose such problems or tackle the teeny tiny ones because we haven’t faced anything like it before. The best and worst thing is that they’re everywhere; from rendering, to artificial intelligence, physics, and gameplay mechanics. Everything boils down to algorithms.
Some of you may be familiar with programming competitions, and this is where I’m going. Participating in programming competitions, as a way to meet our long-term goal, is simple invaluable. Everyone who can, should do it at least a couple of times. Training, and signing up, for programming competitions is a great experience for two reasons; it helps us improve our level of abstraction to reevaluate problems, so we can solve them in a different way, and reach the solution in less time.
Results? better personal performance and better solutions inside the games or applications. Anyone who has been in a game jam knows the true value of solving problems fast. A game developed with efficient algorithms has a better chance to run smoothly, having better impact on player experience, which could translate into both monetary and technical success. Finally, it has a great impact on testing and experimentation; fast-paced prototyping helps discard bad ideas sooner, improving the time it takes to pivot or moving onto other concepts.
Leveraging we’re talking about programming contests, there are several places to practice but the one I like the most is the UVa Online Judge site. It has either a wide range of problem sets, but also they’re arranged by categories such as problems regarding the official ACM-ICPC contests, and problems for some text books on the area. There are other sites as well, but let’s keep it simple today. Finally, despite not being into programming contests myself, I’m really thankful my friend Ricardo introduced me to this world of opportunities while teaching me some programming techniques that have been proved useful.
One thing that has helped me improve is implementing algorithms from books or papers. They explain the train of thought for solving the problem they’re teaching and give you hints on how to approach similar problem. Taking them as a starting point on research is a fun way to improve knowledge and skills in an organized way.
Also, prototyping different ideas is a great way to improve and it’s one of the things I usually do in my spare time. It gives us the chance to approach different kind of problems, just like programming competitions, but this time focused on gameplay mechanics and features. It has the downside of not being closed products, taking us away from the necessary pain and commitment of completing a game (despite cutting corners), but it certainly improves response time during game jams or job interviews that ask us to deliver a short game in a couple of days.
Taking programming interviews works like a charm. We’re not choosing the problems, some other people are, and it makes us step out of our comfort zone and deal with the problems at hand, in a very-limited amount of time. Yes, like programming competitions, only there’s the additional pressure of not getting the job. The most important thing is not getting discouraged if we fail a programming interview, it’s a natural process. Try asking the interviewer what went wrong, what things you did good, reflect and there lie the next steps to take for improving. I’ve failed several programming interviews, and I’m not ashamed of saying it, because failing is an important part of growing up and improving.
Today I wanted to share with you some insights that have helped me improve in the last four years. With a little research and work, you’ll figure out how to become a better game programmer yourself with your own advantages and limitations. Also, be advised to take them with a pinch of salt; I’m better than before but not even close enough to a point to where I feel really comfortable (impostor syndrome, maybe?). However, I’ve tasted some of the benefits of studying, researching, and practicing by releasing/showing products or proofs of concept.