Having recently completed my own new graduate job hunt I wanted to share some of my observations about the things you HAVE to know to get a job as a programmer inside or outside of the game industry and other things that helped smooth the process for me.
I graduated from a games degree at a time when the Australian game development industry appears to be in a holding pattern, unsure of how to proceed and wary of growth, particularly after the industry wide liquidation of the past few years. Those who are still developing are largely two person indie teams and small to medium companies who mostly already have a full complement of staff. When the occasional new job does come up a new graduate is competing with hundreds of very experienced (and often out of work) developers with several titles to their names. This puts new graduates in a position where they either start their own indie studio, continue their studies or go into another industry. I sadly am one of the latter, with no jobs out there for new graduate game developers and rent needing to be paid I took up a job as a .Net developer.
This seems like a bit of a no brainer but the number of people out there applying for jobs who don’t is staggering. As a new graduates applying for programming roles there are some key concepts you should have your head around:
Do you remember those nifty keywords public, private, protected and/or default that you use to change what methods or classes can access particular methods, functions or variables? They are your core access modifiers, if you don’t remember the specifics of what each of the modifiers mean, spend time and get your head around them. Know what they mean and more specifically what they mean in the language that is required for the job you are applying for. Most of the time they will be fairly similar however some of the modifiers (like protected types) may mean something slightly different depending on the language. Know what these differences are!
Remember terms like static and constant, do you know what they mean when applied to a variable, class or method? Can they be applied to a class or method? How do these modifiers affect how a variable, method or class is treated by the program or treated in memory? If you are unsure of any of these I recommend you look them up, I generally would start with a textbook on the language I was wanting to work with but any language syntax overview should cover these and general access modifiers as well.
Interfaces, abstract classes and polymorphism
Do you know the difference between an interface and an abstract class? Do you understand the place of both these in building polymorphic behaviour? These concepts are particularly important if you are applying for a role dealing with OO (Object Oriented) languages. It is important to know them and know them well. I will also add that a healthy dose of generics can’t go astray either.
Design patterns are one of my favorite rant topics, instead of going into a lot of ranty detail, I will link you through to an article by Super Coders on the topic: Design patterns have (mostly) flopped. The key to take away from this “is that [design patterns] are tried and true solutions to recurring problems in software development.” Different languages have different design patterns that are core to their functionality. For example if you are looking at Java or C# MVC (model, view, controller) and MVVM (model, view, view model) are good places to start. If you’re are looking at Objective-C check out the delegation pattern and the singleton approach. It is important to know what design patterns are key to your chosen field/language, their strengths and their weaknesses. This knowledge will help you understand code written by others, add functionality and code to established structures in a consistent way and help you understand the theory behind various approaches allowing you to adapt them when you find the solution does not quite fit.
Data structures and collection frameworks
I find that far too many programmers get stuck with only ever using prefabricated collection frameworks, while this can speed up development time dramatically, there are times when a supplied data structure won’t cut it. Knowing how the core data structures work, how to traverse them efficiently, add and remove data from them (without losing your head or tail) will allow you to build your own structures, making you an asset rather than a hindrance in a tight spot.
This one is a no brainer if you are going for a job in a particular language know the language. If you are going for a job in C development know how to manage your memory, know how pointers work, understand how to dereference a pointer, know the difference between a pointer and primitive type. If it is C# then know how properties work, what ‘var’ means and some of the core methods and libraries you use. Knowing your language is vital, even if you are going for a job in a different language from your speciality do a quick read up on some of the syntactic differences or quirks of the languages you are interviewing for.
Industries often get caught up with development approaches, project management methodologies and a range of other things that while they may not be specifically relevant to your discipline you should be aware of things like; SCRUM and Agile methodologies; User metrics; Free-to-play and micro transactions; Gamification; User Stories; Cloud computing; Social media integration; Feature driven development; Test driven development etc. If they are relevant your discipline you should try and get a good grasp of them, if not it is a good idea to have your head around the basic concepts so when they are thrown around you know what people are talking about.
Preparation before a job hunt is vital. I have had an online portfolio for the past three years, it is where I include examples of my mods, games, art, writing and other development work. Over that time I have tried to get feedback from everyone I could, trying to make sure that the layout was clear, the examples were solid and it communicated all the right information. In 2011 I was extremely fortunate to be awarded one of the IGDA scholarships to the IGDA Leadership Forum in LA. I used that opportunity to learn, network and get even more feedback on my portfolio. As students we are always told to build up our online portfolios’ however most of the individuals you will talk to in the recruitment process will be human resources people and they want very different information than a developer looking at your work. Taking on all the feedback I received from both developers and recruiters I developed an online CV (http://www.annatito.com/) focused at recruiters as well as my online portfolio (http://www.mythicalcreature.net/) which is more developer focused. The online CV became the first link I sent to any recruiter it allowed them to assess my skills and background without having to trawl through my online portfolio or resume (in Australia the standard resume is three pages). This ease in accessing my information also had the added bonus of getting me put forward to more prospective employers quicker as the recruiter could send through a link to my online CV with a quick ‘is this the sort of person you are looking for’
Now a few of you may have degrees in Computer Science majoring in Game Development, I was in the unusual position of graduating with a Degree in Game Design majoring in Programming. Now having a specific industry degree can put a bit of a curve ball in the mix particularly when dealing with recruiters, in cases like mine where I have a Bachelor of Arts (Games Graphics Design [now renamed Bachelor of Design(Games)]) majoring in programming it can get them extremely muddled. Degrees in game development are still in their infancy and often so diverse in content that recruiters are unsure what it actually means. Initially spent allot of time explaining the difference between my degree and a multimedia degree, pointing out my languages and my tutoring experience. In the end the only way I found out to get around this was to reskin my resume to appear less ‘artistic’, include a breakdown of my courses and their languages under my degree and include a very clear section on my skills and which detailed both my technical proficiencies (languages and IDEs) and interpersonal skills. In hindsight this seems like an obvious thing to do and I am glad I did as it seemed to really help my applications (not to mention impress the recruiters).
Applying for jobs is a bit of a numbers game, you have to apply for them to get them, but there are thousands of reasons that you might not get the job some of which may have to do with your resume, others may have to do with the roles you are applying for, the individual company's requirements for the specific role or your resume may have just reached the HR person’s desk on a bad day. It is important not to rely on getting that one job for all or any of the reasons listed above your resume may be rejected or there may be someone more experienced and more suited to the role that has applied, it is important to never rely on just that one application particularly as a new graduate. One of the best pieces of advice I was given when I was applying was “treat applying for jobs as a full-time job”, if you really want a job you need to spend the time and make your applications the best they can be.
The number of resumes that come into companies that aren’t relevant to the company, are unrelated to the advertised roles, are full of typos or are just plain ugly is remarkable, here are a few key tricks to make sure you stand out from the hordes:
Use a clean professional layout
If you are a programmer with no design or artistic skill there are a stack of prefab templates provided in Word, use them. If you are a designer, have a think about what your resume says about you use your hard won design skills to present the right image. No matter what layout you choose make sure you are consistent throughout the whole document, inconsistencies in font size and paragraph styling just looks like you couldn’t be bothered. It is also a good idea to have your name and the page number on each page, e.g. page 2 of 3, just in case a page goes missing.
No matter what role you are applying for it is a good idea to get your resume and cover letter looked over by someone else (if not multiple people), a typo in your cover letter/e-mail could result in the person recruiting for the role disregarding your application straight away, make sure that doesn’t happen.
Put your best stuff up the front
HR people and recruiters see hundreds of resumes a day, their first look will take in the first paragraph and the first couple of things in your resume, if that doesn’t catch their eye then you’ve lost out. Make sure you catch their eye by putting your best stuff upfront. In the end your resume is really a piece of marketing, you need to prove to them that you are worth the time and effort involved in reading your full application and then possibly organising interviews, skill assessments etc.
I hope that these observations or hints have been useful to you, the post-graduation job hunt sucks but it is something that everyone has to do. Good luck with your hunt I hope you find the job you are looking for.