I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

Jan 22, 2008

Getting the Interview Phone Screen Right

The job market for software developers is hot. This is great news for programmers, but it makes the interview process challenging for potential employers. A reader recently wrote me expressing some concern about the interview process:

You mention Vertigo requiring a code sample, then a phone screening, then a hands-on test in the face-to-face. We have a very similar process, but somehow a large percentage of the candidates who make it to the hands-on test are very poor and should have been eliminated at step 1 or 2. The signal to noise ratio is terrible. It costs a great deal to spend so much time doing face-to-face interviews with people who often should not be developers in the first place. I am curious how much light you might be able to shed on the specifics of your requirements on candidates. What part of the process is the most effective in separating the cream, how and why?

It is very expensive to get the phone screen wrong-- a giant waste of time for everyone involved.

rotary phone

The best phone screen article you'll ever find is Steve Yegge's Five Essential Phone-Screen Questions, another gift to us from Steve's stint at Amazon.

Steve starts by noting two critical mistakes that phone screeners should do their best to avoid:

  1. Don't let the candidate drive the interview. The interviewer should do most of the talking, guiding the conversation along until they're satisfied the candidate knows the answers to the questions (or has given up).
  2. Watch out for one-trick ponies. Candidates who only know one particular language or programming environment, and protest complete ignorance of everything else, are a giant red warning flag.

The point of the phone screen is not for the candidate to drone on about what they've done. The interviewer should push them out of their comfort zone a bit and ask them related questions about things they haven't seen or done before. Ideally, you want to know how this person will react when they face something new, such as your codebase.

In an effort to make life simpler for phone screeners, I've put together this list of Five Essential Questions that you need to ask during an SDE screen. They won't guarantee that your candidate will be great, but they will help eliminate a huge number of candidates who are slipping through our process today.

1) Coding. The candidate has to write some simple code, with correct syntax, in C, C++, or Java.

2) OO design. The candidate has to define basic OO concepts, and come up with classes to model a simple problem.

3) Scripting and regexes. The candidate has to describe how to find the phone numbers in 50,000 HTML pages.

4) Data structures. The candidate has to demonstrate basic knowledge of the most common data structures.

5) Bits and bytes. The candidate has to answer simple questions about bits, bytes, and binary numbers.

Please understand: what I'm looking for here is a total vacuum in one of these areas. It's OK if they struggle a little and then figure it out. It's OK if they need some minor hints or prompting. I don't mind if they're rusty or slow. What you're looking for is candidates who are utterly clueless, or horribly confused, about the area in question.

Of course, you'll want to modify this process to reflect the realities at your shop-- so I encourage you to read the entire article. But Steve does provide some examples to get you started:

Coding

Write a function to reverse a string.
Write function to compute Nth fibonacci number.
Print out the grade-school multiplication table up to 12x12.
Write a function that sums up integers from a text file, one int per line.
Write function to print the odd numbers from 1 to 99.
Find the largest int value in an int array.
Format an RGB value (three 1-byte numbers) as a 6-digit hexadecimal string.

Good candidates for the coding problem are verifiably simple, with basic loops or recursion and perhaps a little formatted output or file I/O. All we want to know is whether they really do know how to program or not. Steve's article predates it, but I'd be remiss if I didn't mention Why Can't Programmers.. Program? here. The FizzBuzz problem is quite similar, and it's shocking how often interviewees can't do it. It's a bit hard to comprehend, like a potential truck driver somehow not being able to find the gas pedal or shift gears.

Object-Oriented Programming

Design a deck of cards that can be used for different card game applications.
Model the Animal kingdom as a class system, for use in a Virtual Zoo program.
Create a class design to represent a filesystem.
Design an OO representation to model HTML.

We're not saying anything about the pros and cons of OO design here, nor are we asking for a comprehensive, low-level OO design. These questions are here to determine whether candidates are familiar with the basic principles of OO, and more importantly, whether the candidate can produce a reasonable-sounding OO solution. We're looking for understanding of the basic principles, as described in the Monopoly Interview.

Scripting and Regular Expressions

Last year my team had to remove all the phone numbers from 50,000 Amazon web page templates, since many of the numbers were no longer in service, and we also wanted to route all customer contacts through a single page.

Let's say you're on my team, and we have to identify the pages having probable U.S. phone numbers in them. To simplify the problem slightly, assume we have 50,000 HTML files in a Unix directory tree, under a directory called "/website". We have 2 days to get a list of file paths to the editorial staff. You need to give me a list of the .html files in this directory tree that appear to contain phone numbers in the following two formats: (xxx) xxx-xxxx and xxx-xxx-xxxx.

How would you solve this problem? Keep in mind our team is on a short (2-day) timeline.

This is an interesting one. Steve says 25% to 35% of all software development engineer candidates cannot solve this problem at all-- even with lots of hints and given the entire interview hour. What we're looking for is a general reluctance to reinvent the wheel, and some familiarity with scripting languages and regular expressions. To me, this question indicates whether a developer will spend days doing programming work that he or she could have neatly avoided with, perhaps, a quick web search and some existing code that's already out there.

Data Structures

What are some really common data structures, e.g. in java.util?
When would you use a linked list vs. a vector?
Can you implement a Map with a tree? What about with a list?
How do you print out the nodes of a tree in level-order (i.e. first level, then 2nd level, then 3rd level, etc.)
What's the worst-case insertion performance of a hashtable? Of a binary tree?
What are some options for implementing a priority queue?

A candidate should be able to demonstrate a basic understanding of the most common data structures. More specifically, the big ones like arrays, vectors, linked lists, hashtables, trees, and graphs. They should also know the fundamentals of "big-O" algorithmic complexity: constant, logarithmic, linear, polynomial, exponential, and factorial. If they can't, that's a huge warning flag.

Bits and Bytes

Tell me how to test whether the high-order bit is set in a byte.
Write a function to count all the bits in an int value; e.g. the function with the signature int countBits(int x)
Describe a function that takes an int value, and returns true if the bit pattern of that int value is the same if you reverse it (i.e. it's a palindrome); i.e. boolean isPalindrome(int x)

As Steve says, "Computers don't have ten fingers, they have one. So people need to know this stuff." You shouldn't be treated to an uncomfortable silence after asking a candidate what 2^16 is; it's a special number. They should know it. Similarly, they should know the fundamentals of AND, OR, NOT and XOR-- and how a bitwise AND differs from a logical AND. You might even ask about signed vs. unsigned, and why bit-shifting operations might be important. They should be able to explain why the old programmer's joke, "why do programmers think Oct 31 and Dec 25 are the same day?" is funny.

Performing a thorough, detailed phone screen is a lot of work. But it's worth it. Every candidate eliminated through the phone screen saves at least 8 man-hours of time that would have been wasted by everyone in a hands-on test. Each time an unqualified candidate makes it to the hands-on test, you should be asking yourself-- how could we have eliminated this candidate in the phone screen?

Posted by Jeff Atwood    View blog reactions
« Reinventing the Clipboard
What Can You Build in 600 Lines of Code? »
Comments

Good stuff. I'm interviewing for a developers position that I really want on Friday morning. Guess I'll have to test myself on some of these and shake off the rust...

sam sanders on January 23, 2008 1:37 AM

anyone who asked me any of those questions would get a lead pipe across the head.
first of all...if your a CODE MONKEY your just DATA ENTRY
second...GOOGLE is your friend
third...what the f? are you hiring me to wrote code for the god damn space shuttle or to make some charts graphs for business reports?

If you want a MATH MAJOR then say so.
I don't waste my time with idiot phone screens anymore
AND
I don't bother to even go for the "let me test you skills".

After 20 years of writing software I'll lead pipe you before you start

THIS BLOG IS A JOKE

chachaching on January 23, 2008 1:40 AM

ChaChaChing: After 20 years of writing software, you are a lunatic!

Josh Stodola on January 23, 2008 1:43 AM

See, the screening process works: chachaching would be eliminated from contention without having to see him rave in person.

Andy Stampor on January 23, 2008 1:50 AM

I understand interviewing is stressful. I've been on the receiving end of it plenty of times myself, and I am totally sympathetic. But please bear in mind we're not looking for perfection here, just familiarity. Remember the disclaimer!

--
Please understand: what I'm looking for here is a *total vacuum* in one of these areas. It's OK if they struggle a little and then figure it out. It's OK if they need some minor hints or prompting. I don't mind if they're rusty or slow. What you're looking for is candidates who are utterly clueless, or horribly confused, about the area in question.
--

Getting screened out on the phone may be painful-- nobody likes rejection-- but I assure you it's a far better alternative for everyone than somehow making it through to the hands-on test and failing in person. That is not pretty at all.

Jeff Atwood on January 23, 2008 1:55 AM

It seriously frightens me that there are programmers out there who can not solve that phone number problem in a full hour. That should take more like 2 minutes! If you can't answer that, go live in a cave.

Seriously, now I know where those code examples at the DailyWTF must come from. (Well, that and chachaching, apparently.)

Proposed new regex challenge: write a script to find where those programmers are working and fire them all before they bankrupt their companies or get somebody killed.

Clifton on January 23, 2008 2:09 AM

Let me ask you something, Jeff. The day you started work at your first professional programming job did you know all those things you highlight in this post? Because, I certainly didn't. Sometimes, it's the person's capacity/willingness to learn that's more important than the things they already know.

But what do I know, I'm just hanging on to the edge of the lower tier of the hierarchy of professional programmers. That's why I play the lottery, I guess. Programming all day for nimrods vs. sitting on the beach sipping mojitos --- I'll take the beach. Hey, a fella can dream...

Kenneth on January 23, 2008 2:12 AM

How do you do #1 (have the candidate write code) over the phone? On a whiteboard in person, sure. Maybe even in some kind of IM session. But on the phone!?

The other four seem quite do-able in a conversation format.

Adrian on January 23, 2008 2:17 AM

These are very good questions. Complex enough that you have to think about them, but simple enough that you have no reason to only say "I don't know" for any of them.

From what I've found though, lots of companies seems at least equally as interested in knowledge of products (if not more interested), such as SQL Server, ASP, and .NET, than in fundamental concepts like data structures and big-O algorithmic complexity. That's why they're always full of incompetent code-monkeys.

KG on January 23, 2008 2:17 AM

Jeff,

Sometimes you have to understand the smartest of all people don't need to know everything. Even though some topics seem to be part of the standard set of "101 CS Questions To Ask", you don't need to know everything because it depends on what you're trying to do.

For instance, I was once asked during an interview what is an AVL Tree and how it works. I studied the specifics of AVLs 5 years ago during undergrad, and it's used to keep a tree balanced. Now, what is the exact procedure etc -- I literally don't know because I haven't tackled it in 5 years. But a quick google/wiki search reveals (that took _ONLY_ 5 seconds): http://en.wikipedia.org/wiki/AVL_tree.

Now the interviewer was not happy that I did not know the answer. I then asked him: if you're designing a multi-threaded server that needs to access busy network queues, what type of synchronization methods would you use? He couldn't answer..only to struggle with "some mutex". I was looking for Spin Locks, Reader/Writer Locks, Semaphores/Mutexes, Read-Copy-Update Locks (employed by linux kernel), etc.

Of course, I didn't want to make them feel stupid, but only wanted to prove a point.

Kashif Shaikh on January 23, 2008 2:23 AM

I've been on the receiving end of 5 or 6 serious interviews for the first time over the past 3 months. I have around 3 years experience and a uni degree.

Whilst I can sympathize with the whole idea of testing and screening I don't think it should ever be the be-all-and-all of whether or not you reject someone - especially if you're looking for specialized skills that are not easy to come by (in my city, it seems good programming skills are in high demand).

The first couple of interviews I went to I did very badly in the technical test. The interviewer thought that I wouldn't be up to the standard they were after. The 3 or 4th I did much better. The 5th and 6th I blitzed and got some very nice job offers!

OK, I may have felt the pressure a bit after bombing on the first two, so I have been doing some extra study. Did my technical skills really develop so rapidly over the past 2 months, or did my interview skills develop? Did the first interviewers just miss a good opportunity... or were the later interviewers duped?

The fact is, it's easy to get good at interviews after a couple of times. You hear the same questions every time, so you can go away and cover the holes in your knowledge.

Whilst the interviewer may be thinking "I'm only looking for total vacuums", this is not the attitude I've experienced. You can see what I'm talking about at the end of Steve Yegge's post:
"What language are you most proficient with?"
"I've done mostly Java"
... Why would this mean the person would not be able to answer the data structure and HTML parsing question? The candidate is simply answering the question given to them. Sure, it may not be the best answer, but under the stress of an interview "best answers" are usually not given. I know for a fact that I would answer something along these lines but I would also be perfectly capable of solving both the data structure and HTML parsing question.

In the next question the guy forgets to answer "tree" and Steve thinks he will fail the data structure test. You can be sure though that the candidate will not forget "tree" in his next interview and the next interviewer will be duly impressed. In both cases it will be the interviewer who has really failed the test.

Jorge on January 23, 2008 2:26 AM

I think a big piece that's missing here, and from every step of most developer interviews, is questions on testing and debugging.

How do you know the code works? How do you design a unit test? What kinds of conditions do you assert in the code? How do you debug a crash? What if it's intermittent? What types of mistakes lead to intermittent bugs?

I find debugging questions quickly give me a feel for how much experience they've had actually coding. Even great programmers who write very few bugs have been at it long enough to develop good debugging skills. Noobs can often do fine on a simple coding problem but have no idea how to track down an error. (Nothing against noobs--sometimes you're hiring for a junior position. But sometimes you have to spot an expert.)

Aid on January 23, 2008 2:28 AM

You can look probably 100% of these up on google. That would be my answer to all of these during a phone interview.

How do you think I found CodingHorror in the first place!?

I have been a programmer for years and have perfected the art of only knowing (retaining) that information which is useful at the time. I am now very good at knowing where to "look it up" when I need it.

Anony on January 23, 2008 2:29 AM

Regarding the Phone problem:

"To me, this question indicates whether a developer will spend days doing programming work that he or she could have neatly avoided with, perhaps, a quick web search and some existing code that's already out there. "

Does an interviewer want to know how I would solve the problem, if I am able to solve the problem (in spite of not spitting out an answer within the entire hour, which assumes also, all things being equal, that I am a good "test taker"), or if I am able to effectively use Google, which proves nothing about my ability to program?

You mention out of one side of your mouth how Programmers Can't Program, yet suggest as a suitable answer for this question "I'd Google for an answer"?

Answer that way in my interview and it would be over. I dont want data entry people and effective web searchers. I want programmers who are good at what they do and are eager to learn to be better at what they do. Google teaches nothing except cutting and pasting.

Ordinary Geek on January 23, 2008 2:32 AM

I don't really think knowing a single language is a problem if the candidate can demonstrate a knowledge of the underlying concepts.

I've programmed in C++ for most of my career, but when required I can pick and program other languages with little trouble.

I've coded in Python, Perl, Php, Java and numerous custom scripting languages when required, but couldn't tell you a thing about them now and wouldn't call myself anything other than a C++ programmer.

A competent programmer should be able to be programming constructively in most other mainstream languages within a few days.

forelle on January 23, 2008 2:41 AM

Kenneth: When you are hiring someone with no experience, you know that and the interview will be totally different. Most people are not hiring entry level people with no experience, they are hiring people that claim to have 20 years experience. These questions will filter out those that are not strong candidates for the 20 years experience they claim to have.

ChaChaChing: Another thing a phone screen can do is filter out people with personality problems. Threatening people with a lead pipe for asking questions show that you would fail this test.

Andrew Tillman on January 23, 2008 2:45 AM

People who are getting upset here: you're taking this the wrong way. Once you have to start sitting in on interviews, you'll understand the value of screening out the "No Way, No How" folks. I was never particularly hung up on The Right Answer; it's more a way to see how the candidate thinks, how they work through problems. I will admit I been in interviews where the interviewer seems more interested in showing how smart they are, but that's not the point here.

The regex one was a revelation when we started asking. I wasn't surprised that so many people had never heard of regexes (we were a Microsoft shop and thus most candidates were as well), but I was shocked by how many people insisted the problem either couldn't be solved or spent the entire answer period trying to get me to add constraints to make the problem simple.

Tom Clancy on January 23, 2008 2:59 AM

Sorry, Jeff, but if most companies threw those questions out as part of a standard interview process, the job market for programmers would be insanely hot right now, because I'd be more than willing to bet that at least half the programmers out in the field right now wouldn't be able to pass all five areas. I know for a fact that I'd fail the Scripting/RegEx section, because A) I've had approximately zero experience with regular expressions and B) no experience whatsoever with scripting languages.

Blame it on my associates degree, but we didn't get into building class systems that modeled the whole fekkin' animal kingdom, nor did we spend the time on bitwise vs. logical ANDs. I would love to have spent time on it, but we were already trying to learn the basics, and we only had two years to do it; that's why I'm getting my SE degree now. Point being this - what Steve is looking for is someone who has (probably) several year's experience in every conceivable aspect of the programming world, which is understandable if he's looking for someone to work on the backend of Amazon.

If these are the kinds of questions that college graduates would be expected to know the answers to when they went to apply for their first job, you'd see the candidate pool for programmers/software engineers dry up pretty dang quick, before the applications even got filled out. I know that the first time someone asked me to "describe some options for implementing a priority queue," I'd politely tell them that I had no clue, and hang up the phone.

Then I'd move to the west coast and become a hippie, having my dreams crushed. :P

Jimmy on January 23, 2008 3:01 AM

Aha! I knew Google's phone interview was bad. (They made me drive the call.) No fault of mine if I'm rejected by a bad process. ;)

CynicalTyler on January 23, 2008 3:02 AM

I'm with Kashif Shaikh and others here. A lot of these questions are specific fundamentals that a quick google get you the answer.

What you need are candidates that know how to find out how to know and can grep the results quickly. People that can see what the problem is recognise what the solution may be, *understand* the why, be quick and effective in implementing the solution, and be able to explain why and stand by it (this bit catches the copy'n'pasters).

I've studied all sorts of data structures in college, written code in several languages and platforms over there years, bitwise operations in z80 assembly back in the day, etc.

And, I'd probably fail an interview such as this.

I'm working on a trading system for an investment bank, and I tell you what, the hardest part of being a developer is solving the god damn business problems.

Damian on January 23, 2008 3:06 AM

"I'm working on a trading system for an investment bank, and I tell you what, the hardest part of being a developer is solving the god damn business problems."

Why is it our problem to solve business problems? Isn't that the job of businessmen? We're trained to be computer scientists dammit! ;)

KG on January 23, 2008 3:09 AM

@Jimmy:
"I'd be more than willing to bet that at least half the programmers out in the field right now wouldn't be able to pass all five areas."
Definitely. That's kind of the point, remember? FizzBuzz and all that?

"nor did we spend the time on bitwise vs. logical ANDs. I would love to have spent time on it, but we were already trying to learn the basics" --- Heh. What's more basic than the bitwise operators? Plus and minus? :)

"What Steve is looking for is someone who has (probably) several year's experience in every conceivable aspect of the programming world" --- Not at all. #1, #2, #4, and #5 are all typically covered in a 200-level (non-majors) programming course at U.S. four-year universities. #3 is easier if the interviewee has either basic Unix experience or power-user Windows experience; it's definitely answerable with the single magic word "grep". If the interviewee is so clueless that he can't utter the word "grep" (or "find" or "I'd use a regex" or even "I know there's a Java package that can do stuff like that, but I forget the name") then he doesn't get the job, duh. Remember, we're not looking for a polished answer here; we're just looking for the lack of *complete and utter cluelessness*.

"I know that the first time someone asked me to 'describe some options for implementing a priority queue,' I'd politely tell them that I had no clue, and hang up the phone." --- Exactly! That's Steve's point! The phone interview is *designed* to weed out unqualified applicants. If you can get the applicant to determine on his own that he's unqualified, you've just saved a bunch of time for the both of you.

Anonymous Cowherd on January 23, 2008 3:14 AM

Chachaching's comments just reinforce that if you find a candidate that refuses to prove that he can think, then you don't want that either.

Also, threatening violence during an interview probably won't land you in the "Please hire" check box on my interviews.

It should say in the summary section of your resume:

"I am a pompous asshole who can write business reports. I also can't spell or use grammar to save my life, so please don't ask me to do any of that. I also don't do math, windows, or laundry."

Ben Scheirman on January 23, 2008 3:17 AM

Heh - the phone number question is amusing, becuase the very best coders will probably answer it without having to write any actual code... just a short grep statement (or two) with a few parameters. The next best coders will do the exact same thing, but appear to be working for 2 days.

Vek on January 23, 2008 3:22 AM

Stevey rip-off serach http://steve-yegge.blogspot.com/

Jame on January 23, 2008 3:24 AM

I've just been through a lot of these technical interviews for .NET roles and in my experience I've not had any gruelling tests.

The general format of my (4-5) technical interviews has been:

1) Some question where I have to demonstrate a knowledge of SQL to the degree that I know GROUP BY and HAVING. (SQL)
2) What is polymorphism? (OO)
3) What is the VIEWSTATE used for? (ASP.NET)
4) Give me an idea on how you would connect to a db (ADO.NET)
5) What is the StringBuilder class used for?
6) What is reflection?
7) Demonstrate a design pattern and how you have used it.

I've been disappointed that I've not been asked how I would go about solving any problems. It seems most companies would much rather know you have had experience using the tools.

Mr x on January 23, 2008 3:26 AM

This is definately a reasonable set of questions. I agree that some of the proposed questions are difficult (I don't think I could get them all right) but the interviewer should be looking at the thought process, not the final answer. As Jeff says, if the interviewee is completely off, that should raise a red flag.

However, having said that, following the interviewee's thought process on the phone is a difficult task that requires effort on both sides. I think the way to go is by proposing ideas and giving hints to get the ball rolling.

Nick on January 23, 2008 3:30 AM

Funny this comes up. We just ran into a problem in our office were people had to be let go because of excelling in a phone interview yet having terrible skills on site. (Maybe they were effective interviewers or googlers?)

I think the phone interview is very valid, and most of these points are good, with one caveat: interview them again.

Grab them on Day 1 (or in the face-to-face) and ask them the exact same questions (or a subset). Make sure they're still up to snuff.

Also, to those complaining about the questions, I don't think you'd not get the job if you both tried to answer and were moderately proficient in at least one area. I'd probably be weakest at the scripting bit because I hate scripting languages, but I can offer up an attempt.

It's not so much getting the answer exactly right as it is showing how you think and approach problem solving. I've worked in a few different shops that would rather have someone without a lot of knowledge but with strong problem solving skills. Granted, they're more needed for junior-mid roles than architects, but for those out of college, having the ability to solve a problem is usually more valuable than having the answer to a question memorized. In my experience, anyway.

JHubSharp on January 23, 2008 3:32 AM

Jeff:

I've read your blog for awhile, and usually agree with your blog, but this post has me rolling my eyes. I have been programming for over 10 years with a focus on Microsoft Desktop and Web Based applications. I've done a good deal of contracting, so I’ve had exposure to a number of software teams and I'm usually one of the most productive programmers in the group. I say this because you might consider me a “one trick pony” in that I’ve focused mostly on VB.NET since 2002, with the exception of JavaScript for web projects. Before 2002 I was paid to write in VBScript (classic ASP), VBA (Access and Excel) and classic VB (mostly desktop apps).

With all that said, I wouldn't get pass the phone interview for the following reasons:

1. The last time I wrote in C++ (no experience in C or Java), was in college (mid 90s). I could certainly read and understand most C code, e.g. when I find samples in C# on the web I normally can translate back to VB.NET without an issue. It’s absurd that you would limit your pool to just C, C++ or Java languages.

2. The Data Structure questions create the same trap. I can go into detail about the .NET data types that I've been using for the last 6 years, but I would fail at describing the differences between linked lists vs. a vectors, binary trees, etc. If the nature of the position you’re hiring for requires the programmer to code C++, C or Java, then it would make sense, but to ask a .NET programmer to speak in depth on these structures doesn’t accomplish much.

3. I would be hard pressed to recite the details of Binary Arithmetic. The only time I spent with the subject was in a Computer Science class, I’ve never revisited the subject in the last 10 years of application development.

Your practical questions related to scripting with the RegEx question seems logical. And the higher level questions related to OO design, which would be language- neutral would also be a good test to weed unsuitable candidates.

I’ve been on both sides, having hired programmers as direct reports and having been “code tested” by hiring teams. You have a valid problem -- weeding out incompetent programmers, but your solution of hiring similarly experienced individuals is an invalid solution.

The most effective software team needs a mix of talents. I’ll grant you that out of a group of a dozen programmers on a team, you need a few geeks that enjoy tweaking algorithms with Binary Arithmetic. But I’ve been in design discussions where hours are lost in debates about the efficiency of an array type, but the big picture was lost that the slight performance gain of either type was trivial.

I would add the following business solution questions to your OO and Scripting questions:
• A business requirement in the project you are working on requires a high level of secruity to secure sentive information that includes SSN, Credit Card and Medical Data that is stored on a public website. Outline and describe a solution that uses defense-in-depth and least privalage pratices that would most effectly would protect this information, focus on the software, not hardware issues to solve this issue.
• A business requirement is that an application interacts with, and displays information from a total of five online web servicse. The sources are not under the company control and the application design should accomindate for communication failures. How would you design a system that could meet these requirements?

The importance of these types of questions are two fold:
• You get a developer to reveal pratical experience, if any, in these subject mattters.
• You gain insight in their problem solving ablitiy, even if the applicant doesn’t have a partical experience in these areas

Me on January 23, 2008 3:34 AM

Half of the techniques in the article are useful, but the other half is very much counter productive. As another one with 20 years of experience in software business I agree somewhat with ChaChaChing that this technique will most likely get you a code monkey. All the projects that I mananged and led are successful because I put a great effort in interviewing and getting the right people.

The interview must match the nature of the project. If maths and science is important than the proposed coding and scripting test are useful otherwise they will screen off the best people. A Business nature project needs someone with good macro thinking and good business logic thinking but not someone with micro thinking and arithmatic logics.

Unfortunately we are not living in a perfect world, not many developers are good in both contexts. A good business developer is usually a very bad engineering developer and vice versa. So a generic test that tests on both skills will get you an average developer.

I read too many articles by self-aclaimed recrutment experts that have lost touch with the current generation and market. This is very much one of them.

It is now a rapid development and google generation. Hiring developers that like to write everything from scratch means you will miss your deadline. You need developers that knows how to find and reuse resources.

Also young developers are from so called Generation X. Best developers are tend to rebellous and like to "threatening people with a lead pipe". As much as I hate the new generation, I need to adjust to manage them so I can get the best out of the skill pool. I think this article will get you mostly older developers. But to get the extra cutting edge in business, you do need to take some risk to add some of the young and fast in your team.

W Siew on January 23, 2008 3:36 AM

Applicant: High order bit you say? let me think about that...

*sound of keyboard typing*

Interviewer: are you typing?

Applicant: ehhhh no.... why do you...

*mouse clicks*

Interviewer: Sounds like you're clicking your mouse... Are you googling..?!

*phone hangs up*

--------------

I worked with a guy that interviewed with Microsoft on the phone. He sat in front of his computer (at work mind you) and googled the answers. Too bad for him that "normalizing databases" is a subject too complicated to get a quick google answer.

Brian on January 23, 2008 3:41 AM

just out of curiosity. whats the significance of 2^16?
Something related to excel? :)

gulzar on January 23, 2008 3:41 AM

I've been through quite a few of these types of questions in the last 12 months. I've been interviewing with a lot of companies and have learned to enjoy the process. The thing is I've learned a lot in the process and the questions are usually very stimulating. If I wasn't working a second job at the moment I would be out interviewing just for fun. I found the 2nd job looking for another job. The place wanted me so much that they let me work there nights and weekends. I enjoy the challenge and I like to learn what other companies are doing.

You may argue that I'm wasting a companies time. That isn't true. If the right offer came around with the right type of work I would take it.

About the questions. These are all basic areas and you could easily study up on them for an interview. There are many websites that are geared towards brain teasers and programming problems to study up on. Furthermore, knowing the information explained above can be very helpful tools for a programmer. Especially regular expressions. Whether your a Linux or a MS programmer you can use them. I know in VS you can at least use regexp to find and/or replace.

Data structure knowledge is essential if you are going to write any type of program that has some sort of time speed constraint and it handles larger sets of data.

OO Progamming questions are important to make sure the developer understands the paradigm. This is a good place to weed out people that write spaghetti code. I also believe it is important that the programmer understands the terminology. In any type of team it is important to effectively communicate.

The Bits and Bytes area can come in handy more often then you think. It really doesn't take that much to study up on this area plus it is useful for doing optimization.

Overall, I think the above topics are a strong indicator of a applicants skills. My understanding is in most interviews they aren't expecting you to get everything exactly correct and know everything. They more want to know your skill level and how you approach problems(thought process).

Thomas Lann on January 23, 2008 3:46 AM

gulzar,

2^16 is how many bytes of memory my first computer had, after I upgraded it. A bank officer made the first student loan of his career, equal to a year's graduate stipend for me, to buy this computer. From a little-known company named Apple. Various friends learned to program on it...

To a computer, 2^16 is a nice round number.

Dave Bayer on January 23, 2008 3:54 AM

Question: How do you look stuff up on google?
Answer: Er, hold on, let me type "how do you look stuff up on google" into google so I can find out - I never bother remembering how to do stuff.


Question: How do you solve a problem you haven't seen before?
Answer: I look it up on google beause everything has been solved before.


Question: How much drugs would I need to do in order to hire you?
Answer: Um.......


Yes, people, you know about google. And so do all the other people who're experts in looking stuff up while they're wondering why they can't get good jobs.

Also, this is a perfect set of questions for recruiters. Any company that has 90% of their work in ASP.NET and yet reasds this and thinks that they have to ask coding questions using only "C, C++ or Java" is clearly dominated by morons we don't want to work for. And anyone who claims 10 years of Java experience yet can't code a trivial string manipulation function is clearly a liar, no matter how great their ability to use google to find code may be.

And anyone who hangs up the phone when asked to write a function to reverse a string because they think it means the employer actually makes their staff write their own string reversal functions in production code is so hopelessly retarded that they're not worth hiring.

If nothing else, I don't want to work with a primadona who's so proud of their 20 years of experience that they're offended at the idea that they have to demonstrate that they can do some basic coding tasks. Even if you're all google-using geniuses, I can't imagine wanting to be in the office next to most of the people complaining here.

Bob on January 23, 2008 3:56 AM

...these points are...pointless depending on the state of your effort.

if you want to mount an expedition
- you need an adventurer

if you want someone to lead the way
- you need a leader

if you want someone to clear the path
- you need someone with a machette

if you want someone to cart the luggage
- you need someone with cartage abilities

only in the programming field have I seen idiotic retards asking the leader to cart the luggage, hack the machette AND mount the expedition
for next to nothing

every one of the fresh meats that I have worked with always think their way is the best way - why? - because they have
NO EXPERIENCE
and
mommy, daddy and the girl they just laid last week told them are the best.

comes back to the old saying

you can be a Jack of All Trades and a Master Of None but
you can't be a Master of All Trades...

stick that in your pipe and smoke it

actually - I'd like to grab the lead pipe as well

thinker on January 23, 2008 3:59 AM

2^16 is a reference to 16 bit OS or data structure.

Me on January 23, 2008 3:59 AM

someone grab bob and beat him over the head with the lead pipe.

he works in a cubicle next to us and is still looking for his god damn red stapler


hahahahahahaha

cha ching


let's all lead pipe it

bobbeater on January 23, 2008 4:02 AM

Thanks Dave. 2^16 = 65536.

Just reminded me that excel has a limit of 65536 rows. Was wondering if this was due to some internal limit.

Also, ^ can be confused with XOR syntax.

gulzar on January 23, 2008 4:05 AM

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.

Frank on January 23, 2008 4:07 AM


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!

java man on January 23, 2008 4:10 AM

Ohh, I get it.

DEC(25) = OCT(31)

Adam on January 23, 2008 4:15 AM

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"

Withheld from embarrasment on January 23, 2008 4:16 AM


eyeD10T's

10111010100101010001 on January 23, 2008 4:17 AM

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.

Why on January 23, 2008 4:17 AM

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.

ilcavero on January 23, 2008 4:23 AM

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

Mike S. on January 23, 2008 4:25 AM

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.

Balls on January 23, 2008 4:35 AM

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.

Rick Cabral on January 23, 2008 4:41 AM

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

gulzar on January 23, 2008 4:42 AM

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.

David on January 23, 2008 4:44 AM

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.

Jorge on January 23, 2008 4:59 AM

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.

Steve on January 23, 2008 5:03 AM

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;

YerFired on January 23, 2008 5:12 AM

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

YerFired on January 23, 2008 5:15 AM

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.

David Avraamides on January 23, 2008 5:23 AM

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.

sobani on January 23, 2008 5:51 AM

"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" .

Lawrence on January 23, 2008 5:53 AM

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 :)

Robert Peaslee on January 23, 2008 6:08 AM

@ David Avraamides on January 23, 2008 05:23 PM
You're missing the point. Take note of the perspective of most of the commenters. They are *interviewers* (myself included, see above), not candidates, and they are saying that these questions are not useful.

Yes, Jeff listed some tough questions, but tough questions = well-studied candidates, not necessarily good ones. Your analogy of top tier employees at companies with tough interview processes shows correlation, not causation. I'd be curious to see what kind of candidates they turned away in the process, or even the ones who avoided those companies completely.

Frank on January 23, 2008 6:17 AM

@Frank on January 23, 2008 06:17 PM
I guess I read this post to mean more that you should pick some good technical questions suited for the position you are hiring for and challenge people to answer them. And you shouldn't expect that everyone will nail all of them - that's not the point. But if you take this approach, and apply it consistently across a large number of candidates, you'll begin to see trends that will help you make a better hiring decision.

And yes, correlation is not causation, but I still believe that having high expectations for candidates _does_ increase your chances of making a good hire - and that the downside of excluding a good candidate is more than offset by the upside of getting a better pool of quality people to choose from.

David Avraamides on January 23, 2008 6:37 AM

The whole coding test is fine, but coding over a phone seems kinda crazy. I'd say hold on I'll email it.

Another thing is I have built 3 hardware libraries in my time. Full of bit operations, when I was interviewed way back I could do math in Hex trivially. However it's been about 2 years since I really haven't had to do a bit operation. So unless you need a hardware guy, bit operations are not that main stream anymore these days.

I'd much rather ask about sql or network questions.

BoredGuyAtWork on January 23, 2008 7:06 AM

Why would someone really smart choose a staff programming job over investment banking or starting their own business?

There's a reason many programming candidates for staff programming jobs are average: the jobs suck!

Tom on January 23, 2008 7:13 AM

@BoredGuyAtWork: As an interviewer I always ask about bits and bytes. Most don't know. It's not an issue though, you don't need to have correct answers. It's about the conversation and how you handle the situation. You can tell if a candidate feels like a failure when they don't know, or isn't phased at all when not knowing, is indifferent, doesn't care about not knowing it, is defensive not knowing it, is apologetic not knowing, is confident they could learn quickly if you just told them, etc. There are millions of possible reactions, and that's what we look at. Not at the actual answer.

If you did bit operations 2 years back I'm sure you would do fine.

Btw, why are you bored at work? Just quit today! Every minute you are bored at work is just a waste of your life. Only do what you love. Imvho.. ;)

Lawrence on January 23, 2008 7:25 AM

I think if the top 20% is lamenting over the quality (or lack thereof) of the 80%-ers, I suggest they work harder to change the curriculum in both high school and college. Public school systems stink. Start at that level and rest will follow.

Why on January 23, 2008 7:28 AM

@Tom if you think the jobs suck that is telling a lot about you, not about the jobs. You are what makes the job.

Lawrence on January 23, 2008 7:30 AM

I've never done any interviews, as I'm military and somewhat stuck in my current job, but I consider myself a fairly decent programmer for someone who is purely self-taught.

I realize there are many things I do not know. For instance, I know what bitwise shift and comparison are but that doesn't mean I can explain the importance of them. I've just never needed them.

1. I'd probably be a total vaccuum in the area of writing C, C++, or Java flawlessly. I can identify C/C++ and Java, but that doesn't mean I've ever used them in depth. I took courses in college that utilized them to some extent, but they weren't my language of choice(C# at the moment).

2. I'm mediocre on the OO concepts. I started teaching myself back in the days of GW-BASIC, and that's where I was stuck until I started making a life for myself less than 9 years ago. PHP and C# are the first time I've used OO concepts and I'm no master by any means.

3. I am not familiar enough with regex to write the expression for the phone numbers from my head, but I know where to find out and I've dealt with regex before. I could do the rest of the script easily though.

4. I have never used several data structures... even hash tables are still new to me, but I'm always up to a challenge and I learn quickly, especially if I have a chance to tinker around with existing code.

5. I can't give you textbook answers to bits, bytes, and binary mathematics, but I think I know the basics. I couldn't write a program to count the bytes in a number, but now that I've read about it here, I'm off to do some research. It just never occurred to me that something like that would be useful.

Sorry for the long comment, I'm just trying to point out how someone like me would likely fall into your "Never should have been a programmer" category, and that I think it isn't necessarily true. To echo a previous comment, it should also depend on the applicant's ability and willingness to learn.

Jessie on January 23, 2008 8:07 AM

This is mostly good advice, though the Dec/Oct thing is just an inside joke -- it doesn't demonstrate knowledge, just sense of humor. If you offered to explain to me the joke, I would think it was funny, though.

Also, I have ~5% hearing loss and sometimes in a pressure situation with a soft talker, I could run into trouble here; hopefully, people with very minor hangups people like slight hearing loss, crappy phone connections, or time-of-day constraints, would be accomodated.

Martin on January 23, 2008 8:26 AM

Someone mentioned how being a skilled interviewee is sometimes enough to get the job done and I totally agree. I think it is in the interviewers and employers best interest to be ready to ask questions that are relevant to the current interviewee and go a little deeper than the superficial "what the diff between and abstract class and interface" type question. It's obvious that if you keep asking the same questions over and over they will find a way to the internet and the next time you ask them someone will have the perfect answer, and not because they're the best programmer who ever lived but simply because they know how to search.

My point is (and this is how I do phone screens) is start with simple questions in the 5 categories mentioned above and then dig deeper using the interviewees resume as reference. I like to ask them to model some sport that they like and relate to and I like to refer back to that example. That way the questions, while similar, are in no way exactly the same as the last interview I had.

just my 2 cents...

Noam on January 23, 2008 8:34 AM

I think it's amusing how many people talk about having difficulty with the "scripting language" requirement.

Folks, it's one command: /bin/grep No scripting involved. Just read "man grep" and match the options up against the problem statement.

I haven't used Windows in years, but I can't believe the Windows shell doesn't have a similar command. Searching through files is one of the most basic things a computer can do.

Mark on January 23, 2008 8:37 AM

I just went through a few months of trying to find a decent Java programmer (and I needed a real developer, not a script monkey), but I worked from the top down. I tended to ask questions such as these: what is deadlock, and what can you do to eliminate deadlock in your multithreaded programs? When would you call SwingUtilities.invokeLater(), and why? How would you localize a Java program? How does JUnit identify the testXXX() methods in your JUnit tests? Name some common refactorings. Java listeners and Swing actions are examples of what design patterns? How would you track down a memory "leak" in a Java program, and why does a Java program sometimes swell in memory when it has a garbage collector? Basically, I look to see if they can handle a commercial programming job instead of just being able to knock out a two- or three-hundred line Java demo. You'd be surprised how many programmers can't answer any of these.

CodeDawg on January 23, 2008 8:49 AM

I'm a sophomore CS major and I was able to answer most of these easily. I'm applying for summer internships soon, so hopefully I'll do alright.

n.e.r.d. on January 23, 2008 9:13 AM

[circa early 90s]
Interviewer: "So, are you familiar with common developer tools in a unix environment?"?
Candidate: "Oh yeah, sure am!"

Interviewer: "So you could tell me what a Makefile is?"
Candidate: "Oh yup, Makefile, make directory, I know all those!"

NEXT!

Eric on January 23, 2008 9:15 AM

Not that the above is saying much. I also have a willingness to learn and explore. Not just rote memorization =)

n.e.r.d. on January 23, 2008 9:16 AM

For all those people saying a college grad can't be expected to know or pass these questions - I'm a not even a CS student, and *I* know these things. At the very least, I can demonstrate the basics and that I have sufficient grounding to pick up the more advanced aspects.

Why are so many of you feeling so threatened by this?

CoditoErgoSum on January 23, 2008 9:44 AM

To those who disagree with Jeff a little bit, I would say Jeff just tried to find someone with global picture of the computing systems, to be more flexible to come up with different solutions for an application, in order to pick-up one solutions. He just tried to test the extension of your knowledge and skills.

Exposure to different levels and different aspects of technology surely will boot your ability to think out of square. After all, I think it is important to demonstrate your approach of solving a problem, if the interviewers really want someone with competent analysis/design skills.

Andy Wong on January 23, 2008 9:46 AM

The comments made me really sad. Now I can understand why the quality of software is really dropping all the time #8212; it's because programmers consider some basic fundamental things to be specific and it gets worse.

Complexity of insertions isn't math #8212; it's about whether one uses the right data structure. Binary arithmetics isn't about hardware or low-level stuff.

If a programmer doesn't know some of this then the probability that he/she will do something _really badly_ goes higher.

It doesn't mean that they can't do good programming sometimes; it means that every their commit should be reviewed.

I think that question about floating point arithmetics could be useful (e.g., what are possible outcomes of comparing x to sqrt(x*x)?).

dvk on January 23, 2008 10:12 AM

I could probably fudge my way through the parts of an interview that asked these questions without embarrassing myself too much.

Good reminder that without revisiting the basics frequently, you get rusty.

I agree with the guy who said business problems are the hardest.

Most of us aren't going to go work for Google or Amazon or the next big thing. So we spend less time close to the metal, and often don't have the luxury of long stretches of uninterrupted flow, cutting trees and flipping bits like there's no tomorrow.

Doesn't mean we're dumb, I aced that shit in Uni :P Focus has just shifted.

nexusprime on January 23, 2008 10:34 AM

The comments in this thread have really brightened my day. Programmers get pretty hostile when they realize that they suck.

Mike on January 23, 2008 10:35 AM


IMHO, the better test in an interview takes the form of "here is a [very basic] API. Implement [simple algorithm using recursion] with it." It's not a phone interview question, but it's a first-live-interview question, which might be a showstopper of the entire process (no reason to waste anyone else's time if the first technical interview bombs).

The trick of course in making the API simple enough (without stripping it clean) and finding an algorithm to implement which is straightforward enough to be explained completely in a few minutes.

Bonus questions include: what would you change about the API to make it perform better? Where can additional safety be introduced?

This seems to be a key differentiator between a developer who can dive into our code base, figure out the dependencies, and innovate, and the developer who knows only basic CS 101 stuff but can't apply that to a real codebase (which is acceptable in a fresh-from-college candidate, but a major thumbs-down if the resume lists years of business experience!), and the developer who has coasted along on the coattails of others his entire career.

Tom Dibble on January 23, 2008 10:39 AM

Why not just watch the homeboy (or homegirl) code on his own system using Yugma or similar?

Shanti Braford on January 23, 2008 10:42 AM

@Lawrence, you got a point, I'm quite bored. However now that I think about it, it's not because of the incompetency around here, the other guys here are not incompetent, they could all answer these questions. But the general lack of soul, you know the will to just try stuff and challenge themselves everyday. I think interviewers need to worry about that above knowledge base.
Your also right about getting a new Job. I'm just wasting my time here. Gonna start job hunting today.
---
By the way I was wondering why in the world would anyone have 50.000 html pages. If you expect someone to solve the problem with scripts, shouldn't you first ask yourself why you didn't use a script language and regex to create those 50000 pages, making the whole issue of replacing a phone number a matter of updating a field in your database :)

BoredGuyAtWork on January 23, 2008 10:48 AM

Well Jeff it was bound to happen I finally disagree with what you say. When I first graduated school, I would have had that total vacuum in RegEx's my OO Design skills would have been poor. I could do it but I couldn't do it at the level I am at today. I think you've three very important things here.
1. The job context. I could probably figure out and test and develop you code that uses a RegEx to solve your phone book problem in maybe 5 hrs if I had to use RegEx. However writing code to drive a digtal earth reference model do you know how many places I have had a need to use RegEX ? Maybe 1 or 2, in the last 3 years. Then there is co-workers and the internet. So I think the context in some areas is pretty important.

2. Secondly Interpersonal relationships. If you're not a team player and you want to sit in a closet and code. Great I don't want you on my team, I don't care how good you are, END OF STORY! There is no test for that.

3. You're ability to solve problems. I am not interested in if you can do what's been done 100 times out there. Can you really really think critically ? I suggest the thought analysis process is the most important. I've seen developers who've had 10 + yrs who could code anything you gave them but couldn't have an original thought if they're life depended on it. Again these are old problems that have been solved 100's of times.

I think that these test degrade our past experience and references. If I have 3 or 4 + years of experience and half decent references, why assume that it's just luck that I've stuck around ? Obviously I must have done something right. If you want me to write a test to get a job then don't ask for a resume. I wouldn't waste my time on an employer that asked me to prove myself in an interview. That's what a resume and references are for.

I wouldn't go so far as to lead pipe someone but that would be the end of the interview because, I wouldn't work for anyone who felt my resume/references were good enough to talk to me but not good enough to consider hiring me until I proved my worthiness.

Good Post, interesting insight but I am in 80% disagreement with what you've said here.

Chris

Chris Howell on January 23, 2008 11:07 AM

Hi Jeff,

I usually agree with you on everything, but here I have to side with the mob :)

Your questions are really textbooky and I would fail at least 50% of them (as in, not having a clue without Google). I have no uni degree, six years of real world development experience, and currently being self-employed.

If you're doing a phone screen of an fresh out-of-CS-student then your questions will suffice - in checking whether he/she was paying attention in certain classes, but for any other ... geezzz...

Take a CS major, submit him/her to 10 years of real world development, idiotic requirements, even bigger idiots with money and of course users - and look at textbooky stuff slipping away ...


Marko on January 23, 2008 11:09 AM

"Design a deck of cards that can be used for different card game applications."

This could be a black hole of design in itself. You could sit there for the whole hour coming up with useful stuff to cram in there.

"Design an OO representation to model HTML."

Correct answer: Google up the DOM. Cut, paste, done.

"Last year my team had to remove all the phone numbers from 50,000 Amazon web page templates"

The real task here is to make it so they don't have FIFTY THOUSAND frickin' templates sitting around. Who designed that monstrosity??

"What are some really common data structures, e.g. in java.util?"

Well, not being a Java programmer, I'll need Google to answer that...

"A candidate should be able to demonstrate a basic understanding of the most common data structures. More specifically, the big ones like arrays, vectors, linked lists, hashtables, trees, and graphs."

This could be an issue, particularly since till this moment, I was under the impression that a "vector" was a mathematical n-tuple representing an offset in an n-dimensional Cartesian coordinate system. This is despite the fact that I have used "vectors" in the sense the interviewer meant countless times.

"They should also know the fundamentals of 'big-O' algorithmic complexity: constant, logarithmic, linear, polynomial, exponential, and factorial. If they can't, that's a huge warning flag."

...that the candidate doesn't have a degree. Which you may or may not care about.

Atario on January 23, 2008 11:42 AM

Atario,

It's not about java.util.*, it's about knowing basic data structuring libraries in your language of choice.

About the big-O, you probably don't have to know how to write it down. You just have to know that it if you want to look up a value in a sorted linked list, it will take twice as long for a list double the size (in average). While if you had to look up a value in a binary tree, it would only take 1 extra iteration/function call when the tree doubles in size.

Caring about big-O is not such a huge issue when there are few items. But when the amount of data starts to increase, a badly chosen data structure will slow down the application.
See also http://www.codinghorror.com/blog/archives/000957.html about the rationale of caring about big-O in sorting algorithms.

sobani on January 24, 2008 1:02 AM

Watch out for one-trick ponies. Candidates who only know one particular language or programming environment, and protest complete ignorance of everything else, are a giant red warning flag.

And watch out for those that say they know a huge list of programming languages. They probably had contact with it in College or something, but they can't possibly know all of them.

Ramiro Polla on January 24, 2008 1:09 AM


Having done quite a lot (thousands, probably) of interviews (I did it for a living for a few years before going back to uni for my CS degree), I would say that Jeff/Steve is/are generally on the right track. However, I would emphasise that you need a mix of general questions (eg questions 1 (modified to your target language set), 2, 4 and 5) and the specific (question 3).

A question requiring you to write a regular expression does NOT count as general knowledge. You should know what one is, but the specific ability to write one depends on how often you use them (I haven't written one in years, so I could no longer do it without looking up the syntax). But if you need to know them to do the job you're applying for, then it's a fair question.

It's a common trap to think that all good candidates (for any job, not just software) should be exactly like you in knowledge and outlook (although nobody could be quite as good as you, right?), so you need to guard against that. The regex and data structure questions particularly have that sort of smell about them.

Personally, I'm also inclined to ask some process oriented questions, eg patterns, unit testing/TDD, refactoring, SE methodologies etc, as that tends to give you a different perspective on the candidate than the detail stuff.

Questions about the interviewee's personal life/interests can generally wait until a face-to-face, unless you're interviewing someone a long way away, in which case you should be more thorough with your screening.

Also, the interviewer should NOT be doing most of the talking, although they should be controlling the direction of the interview (programmers in particular can tend to rabbit on a bit!). The phone interview is to find out about the interviewee, ideally quickly, to see whether they are worth meeting. The interviewer jabbering away does not contribute to that. You do need to mostly ask open questions that require an answer beyond yes or no. For example, ask the candidate to explain something, or talk about their experience with something, rather than if they've heard of it.

Also, the phone interview is good time to check out any red flags raised by the CV - long unexplained breaks, overlapping time periods, lots of very short jobs, impossible amounts of experience with a technology, and so on

Jim Cooper on January 24, 2008 1:13 AM

Write a program to calculate and display the shopping days til Christmas in any way in the language that the shop uses the most...

To keep it simple, any day except Christmas is a shopping day.

It must return the correct answer.

If they can't do that then they can't handle:
dates,
leap years,
logically thinking out the problem.

Have them submit the code.

Look for:
Good usage of components (good)
Correct handling of leap years (good)
Good OOP principals (separating the interface from the function from the UI) (good)
Good re-usability (very good)
Good coding style (good)

Just a little suggestion...

Mac on January 24, 2008 1:18 AM

The comments from this post reflect the ongoing battle between those who believe that software developers only need real world experience to do their job, and those who believe that a person needs a Computer Science or Software Engineering degree to do well.

My personal opinion is that a person who wants to be a professional software developer and not just a computer programmer will do both. He (or she) will get the CS or SE degree, and then try to work in all aspects of software development, not just implementation.

For my part, this post only emphasizes my desire to hit the Computer Science Theory books again to get a better grasp of the fundamentals.

Delmania on January 24, 2008 1:21 AM

@Atario:
"This could be a black hole of design in itself. You could sit there for the whole hour coming up with useful stuff to cram in there."
Which would neatly show that, in a real project with shifting requirements, you'd be incapable of solving basic problems without overcomplicating them.

"Correct answer: Google up the DOM. Cut, paste, done."
And? That's correct (I think), it solves the problem, and all you might need to do to show off is highlight the nouns you'd turn into objects.

"The real task here is to make it so they don't have FIFTY THOUSAND frickin' templates sitting around. Who designed that monstrosity??"
Converting 50,000 Amazon web page templates; a long, slow tiresome process that will cause more trouble than it solves, and will never be complete.
Writing the regex; about an hour's work, including debugging.
Pretending this problem doesn't come up all the time; Priceless.

"Well, not being a Java programmer"
What, you've never encountered or expect to encounter Java in any project? You can never be trusted to work on a single project involving Java? If you and Java come into contact, the universe would warp, and life as we know it would become lavendar-fresh bath salts?
I'm not a "C++ programmer", but my current project involves C++. Even if
"I'll need Google to answer that..."
If you need Google to answer the question "What are common data structures?" (like Lists, Linked Lists, Vectors, Maps, Hash Tables), how in the name of the Gods are you going to program if your net connection fails?
java.util was a *clue*, not a requirement.

"This could be an issue, particularly since till this moment, I was under the impression that a "vector" was a mathematical n-tuple representing an offset in an n-dimensional Cartesian coordinate system. This is despite the fact that I have used "vectors" in the sense the interviewer meant countless times."
So, if they asked you to perform a simple task at work, you'd make some clever quip about double-meanings rather than actually doing what they asked... That's actually good for an interviewer to know.


"They should also know the fundamentals of 'big-O' algorithmic complexity: constant, logarithmic, linear, polynomial, exponential, and factorial. If they can't, that's a huge warning flag."
"...that the candidate doesn't have a degree. Which you may or may not care about."
No, that they have no grasp of code efficiency. If you don't know why an exponential-time algorithm is bad news, I really don't want to use your sorting algorithm.
You don't have to know the full terminology, but words like polynomial and exponential are taught at high-school level. And appear in every text-book on the subject. And are bandied around by so-called "real programmers".

This is why they need to start asking these questions. It exposes not only any areas of ignorance, but also your whole attitude to problems and authority. Which is far more useful. You can *learn* regexes, learning how to deal with other people is harder. More useful too.

Tom on January 24, 2008 1:39 AM

Many people are single skilled like one-trick ponies. I strongly agree with the interview tip, but we need to understand that it is not the single skill that really is the issue, but instead is the attitude of rejecting the means of utilizing other languages as an alternative.

Colin Joss
Colin.Joss@gmail.com
East Lothian, Haddington
United Kingdom

Colin Joss on January 24, 2008 1:43 AM

Interviewers typically have to offer a lot of leeway for the nervousness factor, although some may have the wrong perception about the quality of programmers applying for jobs because they simply aren't able to see both sides of the table anymore. I see some of that arrogance leaking out in some of the comments -- Yes, of course there are people out there that just don't have the chops to be good programmers, but I think this is getting exaggerated a bit by looking at random experiences from interview performances. I say this having been on both sides of the table before. Believe it or not there are good programmers who don't do great with interviews in the style they are often done, and this can't be ignored as simply 'disqualifying a good candidate occasionally' -- especially when it's admitted the system is flawed AS IT IS and people get through those phone screens who don't have the skills desired.

RE: Aaron G from earlier - a better predictor of ability to learn and be a great developer over time would be an aptitude test that tests abilities seen as conducive to being a good programmer. (Problem solving... for sure, basic Math ability, yes... random code hacking on recursion and string manipulation problems, I'm not so sure. One that I took once even included analogies :)

For you to accept that interviews are the best predictor means that anyone who fails an interview must be a bad programmer -- yet in reality most programmers have flubbed interviews before, or done badly when presented with certain areas or questions they were unsure of (combined with the nervousness of being there). It seems a lot more shaky when you look at it in light of people's realistic experiences and the 'hit and miss' nature of the whole thing.

Especially considering all the people who make it past phone screens anyway (part of the original topic) - designing a better phone screen doesn't mean potshotting more random technical questions, many of which aren't related to tasks you actually will DO and work with on the job.

David on January 24, 2008 1:47 AM

"Write a program to calculate and display the shopping days til Christmas in any way in the language that the shop uses the most...

...
Good OOP principals (separating the interface from the function from the UI) (good)
..." - Mac

Umm, why would this little exercise involve objects? This could be done in one line of Perl.

Steve on January 24, 2008 1:49 AM

This post reminds me of a series of blog posts I wrote a few months back. I basically railed against everything Steve Yegge thought was good.

I still disagree with his philosophy.

http://codeeleven.blogspot.com/2007/11/want-job-reverse-string-sad-state-of.html

And a follow up:

http://codeeleven.blogspot.com/2007/11/whiteboarding-code-part-duex.html

Jonathan Holland on January 24, 2008 2:02 AM

I did a phone screen a while ago. The guy was monosyllabic, which I thought might be interview nerves, so I tried to draw him out a bit:

"What's the technology you're most enthusiastic about? What do you feel you're a real expert at?"

"Hibernate"

"Ok..." (I wrote a book on it) " so what version are you currently using?"

"Er... er... um... I dunno."

"We'll get back to you."

Dave on January 24, 2008 2:14 AM

I think that all of these questions are fair to ask a potential employee. The interviewee may not be able to answer all of the questions, but a lot can be determined of the person just by watching / listening to his or her reaction. For example:

For the telephone problem, the interviewee may not know how to use RegEx. Uh-oh... but it's possible to do this anyway... He or she could describe that they'd open each html.file and turn each line into an array of characters (ie. 'O', 'n', 'c', 'e', ' ', 'u', 'p', 'o', 'n', ' ', 'a', ' ', 't', 'i', 'm', 'e', ) and then loop through, one character at a time, seeing if it found a character that is 1 OR 2 OR 3 OR 4 OR 5 OR 6 OR 7 OR 8 OR 9... then see if the next one does, and the next, etc, using a large string of ANDs and ORs.
This method, obviously, would be terribly inefficient, but it would show that the person was able to work around a barrier.
An undesirable candidate would not be able to work around a lack of regex knowledge.

Of course, Google solves everything, but......

It would be a bit like math tests where you show your work. Even a wrong answer still can get half credit for trying hard.

saintpretz59 on January 24, 2008 2:28 AM

sobani:

"It's not about java.util.*, it's about knowing basic data structuring libraries in your language of choice."

In retrospect, I may have been taking the "e.g." as a direction to the interviewee and not the interviewer, as the original author may have intended. I was taking it as a literal and not a compiler directive.

"About the big-O, you probably don't have to know how to write it down. You just have to know that it if you want to look up a value in a sorted linked list, it will take twice as long for a list double the size (in average). While if you had to look up a value in a binary tree, it would only take 1 extra iteration/function call when the tree doubles in size.

Caring about big-O is not such a huge issue when there are few items. But when the amount of data starts to increase, a badly chosen data structure will slow down the application.
See also http://www.codinghorror.com/blog/archives/000957.html about the rationale of caring about big-O in sorting algorithms."

I'm not saying knowing about big-O is not important, just that knowing the notation and terminology ("logarithmic", "geometric", etc.) probably shouldn't be the real target of the interviewer.

Tom:

"Which would neatly show that, in a real project with shifting requirements, you'd be incapable of solving basic problems without overcomplicating them."

It all depends on what you're trying to accomplish, doesn't it? If you're writing a class for use in your company's lone card game, you'll want to write it differently from, say, a class for sale to card-game developers worldwide.

"And? That's correct (I think), it solves the problem, and all you might need to do to show off is highlight the nouns you'd turn into objects."

I meant that the answer would be that it has already been done -- as it says in a different spot, "don't reinvent the wheel". Especially since modeling HTML is a pretty massive undertaking to give someone in an interview question.

"Converting 50,000 Amazon web page templates; a long, slow tiresome process that will cause more trouble than it solves, and will never be complete.
Writing the regex; about an hour's work, including debugging.
Pretending this problem doesn't come up all the time; Priceless."

If you have 50,000 templates in use, you don't have templates. You have a mess. And I don't think anyone here is saying that messes don't exist. It's just that there's "doing the right thing" and theres "slap-dab it till it doesn't error out". Not that we haven't all been guilty...

"So, if they asked you to perform a simple task at work, you'd make some clever quip about double-meanings rather than actually doing what they asked... That's actually good for an interviewer to know."

Too clever by half, apparently, since it failed to get across to you that emphasis on specific terminology will mislead the interviewer to think that the interviewee doesn't know something, when, in fact, they know it by a different name. This is a problem with 99% of all computer "skills assessment" testing, by the way.

"This is why they need to start asking these questions."

My point is: they do need to start asking new questions, but they also need to be careful what they're really asking.

Atario on January 24, 2008 2:28 AM

Wow - Ron - how amazingly patronising of you....

"And finally, for those who can't do these problems easily: even if they look stupid to you, the subjects they cover would likely broaden you as a programmer and increase your productivity."

I wouldn't be so bold to state that every good developer should be able to spit out a f*cking "Virtual Zoo program" on the end of a telephone.

and... Jon Raynor - what you wrote was a Function not a Method... In order for it to be a Method, your code needs to be inside a class

i.e.

class MathFunctions
{
public int AddNumber(int a, int b)
{
return a + b;
}
}

I would also recommend using camel casing on your Method decleration, include some comments, provide better variable names for your parameters and change the method instantiation type to static.

i.e.

/// summary
/// Class that contains general mathematical functions,
/// accessible to all classes (Public).
/// /summary
/// remarks
/// Dated : 24th Jan 08
/// Author : First, LastName
/// AddNumber: Method that returns the result of adding two
/// integers together
/// /remarks
public class MathFunctions
{
/// summary
/// Adds two integers together and returns the result
/// /summary
/// param name="ValueA" type="int"
/// para
/// a value to be added
/// /para
/// /param
/// param name="ValueB" type="int"
/// para
/// a value to be added
/// /para
/// /param
/// returns
/// An integer value of the two parameters added.
/// Note: there is no overloading, or error trapping
/// in this method.
/// /returns
public static int addNumber(int valueA, int valueB)
{
return valueA + valueB;
}// end of addNumber Method

}// end of MathFunctions class

Steve on January 24, 2008 2:57 AM

Well, I'm afraid to say I disagree with a lot of the detractors who've posted here. Great post Jeff.

I've done a fair bit of interviewing in my time and what I've noticed from people who've been hired is that there are a lot of people who can solve _most_ problems, but there are a few people that can solve _any_ problem, no matter how hard it is.

Example of "any" : There's a customer on the phone who's fed up because once every two months the app we sold them intermittently trashes a bit of data and causes their system to be unusable, but testing can't reproduce the problem in house. It happens.

The "average" developer will throw their arms up in despair at this and hope somebody else will come along to rescue them. Now this isn't actually a bad thing itself, if the developer is in a junior position, provided they can then learn and get better as a result of somebody higher up helping them out. (Focus on the first derivative!)

The "superstar" developer might not know exactly what the problem is, and may well not be able to reproduce it in testing, but they'll be able to look at the code, and think about the symptom, and come up with some ideas. It might take a while, but they'll never give up.

As a business, you need people who can solve all the problems that get thrown at you. It's no good having developers who can solve 95% of the problems if the last 5% means you have to loose your largest and longest standing customer.

Yes, I don't need to worry about writing my own code to reverse a string in my day job. I don't use regexs _that_ often, and I rarely need to worry about bits and bytes, and when to use a binary tree over a list. I don't deal with these things for 95% of my working time. But you know what, sometimes, you've just got to know about these things to solve a really hard problem.

And, all else being equal, people who've at least _heard_ of the sort of areas Jeff and Steve are talking about in their phone screen are more likely than not to be the sort of people who can tackle the really hard problems when the business needs them to.

From reading Steve's original post, I don't think he's even expecting competence in these areas during the phone screen. You might not know the exact regex to extract phone numbers from HTML, but you've at least _heard_ of grep, right? And you know it can be used to filter output on a file? I think that's enough to get through the phone screen.

Also, bear in mind Steve's phone questions are tailored towards a job at Amazon. If your business is 100% ASP.NET development and is never going to diverse away from that (and how sure are you that's the case), you might want to ask some different questions instead. Ask the candidate if they've heard of view state and session state. Don't necessarily worry about if they know the difference between them during the phone screen, chances are if they recognise the names they might be able to do a bit more than just drag and drop!

I'm sorry if I've antagonised anybody by saying this, or you think I'm looking down on you, but sometimes the "superstar" things are what you need to do to do your job! Maybe working as an internal dev in a bank's different and you don't get these problems - I dunno.

Rejecting a candidate is _not_ personal (or at least shouldn't be). I've interviewed for places and been rejected. It happens. Get over it.

Ritchie Swann on January 24, 2008 3:15 AM

More comments»

The comments to this entry are closed.

Content (c) 2011 . Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.