Getting the Interview Phone Screen Right

Interesting set of links and articles to peruse. At my most recent job I ended up getting the junior position, when I had interviewed for a more senior one (but I didn’t find this out till I came on… nice). Then the senior dev. turns out to be a bully, and a joke. Anyway, I do my thing, and the bottom line is, despite complaining a lot and being picky and demanding, I’ve just quit that job and gone on my own because the boss is incompetent (as a boss, he’s really super nice as a guy) and because the co-worker is a bully.

No big deal, right? Only the catch is, I got a $15/hr RAISE, to WORK FROM HOME, on my OWN CLOCK, and I get to do the COOL PROJECTS. A simple test up-front would have shown who is who (but as this article implies, it takes management being aware of these issues for anything real to be done).

Well, after reading both this article and the linked article - I’m feeling a little less than super today :slight_smile:

In any case, I would fair decent on most of the interview, fail on certain points (namely, I code in JavaScript and PHP, not a very data structured environment, likewise, some features of these languages aren’t friendly to Java, C and C++) Most of my work is in scripting languages, I’m rusty with ASP classic, can muddle through Cold Fusion (non-tag based code) or grasp it (tag based CF), used to code in Java, took C and C++ in college (even Pascal and had a year of COBOL, but neither ever see the light of day on my resume). A long time ago, I needed to use Perl for stuff.

I don’t think I would be totally clueless on everything, but I would provide incorrect answers to questions that, in my scope of programming, would be correct. For example, data structures, I’m familiar with the simple type (array, for example) - not vectors (as all arrays I use scale as I need them) so I wouldn’t mention them as I don’t use them and they wouldn’t come to mind. Likewise, I create objects for complex data structures as I don’t have prebuilt ones all the time for what I need.

Bits and Bytes would be fun (as I watch my binary clock and am able to read it…) but some questions I’d know how to do the work, just not necessarily how it is named - although the bitwise operations I’ve often glanced at but never really figured out a practical use (for what I’m working on) in order to use them. All the logical operands I use all the time.

The 50,000 page phone number lookup would have been easy, I would have mutter grep (not that I’ve used it, I just know about it) and regular expressions (which I would have provided the code needed for it)

OOP for JavaScript is a slight bit different than for tightly structured languages, I get about 80% of the terms listed on the other article from this blog and can provide examples of them (so, according to the article, I don’t know the basics) - but I use OOP coding in my JS all the time, likewise, I’m using OOP in my PHP as well (even if I do use a framework… I do code a fair bit of the needed application on top of that, which uses OOP).

I was surprised no questions on data(base) structure, queries and such. While knowing a high degree of information on low level stuff, knowing how to access and work with databases would, I think, be key in working with large projects and (in my case, my focus is websites) ecommerce websites.

While I do think the list of questions (the concept) is a good one, the specifics of the questions aren’t applicable to ever developer job. While some frown upon, look down upon, some of us ‘script’ coders - we are developers too and our questions should be different from the questions asked of traditional (dare I say “legacy”) programming languages. Because, honestly, I see the code turned out from people attempting to use their “hard core” coding on JavaScript and, oh my word, it is the worst code I run across (for example, I have a simple date picking utility for a website form that I’ve seen written in 40-60k+ of code complex, all classed out and such - my code is a lean 13k, including CSS, which does more than every other similar product on the market - and don’t get me started on form processing, can never understand why something so simple is so hard for Java coders to get… but I digress)

I would want to know how a coder would write efficient code (not everyone has broadband, after all, and even if they do, if every “feature” is 60k - the menu, the ajax, the date picker, the search, the CSS, the content slider, the tabs, etc you’re 600k - and please, LEARN to use external JS files…)

From Jax on January 24, 2008 05:38 AM

“Some of my deliveries have zero bugs. But I’ve never written a XOR operation in my life. So do I suck?”

Yes, you suck – but it’s not limited to your lack of “XOR” experience. The fact that you would ever say something to the effect of “Some of my deliveries have zero bugs” indicates to me that you don’t actually know much at all about delivering software. (Unless perhaps you count “Hello world!” among your ‘deliveries.’)

You have failed TWO of the major yard sticks for measuring developers that I use. 1) You believe that you have created non-trivial, yet “bug free” software. 2) You believe in magic.

Allow me to elaborate on #2. There are really only two types of developers: those who believe in magic and those who don’t. Your assertion that you don’t need to understand the underpinnings of what your software does clearly indicates that you believe in magic. Believing in magic effectively PREVENTS you from solving any problem that occurs on the other side of the magic wall between your code and the code it calls or in the process of crossing the magic wall.

I make it a personal policy never to hire developers who believe in magic, or non-trivial yet bug-free software.

Hi
I’m not sure about your type of questions. E.g. If I Have to evaluate Steve based on the answers he’s provided
Look at the implementation of sumFile – Summing int’s into an int? hasn’t the man heard of overflows? Not closing an IO in finally?
candidate rejected!

I usually ask questions based on the last project the candidate has worked on. If he can answer them clearly and knows what goes on in his project, he can handle mine. I normally give them plenty of rope at the start and pretend Im not going to ask much. Typically this means the candidate then states how he has taken requirements, architected, designed, developed, lead the team, tested and supported the application. After which i ask pointed questions and If i get an answer oh I didnt work on that area that much after having stated that he did, its a reject. I also always change a couple of parameters on the last project and ask now what changes in your solution?.

Its quite silly going with a fixed book set of questions. E.g. How many of us developing websites really work with bit’s on a regular basis?

As Barbie says, math is hard! Fortunately most of the companies I’ve worked for don’t have anyone on staff who would understand any of those questions. The only question I could answer is #3:

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

This is something I’ve worked out before and I have some code in my notes for future reference. You really need a recursive function to traverse subdirectories and ideally you should generate a report listing of the line numbers and files where phone numbers were found so you can double check your work.

I bet it would not occur to you to load the web in FrontPage and use its search and replace to do the same thing. It even supports regular expressions for find and replace.

"“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! ;)"

No, Damian nailed it. If you work in the business world, you are NOT a computer scientist. You are a business analyst with programming skills. The biggest mistake business developers make is assuming that the BA or the business got it right. They will throw competing requirements at you and not even know it. They will ask you to do things that will cost more than they are willing to pay, and its your job to put it in terms they understand and then build the system they actually want, not the one they asked for to begin with.

There are computer scientists, mathematicians and business analysts with coding skills. These are not the same thing. Know what you’re hiring for.

Because computer science started in math departments, there’s an implicit assumption that a math skill set and mind set is a necessary prerequisite for development.

It’s helpful but necessary? Business analysts are more like plumbers. They have some basic skills. The put the parts together. They probably don’t know the details about how pipe is made, or the soldering iron works, or the chemistry of polymer pipe. They may not care about getting a pipe with the shortest distance between two points because it doesn’t matter.

A business analyst won’t know how to optimize code either, for the same reason.

Getting the phone screen right means looking at what you need first, before you dial the number. The problem may not be them. It may be you.

Good luck with your interviewing, we went through the same thing here and tried to come up with technical questions to “screen” candidates. It never really worked out for us and our requirements were apparently at a much lower than yours (we were more interested in people who could figure out how to use common productivity tools).

I think the problem is that this approach is exactly the way a programmer would try and go about solving a problem - as if people can be treated like big algorithms. The unfortunate thing I have learned is that this is not really possible, you really need to bite the bullet and spend a lot of time interviewing people, relying on your gut feeling, and then taking a risk on someone. Taking exercises out of a computer science textbook is not really a great assessment of how people will adapt to your workplace.

ChaChaChing: After 20 years writing software, you forgot how to write proper English.

I’m surprised at the level of defensiveness exhibited in the responses here. There are many different flavors of programming job so no one set of screening questions can possibly be appropriate for all jobs. I assumed that questions discussed were relevant to the types of problems being worked on at Jeff and Steve’s shops. Am I out in left field for thinking that five years doing ASP.NET does not in itself qualify you to walk right into a job doing Windows desktop apps using C/C++?

I thought the question listed here were dead easy. On the other hand if you asked me about the first three normal forms for databases I’d be sunk. That doesn’t mean I’m an idiot, it doesn’t mean I’m a bad person. It does however mean that it would be a waste of time interviewing me for a serious database position. I’ve done database work in the dim past, and I don’t doubt I could pick it all up again, but why would you do that when you can get someone who matches all my other stellar attributes, but also has the pertinent knowledge about databases already at their fingertips.

The most frustrating experience I ever had on the hiring side of the desk was at a small consulting firm in 1994. We all knew VB, I knew C as well, and for a variety of reasons we wanted to find an additional person who knew C++. Despite clearly requesting a strong C++ background in our ads, candidate after candidate would show up who thought that knowing C++ meant writing C code but using the C++ operators instead of printf and scanf . Inevitably they would plead that they were fast learners, and they could quickly pick up the rest of C++. We could only sigh and point out that we were clever fellows too and could do the same, but we were really looking for someone who already knew the language, if only so they could teach the rest of us. That experience is why I think these screening questions are useful.

Hey Now Jeff,
another great post. Makes me think a lot about fundamentals.
Coding Horror Fan,
Catto

Puh-leez this article is a joke. What planet are you on and when are visiting days?

Jeff, you usually have good articles that hit the spot, but this one was so big “miss” you’d not been hitting barn wall even if you’d been inside of it.

I dont think you’d get a code monkey for asking the guy what 2^16 is.
If he takes 3 minutes to think it through fine… but it is an extremely important number. And being able to answer questions like that would get you completely the opposite.

Some of the questions though would get you a code monkey.
But if you put it all together, you have a very well balanced developer that can play code monkey when needed to, and be creative when needed to.

"google is your friend"
Why not apply for a job there then?

hmmmm - not sure that I agree with this one either (I suppose that means this post will be removed as usuall).

I wrote some complicated stuff at University - but generally in my day to day business life, I try my hardest to make things as simple as possible.

KISS

orange, orange, orange, orange!

I just love when an interviewer uses a set of terms that are arcane, part of a general pool of terms developed internally at the particular company, or platform-specific, and expects an interviewee to understand what they’re talking about without any further explanation. In one particular case I gave up answering many of their questions simply because I was sick of listening to questions using Windows-only terms that were almost as old as the OS itself, and haven’t been used in most of the documentation since before I started writing software. In the end, I found that I really didn’t want that particular job, and was glad that it wasn’t offered to me.

The best part, though, was that I was able to recognize many of the questions as being minor adaptations of the crap floating all over the internet. The reality of the situation is that I probably would’ve been able to answer every single question just by reading blog posts and asking for different terms (if they could have provided them).

What I was really looking for was a job that was more focused on software development and that would understand that their particular work has a specific focus that may not be the focus I have had in my work. I would expect questions that allow for some room to figure things out and even the chance to look them up. What I usually find, though, is an escort to a room with 2 senior programmers that have been working in the same field far too long and expect everyone they work with to use the same language they do, and do most of their programming on paper or whiteboards.

I see we have a mix of opinions about these questions. Let’s list some pros and cons:

PROS:

  • They test the candidate on the RIGHT variety of technologies / skillsets (although I am worried about the lack of database questions), as opposed to HR’s idea of “do you know language X?” with the accompanying oddball, irrelevent, googlable questions. (I was asked in a phone screen, by HR, what a transient variable is).
  • They indicate the value of an education (As a person who graduated Cum Laude, I don’t want to work with someone who doesn’t value my education)

CONS:

  • They assume that all programmers must be a jack-of-all-trades.
  • It omits the most important question: “Why do you want to work for us?” This question should weed out 99% of all candidates. Some might argue that this is a question is an in-person question, but asking it in the phone interview gets the candidate thinking about the commitment involved. It also indicates how much research was done into the company before applying.

I haven’t participated in interviews, but I talk frequently with someone who does. What people are really looking for is how much you want the job. I have answered all of these questions in interviews and still not gotten the offer, because I wasn’t acting like I wanted the job.

From Ian on January 24, 2008 07:16 AM

“You have failed TWO of the major yard sticks for measuring developers that I use. 1) You believe that you have created non-trivial, yet “bug free” software. 2) You believe in magic.”

Oh great so now i’m a liar too huh?
To account both of these deliveries were applications for mobile devices, one for stock taking the other was a major upgrade for a warehouse solution. They weren’t Enterprisy but they weren’t trivial.
Basically a big job for one man.
I was as surpised as you sound, I also believe there is no such thing as bug free code and the longer the phone didn’t ring the more I worried, but it can happen and it DID.

I don’t presume my code is error free which is why I have unit tests and also vigourously test before committing changes to my source control.

Unfortunately you just seem incorrectly assume I’m lying much like the people who incorrectly assume programmers suck if they don’t know how to XOR.
Another risk in this scenario is letting your own ego get in the way of hiring a great candidate.

I’m amazed at some of the replies on here.

'I don’t need to know about data structures, because I write .NET’
Huh?? Take a look in System.Collections - see those classes, they are data structures.
If you don’t understand them then how can you choose the most appropriate one to use?

‘I don’t need to know binary because I code websites’

Uh-huh… so if you need to query a database that uses a field containing flags then you are going to be lost?
Or if you need a function that masks together its parameters (like Open(Create|Read|Write)

‘I don’t know regex so I’d write a throw-away program’

So you have heard of regex, but rather than take an hour to go away and read about it you’d spend a couple of days writing your own broken version.
And ‘I use Windows not Unix’ is not an excuse - the Find option in most decent text-editors can use regex.

I do agree though that some process-oriented questions would also be good: describe unit testing; give a typical project life-cycle; etc

Sigh. For a few minutes at first, I was reading the first piece of advice as “Don’t let the candidate drive to the interview.” Er ok, I thought, if you think that’s important…