technical interviewing: a primer
TRANSCRIPT
shibboleth (n): a word or custom [that] can be used to differentiate members of ingroups from those
of outgroups.
The Four Stages of Tech Interviews
1. Non-technical screen ("are you in the ballpark")
2. Technical screen ("can you swing a bat")
3. Onsite Interview ("do you know the game")
4. Post-onsite interviews ("can you play with this team")
Recruiter phone screen
10-15 min phone call
Gauge your seniority, interests, skills, career direction
See if the team/company is a good fit
HR questions: can you work in the US, do you need a visa, etc, etc
Get a rough idea of salary and compensation
Caveats:
1. Recruiters are not your friend.
2. Be wary of independent recruiters.
3. Never disclose salary. Ever.
Tech phone screen
45-90 min phone call (1 hr is typical) with an engineer
Online collaborative coding (Collabedit/Coderpad)
Goal: weed out weak candidates
Onsite interview
All day (4-6 hours) in person
Typical: 3-4 modules of tech whiteboarding with one soft skills interview
But plenty of variation!
The Four Stages of Preparation
1. Pick a language, any language
2. Know your computer science fundamentals
3. Practice the mechanics (whiteboarding, lol)
4. Practice typical problems
The Four Five Stages of Preparation
1. Pick a language, any language
2. Know your computer science fundamentals
3. Practice the mechanics (whiteboarding, lol)
4. Practice typical problems
5. Get punched in the face
What to Know
You will be judged on your fluency. Know the syntax & idioms
Know the standard library
Know common tasks: file i/o, regex, strings, math
Be able to talk about the guts: sorting algos, time complexity, concurrency, etc
What to Study
Coursera Algorithms Part I & II: the 1st course and 1/3 of the second
Programming Interviews Exposed: More of same, plus concurrency
O'Reilly Cookbook for your language
Lynn Root's post on what to study
What to Study (Optional)
Real-world architectures
General approaches to scalability
Databases, SQL
Gotchas and edge cases (lookin at you, CSS/JS)
Practice the mechanics
You will be coding on a whiteboard. It sucks. Practice it in advance.
You will be coding on a plain text editor. It sucks. Practice it in advance.
Do practice problems on the whiteboard first, then check your answer on the computer
Practice problems
Elements of Programming Interviews
Cracking the Coding Interview
CareerCup, Glassdoor, Quora, Stack Overflow, Google
Code competition sites: TopCoder, HackerRank
Interview prep meetup groups
- Obligatory "Art of War" Quote
"If you know your enemies and know yourself, you will not be imperiled in a hundred battles... if you do not know
your enemies nor yourself, you will be imperiled in every single battle."
Know your enemy
Read their tech blog
Learn about their products (and their competition)
Do every interview problem on Glassdoor, Careercup and Quora that you can find.
No seriously, do all of them.
Ask the recruiter what to expect from the interview.
Know yourself
Interview first with a company you don't care about.
Know your stress triggers and how to manage them.
Managing stress and anxiety is a non trivial part of tech interviewing!
Be kind to yourself. Failing at an interview is not failure as a person. Learn and move on.
Have a canned intro about yourself.
Talk about a project you're working on.
Show excitement & interest.
Listen to the problem. Yes, this needs to be said.
Repeat it back. "Is that right?"
Think about what wasn't said. Ask questions.
"Here's how I'm thinking of approaching it. Is that ok?"
Do the entire interview as a stream of consciousness. They're judging you on your ability to think. Show it.
If you're confusing yourself, you're confusing the interviewer. Talk it out.
Periodically check in with the interviewer. "Do you want to correct anything here?"
Ask if you get lost or confused. They will likely give you hints.
Write test cases.
Be able to test your code on a whiteboard.
Check both working cases and edge cases.
Ask "Have I missed anything?"
Know what time complexity (Big O) your solution is.
Ask out loud: "Can I do better?"
Your interviewer may jump in with suggestions.
The answer to "do you have questions for me" is always yes.
You can ask just about anything. It's okay to ask tough questions.
Ask different people the same question. See if you get the same answer.
Julia Evans: Questions I'm Asking in Interviews
Additional Resources
Julia Grace's An Unconventional Guide for Getting a Software Engineering Job
Attributions
Dennis Burger https://www.flickr.com/photos/dennisburger/5499489837