Thursday, October 13, 2011

About my Career as a Games Programmer

A student from a local college asked me some questions about my job. I thought I’d reprint my answers here.
So, What is your position at Heavy Iron and what are your specific duties?
  • I am the ‘Studio Technical Director’.
  • I am the head of the programming department.
  • I spend some of my time programming the game, and tools we use to make the game.
  • I work with other senior programmers and other departments (e.g. art, animation, sound, design) to work out what new features we should implement in our game/tools, and how to implement them.
  • I spend a little time in management meetings, where we discuss future projects, hiring of staff and other studio management things.
What skills, education, experience, and knowledge are required to qualify for your position?
  • I’ll start by giving my history:
    • I grew up in England.
    • I first got interested in programming when I was about 10 years old. I was given a computer which could run games, but you could also program ‘basic’ on.
    • Through school, I chose classes with computers in whenever I could.
    • I went to University and got a ‘Bachelors of Engineering in Computer Science’.
    • After University I got a job as a ‘junior programmer’ at a games company.
    • I’ve now been working for 15 years, at four different companies. The last 9 years, I’ve been at Heavy Iron.
    • I gradually became better and better at my job, and rose up to mid-level programmer, senior programmer, technical director and now studio technical director. At one point I was ‘lead programmer’ on a couple of games, and now the lead programmers report to me. (Lead programmers are the ones who do a lot of the decision making about how a game gets built – it’s a tough job, but fun too.)
  • To get a job as a programmer, it’s best to have a college degree in computer programming – specifically in C/C++ for the kind of games we make (PS3, Xbox 360, Wii) and several platforms which we don’t currently make games for (PC, Mac, iOS/iPhone/iPad, PSP, 3DS, Wii U).
  • In terms of skills and experience for my current position, I’d say you need many years of experience of programming games, and also a tendency to organize people, a curiosity for how things work, and a drive to make things and do the best job you can.
  • I tend to think that students who like and do well at math and physics, tend to make good programmers.
What is your work environment like?
  • We work on one floor of an office building. Most people sit in ‘cubes’, and some people sit in one or two person offices.
  • Compared to a ‘normal office’, we tend to have more ‘tech’ sitting around – monitors, TV’s, game consoles. Also because the industry has quite a lot of young / creative types, there is a fair amount of decoration – game posters, character models from TV/Movies/Games.
  • The group of people are fun to work with, and are mainly in the 20..40 years of age range. It’s mainly guys, but there are a few gals around too.
Are you under contract?
  • Yes. I am a full time employee, and so are most of the other people here.
  • A few people are on shorter term contracts, but (so far at least) the industry tends to mainly consist of full time positions.
Do you get any benefits?
  • Yes. Health, dental, vision, life insurance, disability. The company pays most of it, but I also pay some. It’s automatically taken from my paycheck.
What do you like the most/least about your job?
  • Most
    • I love programming. I do it at work, and then I go home and do it for my hobby / for fun.
    • I really like working with the nice people at work. Working as a team and making games is fun.
    • I like making cool tools (programs) which we use for making games.
    • I also teach programming at a local college one night a week. I like helping other programmers get into the industry, and spreading my passion for game coding.
  • Least
    • Being a manager comes with some dull tasks, like approving time-cards, sending out reminders to people that they need to keep the place clean, etc.
    • Again, as a manager, you sometimes need to tell people that there are problems with their work, or their behavior. It’s never fun to tell someone bad things like this.
What future changes do you anticipate in this field?
  • There’s a current shift going on from consoles like Xbox 360 towards mobile devices like the iPhone, and web games. This means companies and workers need to ‘stay agile’ and change with consumer demand.
  • I still think that C/C++ is relevant and useful (e.g. it’s needed for iPhone), but we’ll probably see more game programmers transitioning over to web technologies like Flash and JavaScript.
  • That’s one fun thing about the game industry though – there’s always something new coming at you, to keep things fresh.
What are the general application procedures for positions such as the one I will be seeking?
  • Get a degree.
  • If you can, get a programming internship. Try and closely match what you want to do for a living – e.g. working in C++ at a games company.
  • Write your resume, cover letter, and optionally create a website which shows demos of your work.
  • Email it in to companies.
  • If they are interested, you will then go through their interview process. This might include a phone interview, a written test, and an in-house interview.
What do you think is important to show in a resume for a position such as yours?
  • For a junior programmer position, I expect to see a degree, that you’ve been programming in C/C++, and then hopefully some evidence that you’re really good and committed.
  • It’s also nice to see some game-centric skills like doing GPU shader work, physics simulation, writing games, and making personal projects.
What advice do you have for me about preparing and interviewing successfully?
  • Code all the time. Become an awesome C/C++ programmer, and you can’t go far wrong.
  • If there’s an area you know you are weak in, or don’t understand, make a point of learning that area and becoming strong in it. Don’t just ‘work around’ your weaknesses. E.g. if you don’t understand C pointers – make it a point to get good at them.
  • If you graduate and don’t yet have a job lined up, don’t stop coding. Code more than ever. Otherwise you quickly forget things, and your chances of getting a job decline over time.
  • I have many other tips on my blog here (see the older posts with this tag first).
Bonus question: Have you or any of your coworkers thought about going indie?
  • Hah. I think we all do. Perhaps once a month :)
  • It’s a tough road though. No regular pay checks, no benefits, a lot of competition, and it can be harder than you might think to make a complete game and ship it.
  • It’s certainly possible, but I recommend getting a ‘proper job’ first to hone your skills and better appreciate the industry.

Monday, July 25, 2011

Tweaking Values In Game – AntTweakBar

A common problem when working on games and other programs is that you end up with some magic numbers in code which need lots of tuning. If you don’t have a good solution to the problem, you end up repeatedly making changes, recompiling, running, and then repeating.

Wouldn’t it be great if someone made a drop-in system which gave a UI for tweaking values at run time? Well, Philippe Decaudin has done just that, and has written AntTweakBar.

I just used it. It dropped in with just a few lines of code, and looks/works great in game. Now it just takes one line of code for each variable I want to tweak in game. I’m very impressed. Check out this video of AntTweakBar in use.

(This is for C/C++ by the way.)

Tuesday, May 24, 2011

8 Hygiene Tips for Programmers


Being around programmers for a long time has shown me that some don’t smell so good.

Remember – by the time you can smell yourself, it’s already way too late for those around you.

I invite you to check your habits against my minimum hygiene requirements:
  • Shower daily. Use soap or body wash.
      • Make sure your feet, pits, groin and ass get the brunt of the soap offensive.
      • Wash your hair too. At least every other day.
  • Socks, Underpants and T-Shirt – Change daily. (And by change, I mean do not wear again until washed.)
  • Jeans and Sweater are a bit tricky, but change a bare minimum of once a week. Twice would be ideal, or three times if you're the queen of England.
  • Coats can need washing too sometimes. It really depends on your relationship with your coat. If it gets sweaty when you do, then eye it with suspicion and wash it from time to time.
  • If you don’t wear socks or change them daily, your shoes smell. If they smell, give them the Viking burial, buy some new ones and wear socks this time.
  • If your finger or toe nails get 2..3mm long, cut them.
  • Brush your teeth well in the morning and night. Use floss to avoid losing teeth. Brush your tongue too, as this reduces bad breath. If you like coffee, then may I recommend adding some breath mints to this.
  • Put deodorant on each morning. If this is new to you, go and buy a can of Axe (or Lynx for UK folks). How do you pick the right one? What if the one you get doesn’t smell good?
      • Remember that even the worst smelling can of Lynx smells ten times better than you do.
      • You can use the normal person approach of spraying each on a new body part, sniffing and choosing the right one. Though the reality is that this approach is frustrating and doesn’t work.
      • Instead either pick the left-most one, the one with the coolest name, the one with your favorite color, or buy one of each to save yourself from coming back (and also injecting some much needed variety into your life).
Bonus stylin’ tip – Hair styles:
  • Side partings don’t look good and never did. Your mum likes them, and that’s it.
  • If you’ve had the same hair style since you were 15, it’s time to review it.
  • Girls like pony tails and mullets. Oh wait, no, nobody likes them. Time to change.
  • If you are going bald, do not hide it, and get your hair cut short.
  • If you think your hairstyle may not be contemporary / cool:
      • Strike up a conversation with a female in the office who dresses fashionably.
      • Repeat after me “I’ve been thinking about changing how I get my hair cut. How do you think I should get it done?”.
      • And if that doesn’t work out, just sit down in the chair at Super Cuts or Fantastic Sam's and say that you want a new hair style that’s short, looks OK and requires zero maintenance. The hair dresser might as you a couple of questions, to which you answer “I have no idea. Just do what you think will look good.”. When they’re done, ask “So what do I ask for to get that hairstyle again?”, and give them a $10 tip because you feel giddy. (I say Super Cuts or Fantastic Sam's for American programmers – if not in America, just make sure your hairdresser is female or ‘rather flamboyant’)
There now. If you implement all of the above, you can hold your head and arms up high, with little fear of stinking up the place.

Wednesday, March 23, 2011

How to get a job in videogames

Occasionally someone will ask ‘how can I get a job in videogames?’ and not know what specific type of work is available. Here’s a list of the main jobs.
Programmer
Programmers write code (C/C++/Java/C# etc). To be a programmer you generally need to go to college and major in Software Engineering or a similar field. You should also program for fun in your spare time. Programmers tend to be good at math and physics.
If you’ve never programmed before, and wonder what it’s like, install Small Basic and work through the guide which comes with it. Don’t worry – it’s simple enough for kids, so an adult can do it with a little effort :)
Game companies have a large staff of programmers. The high technical barrier to entry means that there are fewer qualified applicants and higher resulting pay than some of the other jobs below.
The main reason I started this blog was to help programmers get into the game industry. See this tag for my tips – read the oldest posts first.
Designer
Designers use a level editor to build the levels of the game – placing monsters, ammo, and setting up ‘events’ which happen. They also design the game as a whole and work with the other departments to realize that vision.
I’ve written before about what a designer does and how to go about getting a position.
Artist
Artists make 2D art in Photoshop, and 3D models in Max or Maya. To be an artist, you have to be good at art, and have gone to art school. It’s possible to teach yourself how to use art packages, but art school will teach other skills such as composition which are also needed. When artists apply for jobs, then include a link to an online portfolio of their work. Here’s a random example I found online.
Game companies have a large staff of artists (depending on the type of game). So there are more ‘slots’ to apply for, but competition can be high as there are many aspiring artists.
Animator
Animators, similar to artists, work in Max or Maya. The create skeletons for characters (‘rigging’), and then animated them. Again, you need to go to art school to learn the skills involved. Animation used to be part of the artists job, but increasingly the jobs are specializing into two or more different roles.
Animators are usually in smaller number than the artists, and again, competition can be high.
Sound Designer
Sound designers place and configure sounds and music within the game. Sometimes this can include the original creation of the sounds, but often libraries of sounds are used, and music creation is outsourced to a third party.
Sound designers are quite few in number. It is a relatively new field, which was originally lumped in with the role of the designer. Having gone to college to study music or audio production would be useful.
Producer
A producer (job title my vary by company) ensures that the project is completed in a timely manner, and communicates with external companies (e.g. the publisher, IP license holder, music creation, language translation). The role is all about planning when things need to happen, communicating with people to make sure things will run smoothly, and then tracking progress to make sure things work out as planned.
The production staff tends to be fairly small. Majoring in business administration would be a good choice for this type of position, but it’s not a requirement.
Tester
Testing (A.K.A. Quality Assurance) consists of playing the game, to find bugs in it. The team then fix the bugs, and the testers check that the bug is gone.
Testing isn’t as much fun as it may sound. You play the same game for months or years, repeatedly completing it, playing the game on the different consoles, playing it in each different language etc. Plus it’s a full time job – you don’t just play when you want to.
As the job doesn’t require years of technical training, it can be easier to get a position, but the pay is not as good. This said, it is possible to work your way up through test into positions in design, production or IT, and can give you valuable experience in game development. So testing can be a good route into ‘better’ positions for people lacking qualifications and experience.
Other Supporting Positions
Depending on the size of the company, there are also a number of supporting roles which are less directly related to the game side of things. These positions include Administrative Assistant, Human Resources, Recruiting, Accounting, Sales and Marketing, I.T. / Tech Support. As game studios tend to be quite ‘young’ and playful in nature, and you get to support the team who are working on the game, working in these roles can still contain the ‘fun’ of working in games.

Tuesday, March 15, 2011

So You Want to Work in the Video Game Industry

Here’s a funny and depressing way of looking at working in games.

There’s a lot of truth in there, but it’s not that bad :)

I’ve worked a few different types of job, and working in games has proven the most fun for me.

Thursday, February 03, 2011

Counting lines of code in Visual Studio 2008 and 2010

Here’s a cool trick for counting the approximate number of lines of code.

http://blog.schuager.com/2009/01/line-count-in-visual-studio.html

I got this from the awesome Stack Overflow.