Your First Programming Interview - Preparation
So you're well on your way to finding your dream programming job. Hopefully you had a chance to read Part 1 in this series providing some tips and advice on lining up several interviews, with that information and of course your effort and hard work, you have multiple interviews in the pipeline. So now your are thinking what can I expect? Well in Part 2 I am going to cover the following:
I am going to structure each section in a similar way. I will run you through some of my personal experiences at each stage. I will include both good and bad experiences as I feel this is very important, not only to give you an idea what to expect but also to highlight that you do not have to be perfect throughout the process. Then I will cover some of my tips and advice that I think can help you in the interview process, a process that quite honestly can cover a wide range of questions and topics. One thing I would suggest here is, if you are liaising with a recruiter is ask them what each stage will involve. Often they have organised many interviews with companies they deal with on a regular basis and could give you some information to better prepare you.
The Telephone Interview
In my experience the majority of interviews will involve a telephone conversation to start the process. This is a very effective way for a company to filter out any weak candidates without investing a huge amount of time and resources. If you come across well and impress the potential employer you will probably be invited to a face to face interview. So let me run you through some of my personal experiences.
Most of the telephone interviews I have had start with the potential employer giving me a run through of their company and the role in question. I normally speak with the head of development and a senior member of the team (or similar job titles). I have always been made to feel at ease and relaxed not matter who I have spoken to, this really makes a great impression on me about my potential employer. Always remember, they are interviewing you but you are interviewing them. I will probably mention this a few times during these series of posts as I feel it is an important point to consider. Once the role/company had been explained I was normally asked what I had studied during my degree and maybe to run through my final year project. So far nothing to be concerned about at all. At this stage I would have a few technical questions fired at me, a few I can remember were:
- Explain the SOLID design principles?
- What is MVC?
Now let's be honest, it is highly unlikely you will be asked these questions and this brings me onto a key point that I try to follow. Build a solid foundation of knowledge and try not to focus on very specific technologies that will not be required 99% of the time. Let me give you an example of what I mean. I work on the Microsoft technology stack and so I focus on the .NET framework and the C# programming language. Understand the fundamentals, the classes and methods available to complete a given task. The main point here is know the core area of your work, in as much detail as possible. I firmly believe that if someone has this foundation of knowledge and can code they will easily be able to pick up a new framework or language, nobody knows everything but everybody can learn new skills. This approach will put you in the best position to answer any questions and if you don't know the answer be honest and say so. I have read on several occasions that interviewers really do not like people who try to fake it when they do not know the answer.
I can quite clearly remember the first question in the above list being asked to me and I had absolutely no idea what the answer was! So, what did I do? Well I told them I did not know the answer. From this the interviewer gave me a few hints and I eventually got there. I believe this shows several good traits, I was honest in stating I did not know the answer but will persevere to reach a conclusion. It took me a few minutes but I got there in the end, so always be honest.
The final stage of the conversation tends to be a chance to ask any questions about the role that may have not been covered. Some of the following questions would be an example of what I mean:
- What training opportunities does the company offer?
- Could you explain to me the projects I will be working on?
- Will I have the opportunities to work in other aspects of software development?
- Does the development team have a say in the technology areas used?
Now these questions may have been covered earlier in the conversation but I hope they give you an idea about what I ask and the kind of information I would like to know. I believe it is very important to try and engage and show as much interest in the role/company as possible.
That is it, well of stage one at least. The above points and structure were a common experience for me in my telephone interviews. Try not to get too anxious about the telephone conversation, they tend to be very relaxed and only last about 30-60 minutes (which goes by very quickly). You will find you get more confident and relaxed the more interview experience you have. I usually get feedback the same day about how the interview went and if the potential employer would like to see me again, the next stage would a face to face interview. Let talk about that next.
The Face to Face Interview
The dreaded face to face, I see so many posts online from people seriously worrying about this process and it is understandable why. Having to code on the spot with your potential employer looking over your shoulder. What will they ask me to do? Will I have to write the code on a whiteboard with no assistance from the IDE? The list could go on. Instead I will run through some of my personal experiences and highlight that in actual fact I had a much more pleasant time!
Tools to prepare
Something that I have used as an excellent preparation tool is Cracking the Coding Interview by Gayle Laakmann McDowell. The author has worked for some of the top tech companies including Microsoft, Apple and Google and has an insight into their interview practices. The book explains these in great detail and also contains 189 interviews questions complete with multiple answers with code examples. These questions have been asked in real interviews and give a great representation of what the top tech firms are looking for. I believe these questions and answers are transferable across any programming language and will help you build the core knowledge I mention in this post.
Another book, that I and many other programmers rate extremely highly is Programming Pearls. This book is aimed at teaching how to look at a particular problem, break in down and implement an effective solution. It really gets back to the basics of computer science and will help you with that core knowledge I keep going on about! Just take a look at the reviews if you don't believe me.
The Digital Agency Interview
So this interview was actually the only one for me not to involve a telephone interview stage. This led me to think the face to face will be very intense, lasting a long time. The recruiter could not give me anymore detail and so I went into the interview blind. What I was expecting and what took place were very different. The interview was with the founder and CEO of the company, which I thought was very impressive. He was a very friendly and cool guy who really just wanted to have a conversation rather than ask me technical questions. It was very relaxed and put me at ease. After the general chat he basically wanted me to create a web page from a design they had created using a set of tools the company is familiar with. He wanted me to complete this at home in my own time and send my work back the following day. That was it, nothing to be concerned about and actually an interesting way to test somebody's skills. The job was mine if I could complete the task! So I finished the task, which was relatively straight forward and made the decision that a design agency was not for me. I had obtained some great experience from this and also gained a better understanding of what type of role I was looking for. I contacted the CEO and explained this to him and that was that. Onto the next one!
The Software House Interview
This interview involved a very brief telephone conversation that had no technical parts to it at all. It was very relaxed and more about understanding the company, which was very small and somewhere I had not really considered working. I always had the idea I would work for a large company for no reason I can think of. So lets get to the actual face to face interview. I had the recruiter give me some information before hand on this one. The first part involved a chat with the project manager and he asked me to complete some very simple tests based around grammar and arithmetic. I had to correct all of the mistakes in a single paragraph and work out some basic mathematical problems. Nothing too taxing for someone applying for a technical job role. After this stage I was introduce to the programming manager and he gave me a Web Forms task to complete (The role was primarily based around Web Forms). There were a few mistakes in the application to resolve and a couple of tasks to complete. Adding a few controls onto the page with some additional logic but again nothing that anyone with experience in that technology should find too difficult. The whole process lasted about 4 hours, which does sound like a long time but it really did fly by. I was offered this position and decided this was the role for me. Working for a small company would give me opportunities to work with many different aspects of software development which was very appealing to me. I learned so much from my time with the company which I will go into greater detail in Part 3 of the series.
The 3rd Interview
This interview was with a very large food company that was looking for software developers in their IT department. Now the role was not really for graduates but I was invited to be interviewed regardless. I was a little apprehensive at first but thought what do I have to lose? So had the telephone interview which was very standard with a few technical questions, I felt I did well on these even though the role was for a more experienced person. I was invited to a face to face interview. The interview was with the head of programming and a senior developer. The tasks were all based around C# and included some string manipulation without using the built in methods and creating some collections again with no use of the built in types. These questions seemed to be taken from programming interview 101. I felt I had completed the tasks to a good standard and the feedback was positive, however, I was not offered the role. The company felt I would have required too much assistance and they could not offer this too me at that moment in time. I had no issue with this at all and gained some great experience from this process.
The above examples I think give a good spread of what you may encounter and I think highlight that the process is not as intense and difficult as many people believe. Of course this is just my experience here in the UK but to reiterate try not to get too concerned or anxious and the more interview experience you have the easier it all becomes. One thing I would suggest is to keep coding in your own time, complete exercises on project Euler and my personal favourite is to use Pluralsight. This is an excellent source for tutorials from industry experts with high quality training material. You need to pay a subscription for Pluralsight but I have gained knowledge that has paid for this ten times over. I am going to finish with some details on some other stages you may have to go through but are not as common in my experience.
Other Stages of the Process
You may have some other stages of the process to deal with. I have found sometimes a follow up telephone call with a more senior person in the organisation is requested. This could be for a number of reasons but again I have found these very relaxing and not very technical. These conversations could be a standard process for the organisation or just to confirm you are right for the role. I have also been asked to complete a series of tests online. These are multiple choice tests that can cover a wide range of topics. I found some of these can be difficult and really make you think but I guess that is the whole point, to see what level you are at. Just follow the instructions and do your best.
Let's wrap up
- Try to build a solid foundation of knowledge which will put you in the best position to answer the technical questions in the interview.
- The telephone interviews are generally very relaxed and are more of general conversation that anything else. They may contain some technical questions but nothing to be concerned about.
- If you do not know the answer to a question be honest and say so!
- The face to face may not be as bad as you are expecting. Know your core technology as best as you can and you will be able to tackle the task given to you.
- Always be coding and learning in your own time. Sites such as Pluralsight are a fantastic resource for high quality material. I use Pluralsight on a daily basis to improve my skills.
So that is it for the second post in this series. This information should reassure and help you prepare for your face to face interviews and land your dream job. In the last post of the series I will cover what you can expect when you start your very first programming job.
See you next time, Ben.