Update 18/3-2018: After posting this article on Twitter and receiving some feedback, I added some additional questions that I realized I had forgotten about
I have recently been interviewing at game companies, trying to land a job as a junior graphics programmer. Having done so, I gained knowledge of what skills game companies expect of a newly graduated graphics programmer, and what questions they are likely to ask during interviews. I will in this article compile these findings into a handy checklist. The intention is that other newly graduated programmers can use this list as a way to prepare, by providing them with a list of topics that they should rehearse before going into their first interview. However, as a disclaimer, I do not recommend just memorizing a bunch of answers to these questions. The topics in this list are topics that you need to understand and master in order to solve the programming problems that you will encounter as a professional graphics programmer. Always strive to understand, not to memorize.
The questions that will probably be asked during the interview can be organized into the categories of C++, Mathematics, Optimization and Computer Graphics. As can be observed, these categories are topics that are central to the day-to-day work of a graphics programmer; C++ is a language that is pretty commonly used in graphics programming jobs, so it is natural that there are many questions about this language during the interview. Further, graphics programming requires a better handle of math than most other types of programming, so math skills are paramount. Finally, in order to achieve 60FPS while still rendering a game with high graphical fidelity, strong optimization skills are a must. Let us go through a number of common questions in each category.
inline
keyword&
and |
and
friendssizeof
for a pointer)As a general rule, none of the questions were about advanced language features. I was for instance never asked to do any template metaprogramming, which was a relief.
There was actually not much variety when it came to the math questions:
You will probably also be asked to solve some practical, graphics-related problems that will involve using dot products, cross products, and quaternions. But if you are an experienced graphics programmer, this should pose no issues.
Game companies seem to expect you to have experience with profiling and optimizing your code using tools such as NVIDIA Nsight, so do get familiar with them. Also, this is a good book for brushing up on computer architecture topics such as cache memory.
The last question in particular seems to be pretty common in interviews for graphics programming jobs. If you are not entirely confident on all parts of the pipeline, then my general advice is that you write a small software rasterizer. This is an exercise that allows you to gain a deep understanding of the pipeline, because writing a software rasterizer is in many ways similar to implementing the graphics pipeline from scratch.
Many of the above questions should primarily be considered as warm-up questions. There will probably be some more detailed and involved questions after them(but I will not disclose them here, since the companies I interviewed for would probably not appreciate that). However, the above list of questions should give the reader a good understanding of what topics he/she will be expected to be proficient in.
Some readers may still be in school, and are unsure which courses they should be reading, if they are interested in a career in computer graphics. My recommendation is to primarily focus your efforts on courses that involve High Performance Computing, and Applied Mathematics. Regarding programming courses, try to read courses involving topics like multithreading, computer architecture, and GPGPU, and other topics that are related to High Performance Computing. As for math courses, primarily courses with names like "Linear Algebra", "Multivariable Calculus"(in USA, this course is called "Calculus III" I think), "Probability Theory", "Numerical Optimization", "Differential Equations", and "Computational Geometry" will be of interest to you. Primarily focus your attention on very applied mathematics, and not on more abstract math topics such as Topology and Abstract Algebra, as they are not that useful in computer graphics.
In general, you are not expected to know about every single subtopic of computer graphics .The label "computer graphics" covers a vast array of subtopics, such as global illumination, occlusion culling, shadow rendering, pathtracing, fluid simulation, geometry processing, GPGPU, physically based rendering, and so on. Expecting a junior programmer to know all these topics in detail would be unreasonable. However, if you put something on your CV, do be prepared to give detailed answers related to this topic.
So you are not expected to know EVERYTHING there is to know about computer graphics. Instead, what often will happen is that you are asked to explain about major computer graphics projects that you have worked on. Then the interviewer will be asking plenty of follow-up questions, and make you explain your project in detail. So my advice is that, before the interview, you pick out a couple of projects that you are especially proud over, and prepare yourself for giving a detailed explanation of these projects.
In my opinion, the best way to prepare for the interview, is to work on plenty of side projects in your spare time. Showcasing the projects you have worked on is a good way of selling yourself to the interviewer, and it allows you to show that you are truly passionate for this field. Finally, working on these side projects will allow you to sharpen your programming skills, and this in turn makes it much easier to answer all the questions I have listed in this article.