Thursday, December 01, 2005

Thinking in code

A student of mine just got his first games job way to go Matt!

That got me thinking about the whole games company interview process. In particular, I have had my fair share of interviews, which I somehow seem to have lost the questions for. So I did some quick digging to try and find some websites with useful "game programmer interview" questions.

Usually during the final months of thier studies, I try and give students some mock interviews and questions in order to try and pinpoint thier weaknesses and to try and prime them for how a typical interview scenario might look.

Anyway, as I was reading about some microsoft interview experiences (for which apprently there is a book called "moving mount fuji"), I started to think about how I felt during interviews, specifically, technical interviews.

This got me thinking about internal dialogue. You know, that sort of voice you have in your mind that you are in constant communication with that acts as your concience and generally lets you think through your decisions. It got me thinking specifically about programming and that internal dialogue. You see, I program because it is a means to an end. It is part of the process of creating games for me, so I dont generally consider programming when I'm thinking of games. So for me when I'm going into a game development job, the LAST thing on my mind is some generic programming riddle.

When I think of games, I think of systems, interfaces, algorithms, data structures. I do not think in the language of code. Which is exactly what you are supposed to do at these interviews with the typical whiteboard-pseudocode concept right? With those they are testing how you think-code, how you consider code elements. But I tend to think beyond that code particularly, towards what it will be useful for. I guess that might be why I'm not as enamoured of the whole "engineering" aspect of programming as many are. I dont consider a deep understanding of C++'isms to be something vital to my development as a game developer. In fact, if things could just pour out of my mind and appear somewhere in a game, then I'd not do any coding at all.

I guess thats what a designer who cant code is basically counting on. Sadly thats very rare.

Now thats not to say that I'm actually a game designer in the classic sense, because from my admittedly limited experience of game designers, I generally think in far more mechanical terms than they do. If I were to nail down my thoughts on game design to a particular methodology, I'd have to go with something like Ben Cousin's methods of measurement and comparison (see his GDC and GDCE lectures on timings).

Every time I try and come up with designs that are entirely abstract, I seem to fall short. So I've always taken to trying to consider games in terms of concrete mechanisms. For instance, the act of hitting balls with bats. That mechanical concern "what variables are there that cause a difference in reaction when a bat hits a ball" is something I'm very much at home with. So I guess there is some notion of the programmer-engineer trait inside me, but my internal dialogue so often has nothing to do with the language of code and has much more to do with the language of feel.

I'm not even sure what this means, because it isnt something that necassarily helps create great games. But I think at least being aware of and contemplating your inner personality sooner or later leads to some level of self-enlightenment. Knowing that I never really want to be in an uber-technology-led position, is something I knew a long time ago. But trying to find the right place where my knowledge and skills actually hit exactly the right sweet spot where my own personality type and my yearning for the right "feel" of things is an interesting journey.

Now that I read back what I said, the way I write feel a lot, suggests that I am indeed a tactile person. Ok, ignorant as I am, I cannot for the life of me remember where the different personality types come from, but there are, as I recall, auditory (people who like sound), visual (people who like to see things) and tactile (people who like to touch) dominant personality types. Of course youre friendly neighbourhood phsycologist will explain what this actually means.

Strange then that I am a musician (suggesting audio) and have always loved movies and game graphics programming (suggesting visual). Go figure!