Applying for a graphics programming job

Over the past few years I have interviewed a lot of people for graphics programming posts, both experienced and junior and I’d like to share some thoughts on how can one prepare themselves better for the process. This post is a sort of continuation of the previous one about how can one start learning graphics programming.

This advice applies mainly to junior graphics programmers, I imagine that if you are an experienced one you know what you are doing. Also I should point out that this is from my experience in the various companies that I have worked at. Other companies might view the process differently or have different criteria for selecting applicants.

Before the application

Think about why you want to become a graphics programmer. Playing games (and enjoying AAA graphics) alone is not enough. Neither that you’ve done a graphics course as part of your degree, necessarily. Have you ever scribbled a shader in Shadertoy? Have you pushed a shader in a university course above and beyond the requirements, eg to add a cubemap or refraction to water and been amazed by the result? Have you ever been inspired by Pixar’s CGI movies and attempted to raytrace some spheres in C++? These are all good signs.

In short, you must have a passion for computer graphics and a desire to keep on learning and expanding your knowledge as graphics technology is probably the fastest changing.

In terms of graphics knowledge and experience, for a junior programming role the interviewer won’t expect you to have practical experience in a wide range of topics. To increase your chances through, you should have a decent theoretical background in graphics. To know, for example, the difference between specular and diffuse lighting, what texture mipmapping is, the 3D transforms we use when rendering, the GPU pipeline stages, maybe the difference between deferred and forward rendering. Be aware that the performance is important in real time rendering and mention a couple of ways to improve it.

Take a look at this list. The more topics from it you are familiar with, the better.

Preparing the application

Any junior programming role is a big investment for a company, a junior graphics programming role even more as it is very specialised. This is the reason why they are, unfortunately, very rare in the games industry, which means that competition for a post might be intense.

It is imperative that your passion and enthusiasm about graphics is obvious to the prospective employers, initially through your CV and portfolio. Employers usually receive many CVs for evaluation and, out of necessity, might have little time to devote to each. You must make sure that your CV will grab their attention.

In general a prospective employer will look for two things (for a junior post), first if you know how to program (likely in C++) and what graphics programming experience (and knowledge) you have. So, start with your work experience, if you have any, and emphasise anything programming and graphics related. Then education, again highlighting any courses that had a graphics and programming component, eg a course project or your dissertation. Don’t go too wide, spending a lot of space on stuff that are not directly related to the role (like web programming, or Java). They are definitely worth mentioning as part of your general experience though.

Avoid sending an overly generic CV for a graphics programming post. As mentioned above, try to list and emphasize any graphics experience/knowledge.

If the prospective employer finds your CV interesting, they will look for a portfolio of your work. You must strive to create one as it will boost your application significantly. At the very minimum it can be a web site with university projects, with descriptions, images and source code. Images show the quality of your graphics work and source code the quality of your code so don’t forget to include both. If you have a github with personal graphics projects and techniques that you experiment with in your own time (in Unity or C++ and a graphics API etc), add it, it will enhance the application even more. Don’t forget to add many screenshots and description of features. Any graphics work is valuable and should be included in your portfolio.

You can send your application via a job agent or directly via the company’s website. Prefer the second way if you can as it allows you to express your interest in a specific company/project better (and it shows that you are keen). Also send your CV in PDF format if possible as there is no guarantee how the Word format will end up on the other end.

During the interview

The interview process can vary dramatically between companies and it can be in stages, a short, “get to know you”, interview first followed by more. It can be in the form of a test, or a chat with employees (most usually the lead graphics programmer or engine programmer) or both. You will be asked to demonstrate both your coding and graphics knowledge but more importantly you will need to show your love for graphics programming and the desire to learn (and be taught), which is something prospective employers will keenly look for. If you have a laptop with some graphics demos you’ve created you can bring it to the interview (just make sure that they all run correctly beforehand). Finally don’t forget to ask questions about the company, the culture, what your role entails, who and how will mentor you, what training is on offer, if they have a library of graphics books, if they send people to graphics conferences. A choice of a particular company is as much an important decision for you as it is the employer’s so choose wisely!

Good luck!

Applying for a graphics programming job

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s