If the title sounds familiar, this is for you! I wrote this blog post as a tribute to the great blog post which helped me very much a few months ago. After dozens of interviews and hours on the phone, I decided to share my knowledge and create this, not so short, but very enriching post.
So, have you ever imagined a situation where you receive job offers from Google, Facebook and Microsoft? And... you have to reject most of them because you just cannot be in several places at once? For sure you did. I wanted to know how this feels, so I did some research. Do you want to know more? Read on.
The core business of Codility is strictly about recruiting: we help billion-dollar companies as well as startups to hire coders. But we are programmers ourselves and we have been on the other side of the table too. I was in internship interviews with all the companies mentioned above. In preparation for the interviews I talked to my older university colleagues who were internship veterans, who has been to all possible internship already and even rejected some offers just because they have grown bored of spending holidays this way. I realized that I have a great opportunity to sum everything up and to create a wrap-up for internship wannagets.
Stages of recruitment
It is important to understand that every company has a slightly different recruitment process. Sometimes you have to wait one month for the interview, sometimes a day. Sometimes you just have to send your CV, sometimes it is better to use a backdoor. Nevertheless most of them follow a pattern that looks something like that:
- You realize that the firm is recruiting interns and you want to work for them or you are contacted directly by a recruiter (recruiters will hunt for you in some places, e.g. programming contests).
- You send a CV/resume.
- Your CV is noticed. (This is usually the last step for most candidates → your CV isn't impressive enough. But remember, the reason is not because you are not impressive: it's because you are too lazy to learn how to write a good CV.)
- If you obtain the honor ;) of being contacted by a recruiter, you will usually get some kind of pre-screening task, for example, a simple project to do at home, an on-line test (Codility!) or the like.
- Phone interviews. (Both technical and behavioral questions. People generally underestimate the importance of behavioral questions, don't make this mistake!)
- Possible on-site interview.
- Great internship.
Secondly, you have to be good with computers, but you don't have to know everything. This is just an internship, not a senior engineer job. A very common mistake is a lack of self-confidence. Many people say:
“An internship in Microsoft? I don't have a chance. Maybe next year.”
What? Of course you don't have a chance, because you don't try! Stick this motto over your bed: “A quitter never wins and a winner never quits.”. Try, try, try until you win. On the other hand if ∀ε > 0 your_skill < ε, you'd better go back to the lessons.
Train your programming skills
The main content of an interview is technical questions. Good news, they tend to be very typical. Best way to polish your programming is to take part in several programming contents. If you failed to do so, try this:
- Solve problems from past contests (i.e. Google Code Jam) or just participate in TopCoder.
- Codility is heavily used by recruiters during internship season, similarly our certificate challenges take heavy traffic. Take advantage of them to work out before the fight.
- Participate in as many interviews as you can. Just for the experience. It costs nothing (for you at least, but who cares, these companies have craploads of cash anyway).
Another common mistake is that you can't stand the fact, that you won't completely solve the task during interview. It may not be the point. The recruiter wants to see whether you have analytical skills. Sometimes the problem has no solution at all. Show as many ideas as you can, even stupid ones. This shows that you can think.
I have met several geniuses who were rejected in the interviews, and several smart-but-not-ingenious people who made it. Technical skills are necessary, but not sufficient, it shows. Here is a bunch of hacks and tricks that increase your chances (in random order):
- Let's be serious. A typical billion-dollar company has hundreds of thousands of candidates to screen. Sending a CV through their website is not the best possible way to apply. BETTER: Find a recruiter's profile on Linked-in or Facebook, ask friends whether they know any recruiters in this particular firm, and contact them directly. It's simple but doubles your chances.
- Behavioral questions during phone interview. Create a few pages with answers for every question you might expect. Make the table with all the best things you can say about your former projects, the hardest bugs you came across and some information about the type of company you want to work for. Never ever answer “uh...” to a question like “Why do you want to work for us?”. They won't take you no matter how many LISP compilers you have written in kindergarten.
- In most cases, after you pass interviews you arrive at the rotting pool, waiting to be picked up by a host. Why not contact them directly, like in point (1)? Better to wait with folded hands?
- Have I already mentioned that you are talking to humans, not machines? Show some empathy. Ask “How do you do?” at the beginning, say “Have a nice day.” at the end.
- Forty minutes is too short to show your awesomeness just answering the questions. But there are other ways to achieve it. Ask THEM questions. It usually helps to ask something in a way that smuggles some information about you. My favorites: - “Do you use any source code control systems? Like SVN or GIT?” - “Is agile methodology important in your job?” - “In my last project I had to solve a big problem with memory leaks. Do you experience any problems related to memory leaks in the project I am about to join?”
- Resume advice. The average time spent on screening one CV is four seconds. What are the screeners looking for? If you are smart and really can code. That's all. Your CV should be elegant, aesthetic and simple. The KISS principle works perfectly in this field. Do you think that someone wants to read a long CV? Your CV has to fit on one page. No more, no way! It is good to show that you have a passion other than programming. Sailing? Great. Bodybuilding? Great. But no one cares that you love eating honey. Provide only essential information.
- In every “How to get this job.” tutorial you read “Don't lie.” - I agree, the facts are simple to check. But... if 90% of people lie in their CVs, wouldn't you lose your internship to them for just being honest? This sounds purely like prisoner's dilemma. Be honest, but present yourself in the best way possible. “Winner of many programming contests, including team programming.” sounds better than “Winner of small regional team contest for the school cup.”
- Show an interest. Treat every company exceptionally. Demonstrate your knowledge about it's culture and history. Ask questions showing that you have did your homework.
- Last but not least. You are not just answering their questions. You are demoing yourself.
Hope it helps. This text may not amuse veterans, but is written for students by a student.
Rafał Bielenia is a student of Computer Science at Warsaw University and former Codility Intern.