Getting the Interview Phone Screen Right

Sorry Jeff, I have to side with the dissent on this one. Unless your disclaimer is really, REALLY broad, I think your questions are too “textbooky,” way to bogged down in the nitty gritty.

If I can write code to handle whatever complex problem you throw at me, who cares if I can talk intelligently about a binary tree? I honestly can’t, but I have college interns working for me who I’m sure could answer that in a heartbeat. Yet still I somehow manage to teach them a thing or two on a regular basis, usually on real-world stuff that these questions don’t approach.

When I interview, I prefer work examples to pop quizzes. They transfer well over e-mail, I can review at my leisure, and they always reveal the coder’s core ability. The only ones who get past the test are the ones who pass of other peoples work, in whole or part.

how often have you head this:

i know everything about [language here] even the arcane references to [arcane reference here] on [location in manual or on net or blog or where ever here] since i work on [reference to some project here] with [reference to some person here]

blah bla bla

sounds like the chicks I pick up every weekend at the bars in Los Angeles.

“I worked on [film name here] and met [film actor/ess here] and just loved the work of [director here] and oh what kind of car do you drive?”

does your company want someone who can solve problems
or someone who knows that tools inside out but can think their way out of a wet paper bag?

I just tell them to let me send them a project I wrote
with documentation to install, test and run
9 times out of 10 - these interviewers don’t return my calls

9 times out of 10 - i don’t want to work with that company if the interviewer is such an arrogant pompous ass thinking he is the only expert on the subjects.

9 times out of 10 - they are usually reading a script from some dumb ass lazy programmer who wrote the questions and

9 times out of 10 - you will be slogging on some code or maintaining some crap code for a shitty product that you will regret accepting the assignment for.

lead pipes!

Ohh, I get it.

DEC(25) = OCT(31)

In re: The programmer joke.
“why do programmers think Oct 31 and Dec 25 are the same day?”

Okay, now I feel really stupid. It took me a few minutes to catch on after overthinking it and trying to convert 1031 and 1225 into binary. Very reminiscent of several debugging efforts where I just needed to stop analyzing and re-read the dang error message right in front of my nose.

For the benefit of those of you who are thinking as slowly as I am today here’s a hint “Oct” and “Dec” both have a meaning besides “October” and “December”

eyeD10T’s

Hey, Bob at 3:56 PM, lighten up. Unemployment is LOW, so people aren’t having a hard time finding work. Silly.

I have to partially roll my eyes at this post and also shudder to think I have forgotten many of the basics outlined in the tests. So for those of us who gave up Unix when we graduated college, we’re not worth hiring? Really?

Should I be concerned that I never wrote code to shift bits? What if I cheat all the time and use regexlib.com instead of knowing reg ex’s? Does that make me unclean?

Companies who use this screening tactic should let potential hires know that he/she should brush up on the CS 101 stuff.

I agree with chachaching, I would find an interview like that hostile and somewhat humiliating. Only that instead of a lead pipe on the head I would half-ass my answers the get it over as quickly as I could. If I’m lying about my capabilities in my CV you should notice on the face to face, the applicant is the one that is making the greatest effort to attend the interview anyway.
Besides the most important factor for hiring is that both parties agree on the money, if you hire chumps that’s why the trial period is for.

I can’t see what the fuss about this is. I’m just a high school senior and I could answer just about all these questions. Not some of the OOP definitions, and I’d have a bit of trouble with the scripting in a short time span, but easily done within an hour. I can do the regular expressions, but making it automatically go through the directory/directories would take a bit of Googleing, mainly because I don’t write scripts or use Unix that often

MikeS has raised a good point. These questions don’t show how to think critically, and obviously a high school senior can do the tasks prescribed.

Any candidate I interview, I ask them a basic networking question (what is the difference between UDP and TCP (TCP is reliable, connection stream oriented, and UDP is a best effort datagram protocol)? Give me an example that uses UDP (voice over IP).

This question has no merit, just want to listen to how people talk.

Then, because I am an actual developer, working on actual problems, I’ll ask a problem based on what I’m trying to solve. To me solving real world problems is far more important to being an engineer, than say reversing a string, or memorizing quick sort.

And to reverse a string you call: string.reverse()

doy.

One of the hidden lessons in this entry has to be “know your limits”. If an employer posed the questions here, I would certainly know it would be a bad fit.

I may have 10 years experience, but I’m a one-trick pony. (ASP.NET)

Although I would fail Steve’s test inside of 5 minutes. Every single one of my interns, who are CS majors, would also die an embarrasing phone death.

I have a BA in a non-technical field. My thirst for programming books alone has served me well for the past ten years. It keeps me marketable, and bails me out of all kinds of interesting business problems, usually with six-figure price tags.

But I won’t get hired at Amazon because I can’t do binary in my head.

If I presented the above test to my boss, and demanded that all new hires pass it, I’d be laughed out of the office. 80/20 rule. (We’d also have no new hires!)

Occasionally I think I’m in Jeff’s 20% elitist programmer group, but posts like this are quite humbling. Mercifully my salary does not depend upon this level of knowledge.

you dont have a string.reverse in java or C#. Which language are you talking about?

I think Steve’s got the right idea, but the questions would definitely need to be tailored to the particulars of the job. In my line of work, regular expressions have virtually no use and most engineers would do just fine knowing C++ and only C++. I’m sure there are developers (like “Me” above) who do just fine not knowing C/C++ like the back of their hand. I’d be a little more hesitant to hire anyone unfamiliar with data structures–even though 99.9% of engineers won’t need to write them, it’s critical to understand their implementation so you can pick the right tool for the task (e.g., when is a vector/dynamic array a better choice than a linked list?).

I’m not ashamed to admit that I’d fail the regexes question, and hard. I’ve never worked with databases or web applications and have only a cursory knowledge of regexes and SQL. It doesn’t make me stupid; only inexperienced in that field. If for some reason I needed to learn those things for a new task or a new job, I know I could pick it up. And more importantly, I know that I don’t know enough about these things to go sending my resume to Amazon.

A lot of people are commenting “I could learn blahblah in a week if I needed to” or “I could just google blahblah”.

This is simply not true for a lot of technical skills. You may be a superb Java developer with 20 years experience but the fact is you are not going to pick up ASP .NET skills in a week. There are just too many complexities specific to ASP .NET. If you’re really smart you may be able to get your head round it all in 6 months. It is then a matter for the business to decide whether 6 months is too long to wait.

On the other hand, being a master of one skill to the exclusion of others, whilst not always ideal can work out for some people and can be suitable for some roles. I’ve got a friend who makes a very tidy sum just doing CSS. No programming skills or qualifications at all but he can do CSS like a mofo and earns more money than most people twice his age. The fact is, even the best programmers would need 3 or 4 months of solid CSS work to come close to his level of ability.

This is pretty subjective. I’ve encountered many smart and productive people in IT, who get things done, who would have a hard time with these questions.

One of the hardest tests I took was via email – had to write code, compile, send them my source. Questions were such that research could pay off, but my turn-around time and resourcefulness were key.

A BIG problem, in my mind, is THE WAY IN WHICH interviews are conducted (like having 5 special questions), and the PEOPLE who conduct the interviews (i.e., not really qualified to do an interview).

I would value people who can analyze and understand a business process, and then model that in code, over anyone who can Regex.

First post … the rant:
Are you sure you’d go over all of this on the phone? Please. How long would that take?

RE 1-trick ponies - Is working in C# ASP.NET since early days “A 1 trick pony”? As much as I’d like to dabble, I have a life. Sure I use javascript, know css, xhtml, ajax, data structures, use nAnt, nUnit, Cruise, sql, blah blah blah, etc. Oh wait, you couldn’t answer the question about xyz, well I must be the idiot.

Worse typically is weeding done by HR/recruiters who only read acronyms, thus the smart person puts every possible acronym that’s loosely associated with their knowledge so they don’t prematurely get nixed. If they don’t pretend they’re gods gift to programming they get passed over. If you’re humble and completely honest you lose out to the blagger who has skills but in no way would let you know they’re not perfect.

What does scripting have to do with searching 50,000 web pages. I can that write a throw-away program in C# or python, what exactly am I doing wrong? You do mean recursive instead right? Unless you’re a unix shop, your scripting question is crap. (grep sure, but it’s just regex in a command line utility. maybe i’ve been programming windows too long)

Regex: I’m pretty good at it, but it sure doesn’t come off the top of my head. I sit there with a builder utility and test hypothesis and write unit tests. So sue me, it works and I leverage the tool.

Miscellaneous rants:
Why do interviewers ask questions that have nothing to do with what they program in daily. Ask relevant questions.

Trick questions are useless.

For the love of … when asking OO, DO NOT use the same old tired excuse for a question. Who the hell but a zoologist cares about this class is an animal, this class is a biped, blah blah blah. Inheritance is not the only feature of OO.

any new monkey() can figure that out that without being able to actually program in an OO related way. delete monkey;

Second post: thoughtful response:
The phone interview should be a 2-way litmus test.
a - they’re not a complete idiot
b - they’re what you’re looking for
c - you’re what they’re looking for
d - tell them what the job really entails because job specs are always crap

Try to be smarter about the process.

Work through a probable problem:
Q1: You need to do x (e.g. 50,000 web page example). Tell them to make some assumptions, and if they assume too much, reign them in.
Q2: You discover per item takes 100 seconds, how long will it take, and what do you do?
Q3: You discover that performing the task takes 100% CPU as well, now what?

The answers I would look for are
a - recursion using whatever your language calls files in directories to create a work list

  • use of regex or pattern matching. ask them how regex works
    b - using worker threads. don’t get caught up on syntax (that’s what compilers are for)
  • show them a few examples of code and ask which they feel is more correct.
    c - here I’m thinking about farming out the work to more than 1 computer, and different computers need to cooperate. It can be as simple as a database, maybe it’s more complex

Next, do some programming with them. Grab that crappy computer nobody uses in the conference room and give them some code to work on. Don’t go for the super complex project, but go for something that is relevant to your organisation or what they will do.
Winforms if you do it
ASP.Net if that’s your bag baby
Perl if it’s what 99% of your codebase is in.

  • add a feature to do X
  • fix a small bug
  • refactor code

OO - give them different code from above. The code should be 2 classes that do pretty similar things and there should be pretty obvious duplication. This is refactoring again, but it’s also a chance to let them show you they really know OO. I’m thinking of creating a common base class, pushing functionality up or down the hierarchy, virtual functions, etc.

PS @thinker - loved your post

It’s interesting that when these types of posts show up on the 'net, they get a large number of negative comments. I guess that only proves the point of asking such questions. Interviews are meant to whittle a large pool of candidates with varying skills and intellect down to a small set of people likely to be a good hire. If everyone thought the interview was easy and fair, then it wouldn’t be effective in screening anyone out.

While it’s not easy to come up with the right questions that test the traits of the candidates you are looking for, it’s certainly a good a approach to make an interview challenging enough that you really learn something about the candidate. If all you do is ask them to talk about the projects they’ve already summarized on their resume, then what have you learned?

It’s not coincidental that the firms I’ve worked at that had the best employees have also had the toughest interview process. Better to set a high bar and risk taking a while to find the right person than inviting every person who can stumble around VS in for a round of interviews.

When I read the comments, I get the idea that half the people think that these questions should be THE entire interview.

JHubSharp; Please don’t tell me you hired people after doing just a phone screen and without any formal interview…

A phone screen is meant as a rough filter. You want to turn down a big percentage of the dirt even if that has the risk of also turning down a diamond or two. You just don’t want waste the time of multiple people (HR, IT, interviewee) if a few simple question could tell you that you can’t use him.

“2 days”… “short timeline”… That would be a red flag for me as interviewee, I would consider not working at your company. My reaction would be to ask why you would allow me 2 days for this task? If you allow me that amount of time, I guess you allow your current employees (possibly my future colleagues) that amount of time, which means I will be placed too close to a group of lazy morons. I would not function in that kind of environment. I would try to find out about that first from you, before answering.

Something like this I guess:

grep -l -r -P “(([0-9]{3})\s|[^0-9][0-9]{3}-)[0-9]{3}-[0-9]{4}\b” .

I always find the people that post defensively on these articles kind of funny. Or the people who assume that these questions aren’t elementary, and that professional experience is needed before you learn items like the ones mentioned.

I’m a computer science student, and every question above with the exception of some of the insertion complexity questions were almost easy. If you are a programmer and expect to learn this stuff ‘on the job,’ your education is lacking in some area. (And to anyone responding, I haven’t studied most of this stuff for a couple years, it isn’t fresh in my mind either.)

Jeff - I’ve seen you post clarifications a couple times in response to your own blog postings when people get upset at them. I understand why you do, but if your point was that the questions above are basic enough to screen potentially bad employees, I really don’t think it is necessary. The people that disagree with you because of the question difficulty are exactly the same people I would screen if I were conducting the interviews.

Great blog, I enjoy your posts :slight_smile: