Followers

Friday, June 13, 2008

Running the Gauntlet (Part 2)

After my phone interview, I was sent the feared programming test. These tests are designed to gauge your knowledge of the C++ language as it applies too games. I ahve seen several versions of programming tests sent by game companies. In my opinion, many of them are an unrealistic test of an entry level programmer's skills. That means that these tests are a major hurdle to overcome for recent graduates or anyone trying to break into the game industry.

I know this is just my own personal soapbox, but the reality of programming is that you do most of it with a reference or two at your side before you get up to speed. Even experts need to refer to reference materials to get it right. So a test that require advanced math and programming to be completed in a short amount of time without any reference material seem unrealistic to me. However, the reality is that you MUST be prepared to deal with these types of tests if you ever want to get to the next step.

Perhaps we'll cover some of these types of questions in future blogs and run through the solutions. Fortunately for me, the test I was given was more realistic. I can't share the specifics of the test, but I can give a general idea of what was required.

The first step was to create a basic "adventure" type game. The implementation was left totally up to me, but I could tell from the requirements that they were looking for a piece of code that demonstrated a wide range of standard C++ skills with some direct application to game programming. Some of the elements necessary to pass this test were:

  • Implementing a game loop
  • Creating classes
  • Class inheritance
  • Container classes
  • Virtual and pure virtual functions
  • Using polymorphism
  • Static variables and functions
  • Friend functions
  • Use of the standard template library (STL), especially vecotr
  • Use of iterators
  • Dynamic memory allocation and deallocation

The second requirement was to write a detailed design spec for a particular problem. Some of the skill required to pass this part of the test included:

  • Good writing skills
  • Good analytical skills
  • Solid problem solving skills
  • A basic understanding of state machines

The thing I most appreciated about my test is that it was a true test of my problem solving abilities, not a test of how well I had memorized particular routines or snippets of C code. I was allowed to solve the problems using any resources at my disposal without a time limit (other that the deadline to turn in the test which was quite reasonable).

I think the key to my success in passing this test was that I didn't put it off until the last minute. I started that day, and then worked on my solutions over the next two days, leaving time at the the end for review and polish.

I'll be the first to admit that I did not pass these tests with perfect accuracy. I later discovered I had made one or two glaring errors. However, the company I work for looks for good problem solving skills more than they look for perfect code, and my performance was sufficient to earn me the next level in the process: the face-to-face interview!

Robert