Congratulations, you’ve been invited to an interview. It might be by telephone, video link, in person or as part of an assessment centre where you’ll be asked to complete several other tasks and tests. Being invited to an interview means that your written application (CV, covering letters, application forms or digital portfolios) has hit the target and is bug free, see figure 10.1. All that reading and writing has paid off. BULLSEYE! 🎯
Having passed the first stage of reading and writing, you move onto listening and speaking stage of interviewing. One of your goals is to convince the interviewers that you can articulate yourself clearly, and communicate well by listening carefully to their questions and answering with spoken natural language. These are fundamental communication skills discussed in section 4.4 on communication I/O.
If you’ve got an interview, you can feel good about having a bug-free CV shown in figure 10.1. Now you have a new set of problems to tackle. How can you prepare for the interview? What kinds of interviews exist and what questions might you be asked? If they offer you a job, how will you negotiate the terms, conditions and salary? Do you really want the job and are they the kind of people you actually want to work with everyday? If successful, you will be giving this employer:
- most of the hours of your day
- most of the days of your week
- most of the weeks of your year
This job will take a significant chunk of the next few months, year or even up to two years (and more) for a graduate scheme (Black 2017). It’s the start of a much longer journey of up to 80,000 hours that you’ll spend in employment during your life.
So you want to ensure employers are a good match and not going to waste your time. You’ll be interviewing them, as well as them interviewing you, so it will pay to have some questions prepared alongside your answers to questions you can anticipate.
By the end of this chapter you will be able to:
- Identify kinds of interviews you might be invited to
- Anticipate common interview questions, both technical and non-technical
- Prepare questions for your interviewer by researching the employer
- Formulate strategies for negotiating job offers
- Calm your interview nerves
Broadly speaking there are two basic kinds of interviews:
- non-technical interview, sometimes called competency based interview or human resources (HR) style interview, see 10.2.2
- technical style or coding interview, see section 10.2.3
These can be conducted in various modes:
Interviews can be conducted in various modes:
- telephone (no visual contact)
- pre-recorded pieces to camera, you talking to your webcam
- teleconference (zoom / teams etc) with cameras and microphones turned on
- real-time face to face
Competency interviews test some of your softer skills, find out who you are (see chapter 2), how you work in a team and if you can communicate well. A good interview strategy for any interview is to talk about what you are doing (and what you have done) as shown in figure 10.3. It might even help to have a checklist in your head of things you’d like to talk about e.g. one work experience (see chapter 5), one personal project and two uni projects, see section 7.6.4. If you can, make sure you’ve mentioned everything on your checklist by the end of the interview.
Here are some common competency interview questions. Imagine you are going on a stage, prepare lines that answer these questions, rehearse them out loud in front of a mirror (or a critical friend).
- What roles do you play in a team, with examples?
- Tell me about a time when you showed integrity and professionalism
- Can you give an example of a situation where you solved a problem in a creative way?
- Tell me about a big decision you’ve made recently. How did you go about it?
- Give an example of a time you resolved conflict
- How do you maintain healthy working relationships with your team?
- Describe a project where you had to use different leadership styles to reach your goal
- Give me an example of a challenge you faced and tell me how you overcame it
- How do you influence people in a situation with conflicting agendas?
- Tell me about a time that you made a decision and then changed your mind.
- Tell me about a time when you achieved success even when the odds were stacked against you.
- Tell me about a time when you have provided an excellent service
- Give me an example of a time when you have had multiple deadlines to meet? How did prioritise your workload?
- What would you say is your main development area?
For more examples of non-technical questions see:
Since there’s already tonnes of information on competency based interviews, the rest of this chapter will focus on technical interviews, also known as coding interviews.
Many employers use technical or coding interviews to assess your harder skills. Not every employer does, but they are widely used by employers. Preparing for coding interviews is a good way to become a better engineer, so even if you don’t have to face a series of really tough coding interviews, it is worth knowing about them.
⚠️ Coding Caution ⚠️
The competitive coding and technical interviews described in this chapter test a narrow set of algorithmic skills. While it’s important to prepare for technical interviews, they have well documented limitations. (Murashenkov 2019) Skills required for software engineering go beyond the purely technical ones. For example, your (soft) communication skills outlined in chapter 4, and many other broader skills, are just as important as your (hard) technical abilities.
There are a lots of resources to help you prepare for and practice coding interview questions, the best place to start is Cracking the Coding Interview by Gayle Laakmaan McDowell. (McDowell 2015) As well as reading Gayle’s book, there are lots of online resources to help you prepare for coding interviews. Before we look at those, University of Manchester Computer Science graduate Petia Davidova explains in figure 10.4 what she learned from failing several coding interviews at big technology companies. 😭
Coding interviews can be tough, but preparing for them, and doing them will make you a better engineer. So if you spectacularly wipeout in your coding interview, reflect and think how can you improve next time? Perhaps you need to
- Read up on some more data structures
- Familiarise yourself with more algorithms
- Practice thinking out loud (verbally) by doing a mock technical interview?
All of these things will help both your general professional development and your chances of success in future technical interviews. Thankfully there are plenty of resources out there for helping you get better at coding interviews so let’s have a look at some.
Project Euler provides a wide range of challenges in computer science and mathematics. The challenges typically involve solving a mathematical formula or equations, see projecteuler.net and figure 10.5
TopCoder is a platform for competitive programming online. You can complete on your own directly online using their code editor. Single round matches are offered a few times per month at a specific time where you compete against others to solve challenges against the clock, see topcoder.com
Codewars allows you to challenge yourself on kata (型), created by the community to strengthen different skills. Master your current language of choice, or expand your understanding of a new one. Find out more at codewars.com and see figure 10.6
LeetCode is a platform to help you enhance your skills, expand your knowledge and prepare for technical interview see leetcode.com.
HackerRank allows developers to practice their coding skills, prepare for interviews and get hired. HackerRank allows users to submit applications and apply to jobs by solving company-sponsored coding challenges. Some employers use hackerrank as part of the interviewing process, so these are not just academic exercises.
Pramp offers free mock technical interviewing platform for engineers. Pramp, Practice makes perfect, was founded in 2015 by Rafi Zikavashvili and David Glauber. As engineers, they were frustrated by the lack of resources to help them prepare for coding interviews. Find out more at pramp.com
More than 50,000 students worldwide from more than 3,000 universities in 111 countries participate in over 400 on-site competitions as part of the International Collegiate Programming Contest (ICPC) see icpc.global and figure 10.8.
ICPC is organised by the Association for Computing Machinery (ACM), a global community which advances computing as a science and a profession.
There are subregional contests for ICPC, so in the UK there is the United Kingdom and Ireland Programming Competition (UKIEPC) which is part of the Northwestern Europe European Regional Contest (NWERC).
UKIEPC has been held annually since 2013 to help universities pick teams to travel to NWERC. Ask your University if they are involved, see ukiepc.info. If they aren’t involved yet, you could encourage them to join. It’s not just about winning, it’s also about taking part.
Let’s pause here. Insert a breakpoint in your
code and slowly step through it so we can examine the current values of your variables and parameters.
* PAUSE ⏸️
Let’s imagine you’re applying to work at an employer called
widget.com. During you’re application you need to find out:
- What the main products and services that the organisation provides?
- Who are their clients or customers?
- Who are their biggest competitors?
- What are their values, principles and ethical policies? See section 9.6
- What sector do they principally operate in?
- Who are the market leaders in that sector?
- How is the sector changing, for example how is technology having an impact on their business?
* RESUME ▶️
Too long, didn’t read (TL;DR)? Here’s a summary:
We’ve looked at a range of platforms and competitions that can help you prepare for coding interviews. These won’t just make you better at coding interviews, they’ll make you a better engineer too, whatever stage you’re at.
This chapter is under construction because I’m using agile book development methods, see figure 10.9.