Please create an account to participate in the Slashdot moderation system


Forgot your password?
Television Media

How Should You Interview a Programmer? 1136

phamlen asks: "Having hired several programmers who haven't worked out, I'm wondering if other people have better success with interviewing techniques. Usually we have a two 'technical interviews' and a final interview. The technical interviews tend to be a combination of specific technical questions ('Is friendship inherited? How would you find out?') and algorithmic ('Given the numbers from 1-10 missing one number, how do you find the missing number?'). In addition, we essentially try to interview for: intelligence/performance. technical skills (algorithmic, etc.), and team compatibility. Unfortunately, we've been burned a couple of times by people whose performance didn't measure up to what we expected from the interviews. So I'm wondering if other people wanted to share their interviewing tricks - how do you find out if someone is a good programmer?" Surprisingly enough, we've done a series of these, so if you are interested in similar questions for sysadmins, network engineers, or the one who will follow in your footsteps, then we've got it covered. We've also covered core IT questions as well. What special ways do you have of evaluating potential coders? How well have they worked out?
This discussion has been archived. No new comments can be posted.

How Should You Interview a Programmer?

Comments Filter:
  • Good question (Score:4, Insightful)

    by mr_zorg ( 259994 ) on Thursday August 22, 2002 @03:18PM (#4120952)
    Unfortunately, I don't have the answer... I tend to look for someone with general problem solving skills, intelligence, and a genuine passion for that they do.
    • by unicron ( 20286 ) <(unicron) (at) (> on Thursday August 22, 2002 @03:26PM (#4121054) Homepage
      How were you able to be so poetic yet completely vague all in one sentence like that?
    • What I do (Score:5, Funny)

      by Anonymous Coward on Thursday August 22, 2002 @03:37PM (#4121212)
      I usually ask if they contribute to open source. Then, if they answer affirmatively, I tell them they can telecommute, give them a design spec document, and give myself a bonus for saving 100 percent on salary!
  • by AssFace ( 118098 ) <stenz77@gmai l . com> on Thursday August 22, 2002 @03:19PM (#4120964) Homepage Journal
    if you are asking them actual questions that have definite single answers - what is to stop them from studying for it?
    wouldn't you rather have someone that can think on their feet rather than those that heard from a friend what your interview was like and studied to do well for that interview?
    • by Amazing Quantum Man ( 458715 ) on Thursday August 22, 2002 @04:40PM (#4121887) Homepage

      How about someone who answers a technical question, "I don't know off the top of my head, but that's what man pages are for."

      I'd tend to hire someone who's willing to say "I don't know" over someone who tries to BS an answer.
    • by ivan_13013 ( 17447 ) <ivan DOT cooper AT gmail DOT com> on Thursday August 22, 2002 @06:13PM (#4122760)
      The primary ideas/assumptions I use when preparing interview questions and actually interviewing (for programmers usually, or any other position) are as follows:

      * Past behavior is the best indicator of future behavior
      * Most people can not lie well (and won't anyhow) when being questioned directly to arbitrary levels of detail
      * Technical ability is best determined by specific and relevant tests
      * "IQ testing" can be fun and enhance the interview experience, but it's not of primary importance.

      But let's take a step back. To get ideas for questions, I start by making two lists: "hard" skills, like particular technologies and experience levels, and "soft" skills, like ethics, interpersonal skills, and general fit with company culture.

      From the "hard" skills list, I try to think of a few technical questions that I can ask informally, like academic questions about programming languages, or other specific knowledge. If possible, I'll also use a short programming problem that can be completed in 30-60 minutes. The rapid-dev code sample is always informative! If this isn't an option, asking them to send in their answer later still tells a lot, but less about how well they code under pressure.

      Then comes the fun part. From both "hard" AND "soft" skills, I think of behaviors or circumstances that come up where they would need to be exercised. Then I ask the person questions like "Think of the last time you [were asked to complete a project without enough time] or [had a dispute with a coworker] or [had to design a schema]. What did you do?"

      Sometimes, the person will answer saying "Well, I always.." or something like this. If that happens, I tell the candidate that I would really like them to think about a specific single occurance, so we can talk about it.

      When they tell about what was going on, and what they did about it, you can learn a lot about their personality, real-life communication skills, self-image and more. But don't stop there! Ask for more detail. Ask about the algorithms, or the outcome of a dispute, or what they learned from it.

      It's important also to manage your own perceptions throughout the interview. If you start to get the idea that this candidate is *really good* or *really bad* in a particular area, you should challenge that thought right away in the interview, by asking a question that gives them a chance to talk about their strengths (if you think they are weak) or how they have been challenged (if you think they are strong) in that particular area.

      Through this kind of questioning, you get to know the interview candidate a lot better. A textbook response or whatever their friend told them to say just won't be helpful here. A lie will get complex very quickly when you tack on follow up questions. And you let them choose the best ways to explain themselves, while learning what you need to know about their behavior.
  • Riddles... (Score:2, Insightful)

    by Cryptnotic ( 154382 )
    Ask them a few riddles. For example,

    the ones discussed here []

    • Re:Riddles... (Score:3, Insightful)

      by jmccay ( 70985 )
      Riddles won't help. It only shows you have a good ability to solve a riddle. Debuging and programming can't be interviewed the way most companies do it now. It seems to me that the problem in this persons case is they have too many interviews. They are over-analyising the person. A good programmer may tend to think more in abstract terms than the technical rules. Rules can be looked up as needed, but being able to abstract the idea and write the solution in a varying choice of languages is completely different.
      Algorythms come and go, looking for a programmer based on what algorythms they know is stupid and useless--all it proves is ythe person has book learning and nothing more.
      What's missing from the applicants skills can always be trained. Phamlen seems to be doing what most companies have been doning they look for book learning type skills. They want someone whose skills exactly match what they are looking for in a programmer, and that WON'T always work.
  • by bloggins02 ( 468782 ) on Thursday August 22, 2002 @03:20PM (#4120976)
    ... the swap function. It may be simple and about three lines long, but you'd be surprised how many people it weeds out who simply don't understand pointers.

    And understanding pointers (even if you use non-pointer languages) seems to be a common trait of most "Good Programmers".
  • by tjw ( 27390 )

    Q: Which is better vi or emacs?
  • My experiences (Score:4, Interesting)

    by IIRCAFAIKIANAL ( 572786 ) on Thursday August 22, 2002 @03:21PM (#4120990) Journal
    When I applied for my current programming job, they gave me a barrage of tests and compiled an aptitude and personality profile of me.

    It was really freaky how accurately it described me... the main point was to evaluate me with reference to the type of person that excels at my job (Programmer/Analyst with some support duties)

    They also asked for source code I had written and numerous references.

    THe problem with an interview is it's too easy to bullshit. You need to go beyond the interview, as my current employers did.
    • by FreeUser ( 11483 ) on Thursday August 22, 2002 @03:38PM (#4121239)

      It is obvious that anyone with hiring expertise, such as human resource specialists, can most effectively hire potential candidates by insuring that they have MCSE (Microsoft) or Red Hat (Linux) certifications.

      This removes the requirement for the interviewer to ask intelligent questions, and for the interviewee to provide intelligent answers, streamlining the entire interview process completely.

      After all, how else is an interviewer going to be able to BS a potential candidate into believing they know what they are asking about, and how else is a potential candidate going to BS an interviewer that they know what they are talking about?

      As Microsoft and Apple have been pushing for on the desktop for years now, it is time we removed the expertise and knowledge from the entire process altogether, thereby "enabling" and "facilitating" the hiring process.

    • by JUSTONEMORELATTE ( 584508 ) on Thursday August 22, 2002 @03:54PM (#4121414) Homepage
      Usually about 2nd-year psyc students learn about the Horoscope Study. The main reason cited by believers of astrology is that the descriptions are stunningly accurate. The trick is, they are stunningly accurate for ANYONE, not just you.

      I don't know what survey your employer used, but you spent some effort to complete the survey, expecting that a well-designed system would evaluate some qualitative aspects of you. When presented with results, you subconciously hoped to be:
      • described accurately
      • described favorably
      This subconcious desire on your part made you willing to forgive minor points that didn't fit your desired outcome, and willing to magnify points which did fit the desired outcome.

      Again, I don't know what survey you used, and there certainly are valid personality tests out there, but don't get too freaked out when one seems to describe you to a T.
  • by KirkH ( 148427 ) on Thursday August 22, 2002 @03:21PM (#4120992)
    ...if they answer "42", then hire them.
  • You cannot go wrong, when you either only hire people you know or hire people, that are recommended by someone you know to be a worthy developer. If you don't get enough people this way, you can always ask the candidate if there is someone who can recommend them.
  • The ultimate way. (Score:2, Insightful)

    by unicron ( 20286 )
    Remember, the worse he looks, the smarter he is.
    • Remember, the worse he looks, the smarter he is.

      I'm a frikin' genius!!

  • My Mommy? (Score:4, Funny)

    by Master Bait ( 115103 ) on Thursday August 22, 2002 @03:22PM (#4121000) Homepage Journal
    I was interviewed at Adobe Systems a long time ago, and one of the people asked me if I liked my mother.

  • by CrazyJim0 ( 324487 ) on Thursday August 22, 2002 @03:22PM (#4121003)
    Give them a real project that will take a week or a month to complete. If they do well, offer them a full time position.
  • when I interviewed here, they asked me stuff like, if i owned weapons and would i attempt to sabatoge the CEBAF accelerator. apparantly they got "bad vibes" off of me. they hired me anyway. Go figure.
  • by Jucius Maximus ( 229128 ) <> on Thursday August 22, 2002 @03:22PM (#4121008) Journal
    Were they reading slashdot at work when they should have been programming? I think that this could have been a drain on productivity and perhaps justification for you to discipline them because [...] uh, wait a sec a minute ...

    /me closes the browser window

    • "Unfortunately, we've been burned a couple of times by people whose performance didn't measure up to what we expected from the interviews. So I'm wondering if other people wanted to share their interviewing tricks - how do you find out if someone is a good programmer?"

      By 'performance not measuring up,' do you mean that they simply did not know how to build what you wanted to build? Were they not fast enough? Did they not build stuff according to your specifications?

      Please explain how you determined that they were not 'measuring up to standards' !

  • by PGillingwater ( 72739 ) on Thursday August 22, 2002 @03:22PM (#4121009) Homepage
    Well, as someone who has programmed since 1972, and who regularly hires programmers, I recommend the following:

    Ask them if they write code as a hobby

    What Open Source projects have they contributed to?

    Ask them to bring some samples of source code they've written, and then do a walk-through

    Ask them to solve a simple exercise with pseudo-code, then explain which language they would choose to implement it and why

    Get them to find a known bug in some code that matches your "house style" (describe the unintended behavior)

    Talk to their previous associates and boss....


    • by poot_rootbeer ( 188613 ) on Thursday August 22, 2002 @03:34PM (#4121174)
      What Open Source projects have they contributed to?

      Bad. Leading question.

      It is likely that a coder who contributes to Open Source projects will have a true passion for coding, and probably producers better code for it, but it's possible to be an excellent coder and not participate in OSS projects.

      In fact, it's possible to be an excellent coder while being morally opposed to the entire concept of Open Source...
      • exactly. in fact, the kind of programmers that are likely to contribute to OSS projects are probably those that CAN'T find a job so they contribute in their spare time. the more satisfied programmers were with their previous jobs, the more likely that they would not have participated in outside (ala OSS) projects

    • by dschuetz ( 10924 ) <> on Thursday August 22, 2002 @03:57PM (#4121446)
      This seems about the best answer I've seen so far. But there are still some shortfalls that I think might be problematic.

      Coding as a hobby definitely demonstrates a personal interest in programming, and a willingness to spend the time (my own time, no less) to learn whatever it is I'd need for that hobby (and, hopefully, the ability to use what you learn).

      Samples of source code are sort of good, but the applicant might only be able to bring "hobby code" from home (because the 'good stuff' belongs to his current company), and that probably won't be as well refined as the stuff you do professionally. Though it also might be more cool, elegant, or just innovative, depending on what work's like (you're leaving, remember?)

      Actually going to a whiteboard to solve a problem seems about the best way to gauge an applicant, in my not-so-complete-interviewing-experience. You're getting the most real-world example of the applicant, with peers, discussing and analyzing a problem, then sketching an outline for how to solve it. The details (which language, what modules, should you use pointers here, etc.) seem (to me) to be irrelevant. You're hiring someone to solve problems -- so, solve a problem, with the team, just like you would on a normal work day.

      However, a couple of other suggestions seem like they wouldn't work. Asking about open source involvement just measures someone's interest in the open source community. Plenty of people (including myself) do a lot of programming at home, for fun, on projects that are primarily of interest to no-one but the applicant.

      Finding a bug in sample code might work, if it's a small enough sample (like a simple routine), but there you're treading too close to testing for book knowledge ("Ah! You forget that the squiggle goes on the LEFT of the arrow!"), and book knowledge generally flees an interviewee at warp speed as soon as they set foot in your building. (Plus, that's why we *have* books, and man pages, and CPAN, and....)

      Finally, talking to associates and bosses is tough, especially in a tight job market where someone might be afraid to even *suggest* that they're unhappy, for fear of being laid off and replaced with someone desparate for work off the street.

      I don't know. I hate interviewing people. I hate *being* interviewed even more. I'm just not sure there is a good way.
    • Paul,

      I've been in this biz only a little longer than you have and agree with your approach.

      A couple things I've noticed about the better programmers I've worked with/hired are:

      Most play a musical instrument of some kind.

      Most enjoy and are good at strategy type games such as chess and go.

      Left handedness seems to be higher than in the general population.

      They do crossword puzzles.


    • by dcavanaugh ( 248349 ) on Thursday August 22, 2002 @04:59PM (#4122062) Homepage
      I think your strategy is a good one.

      Building on your ideas, I think it's important to avoid asking a question while simultaneously giving away the answer. Some interviewers might ask "Do you code as a hobby?" but I would rather say "Tell me about your hobbies", at which point I am listening for things related to coding. If I hear something interesting, then I ask a follow-up question, where I attempt to find out of the candidate has what I want. Along the same line... "Tell me about: "
      • your past/current job
      • projects you worked on
      • your role in those projects
      • a project that failed -- what went wrong? -- what did you learn?
      The whole process needs to be more of a conversation, not a TV game show. The facts are to be extracted from what the candidate says. The most valuble information is what you get by reading between the lines.

      Asking for a code sample is a good idea, as is the debugging exercise. The pseudo-code exercise has merit, but it has to be simple enough to stay within time limits. None of these things will identify the best candidates, but it will surely identify the worst.

      I am always amazed to see hiring managers that are over-relying on credentials and memorization-style questions. Some of the most talented IT people I ever met are those who came from non-traditional educational backgrounds -- essentially people who fought an uphill battle to get into the IT dept. and an even more uphill battle to get promoted.

      Somewhere along the way, hiring managers forget that a good programmer is not the person who can memorize the syntax of a language, it's the person who can learn something new by spending 5 minutes with a manual and crafting a crude-but-workable piece of code that can be later refined and used in a project.

      The programmer can be compared to a composer. Essentially, we want a person who can write a song, and play it for us on a piano. We want a good song; the ability to play piano is secondary. The hiring process tends to produce highly qualified piano players who have degrees in music and have memorized hundreds of other peoples' songs. It sounds great when they play, but they can't write a damn thing for themselves.
  • Get them to code... (Score:2, Interesting)

    by cjustus ( 601772 )
    Sit them at a computer and get them to code... I haven't been there recently, but [] had an excellent setup with "practice rooms" - past problems that could be solved in under an hour...
    • by amuro98 ( 461673 ) on Thursday August 22, 2002 @04:16PM (#4121667)

      I hate, hate, hate, hate, *HATE* programming questions during interviews.

      I'm nervous enough as it is without having to spew code on demand. If all you want is a mindless spewer, buy a coding-tool. They're cheaper and don't require benefits.

      Personally, I'd rather be involved with design and architecture.

      At one interview someone asked me about how I'd do something with a linked list or somesuch, and I asked him why was he using a linked list for something that'd be better off in an array?

      That stopped him cold for a second... He asked why I'd use an array instead of a linked list and upon hearing my answer he put his list of prepared questions and put them aside. "Finally!" he exclaimed, "Someone who's *thinking*!"

      Unfortunatly I didn't get the job...the company laid off 20% of its employees the next day.

      In another interview, I was asked another coding question. My solution worked, but didn't match what the interviewer was looking for. In fact, I poked a few holes in their "correct" answer. Didn't get that job either. Rule 1: Don't piss off your interviewer...

      Anyways, this is why I don't like having people write code for an interview. It doesn't tell you a lot, and usually just unnerves them even more.
  • by TheConfusedOne ( 442158 ) <> on Thursday August 22, 2002 @03:23PM (#4121015) Journal
    Here's the real thrust of your problem. You need to define a "good programmer" then you can interview for it.

    There are, of course, a whole range of programmers from the code pounder to the system architect. Are you looking for someone who will produce tight code from a very well defined set of specifications? Are you looking for someone who can take a general "we'd kinda like this" and create code?

    How were you "burned" the previous times? Did the interviewee misrepresent themself or did the project turn out to be different then what you were trying to fit the person into?

    Another thing to remember when interviewing potential candidates is to look at your current staff and see if you can promote one from inside. That way you can interview for a more entry-level/well-defined position and increase morale by advancing your current employees.
    • The real answer (Score:4, Insightful)

      by Anonymous Coward on Thursday August 22, 2002 @04:14PM (#4121645)
      I've been doing this for 25 years. A "good" programmer is a productive programmer, as needed, in the context of the problem. In other words, a good programmer adapts to the skill set needed to solve the current problem. This changes drastically from problem to problem.

      The *only*, absolutely, unquestionably the *ONLY* way to evaluate a programmer is based on direct past experience with them. There is NO OTHER WAY!!! Everybody is completely fooling themselves with all the dumb little tests and riddles and IQ tests and evaluations. It is absurd. Hire programmers, evaluate them for a couple of months, and if they do not work out LET THEM GO. During this recession there are many more deserving programmers that need jobs. During an expansion is also a good time to let unproductive programmers go, since they can find a more appropriate position easily.

      There are a few magical people who actually can evalute programmers based on an interview. These people do not use any tricks -- no tests or riddles or exams or anything. They just talk to the person for awhile, and they seem to always make the right decision. This is not a skill that can be taught or explained -- some people have it, the rest of us never will. If you can find a good manager like this, hire them, and your company will have guaranteed success. (There is a little recursion going on here, granted, but in the long run things either work out or they don't.)

      All of these "interviewing methods (TM)" are arbitrated by people stoking and strutting their egos. Why can't you just admit that you don't know the answer sometimes?

  • by perrin5 ( 38802 ) on Thursday August 22, 2002 @03:23PM (#4121019) Homepage
    The interview process is a TERRIBLE way to hire anyone. Unfortunately, it's also pretty much the best way. (I will allow others to argue the logical consistency of the above two statements) I would consider myself an excellent employee, and barring the occasional "brain break" of playing a computer game or two, I think I'm pretty productive. The problem is I am a terrible interviewer.

    My personal opinion of interviews is that you should be interested in 2 things:
    1) do they know what you want them to? and
    2) are they good workers.

    The problem is that people try to add any of these criteria:
    3) do you LIKE them?
    4) Are they professional enough?
    5) do they fit into the corporate image?
    6) will they stick around?

    None of which are useful for hiring employees. Sure you may not want to invite them to the company picnic, but man can they crank out the work.

    I would also like to point out that "productivity" is overrated, unless you are ranking on a scale normalized for "quality" of program (quick scale = lines of code/errors found later)

    just my rant for the day.
  • easy (Score:5, Funny)

    by Casca ( 4032 ) on Thursday August 22, 2002 @03:23PM (#4121023) Journal
    Interviewer: Who won the superbowl last year?


    Interviewer: What do you do for fun outside of work?


    Interviewer: Hmm. What do you look for in a woman?


    Interviewer: Great then, one last thing we need to check...


    Interviewer: Ok then, see you Monday.
  • Ask them when they would implement a balanced binary tree as part of a solution to a problem. The correct answer is "never". You would never want to implement one, since it is so much of a pain in the ass and is so prone to error. In the real world, when you want a balanced binary tree you use someone else's implementation (e.g., STL). Any programmer who would implement one himself is likely to waste too much of your time and money.
  • by wackybrit ( 321117 ) on Thursday August 22, 2002 @03:25PM (#4121041) Homepage Journal
    The original posters questions and theories are a little weak. Testing a programmer's skills in constructing algorithms for random scenarios is a great idea.. if they need to use lots of algorithms.

    The key to interviewing is to scope out the person's general work ethic, overall personality, and how well the person can do the job they have applied for. That's it!

    In previous Slashdot threads we have learned that it's not wise to sit programmers down with a pen and paper and get them to write C code on the fly! Yet... the interview techniques you are mentioning are a lot like that.

    Getting people to 'think on their feet' is good, if you're just talking concepts and ideas, but don't expect people to get things 100% right sitting at an interview table. These guys are programmers, not TV evangelists with all of the answers at the tip of a hat.

    From the sound of your post it seems like you have interviewed people, found them to be great at algorithms and answering your questions, but then have found their work ethic stinks or that they're not as ingenious as you thought they were. That's because you assume that someone who can answer questions quickly and proficiently is a good programmer. Wrong!

    Instead, look out for programmers who list extra-cirrucular projects on their resume. Look for programmers who have worked on their own projects, and can demonstrate them for you. Would you rather employ someone who coded a great deal of Gecko, or some gimp who can answer your algorithm questions?

    Look for people who don't need incentives to work, but those who will program whether they get paid or not! Those are the people who will stick with you, and aren't just learning new languages to make a quick buck.
  • by JTFritz ( 15573 ) <[jeffreytfritz] [at] []> on Thursday August 22, 2002 @03:25PM (#4121043) Homepage Journal

    It seems that we have a collection of these articles and comments in our little community. CmdrTaco, why not put together a new section with a theme of Technical Recruitment.

    Perhaps this new section could include these helpful questions and resources following the current re-education and recruitment techniques of the industry.

    Any thoughts?
  • by foxtrot ( 14140 ) on Thursday August 22, 2002 @03:25PM (#4121047)
    If you're interviewing the programmer, you somehow got pushed up to management and are screwed already. :)

  • Joel's got help (Score:2, Informative)

    by Arjen ( 52387 )
    Joel (of Joel on Software [] fame) has an interesting article [] about interviewing, entitled The Guerrilla Guide to Interviewing. The name is self-explanatory, I guess.
  • by JMZero ( 449047 ) on Thursday August 22, 2002 @03:27PM (#4121069) Homepage
    ..for the most part. Most programmers with some sort of qualification can get your jobs done, unless your jobs require some amazing degree of skill. I probably couldn't write you out a bug free Quicksort first try, but I could certainly implement it in a real project.

    And to be honest, most projects don't require skills nearly that nebulous. How many projects today are: get the data off the screen, validate it, then create the invoice.

    The bigger question is whether they'll actually work hard on their jobs, or just play on SlashDot all day. And I don't know how to interview for that (and obviously neither do my employers).

  • by Darth Maul ( 19860 ) on Thursday August 22, 2002 @03:27PM (#4121075) Homepage
    At my company, since we're small, we need to know that new developers will click quickly. We do a technical paper exam (one hour) with some standard programming/algorithm questions. We then do a few riddles and logic puzzles. These are the best way to test raw intelligence, IMHO, since you have to think abstractly and quickly. We then do a few more design questions at a white board to test their skills at high-level design and diagrams.

    However, the one thing that is difficult to test but really seems to be the deciding factor of a new hire "working out" or not, is whether or not they have the "passion". One way we try to determine their take on programming (just a job vs. a fun hobby) is to ask them to describe one software project that they have developed on their own time (not on the job or necessarily part of schoolwork). It's amazing how few actually code for fun or just to continue the learning process.

    We then ask them what their favorite joke is just to jolt them a bit and see if they have a sense of humor. Most people fail this question, unfortunately ;-).
  • by Kenja ( 541830 ) on Thursday August 22, 2002 @03:29PM (#4121093)
    Based on some psycho developers I've worked with, I would recommend checking their grasp of reality in the interview.

    Some example questions would be.

    Which compiler do you prefer?
    1. GCC
    2. Visual Studio
    3. Small furry rodents are chewing my eyes out from the inside
    4. Metrowerks

    Complete the sequence. 2, 4, 8, 16, 32, 64
    1. 128
    2. 256
    3. 512

    Are the voices in your head loud enough to disturb your coworkers?
    1. Yes
    2. No
    3. How do you know about the voices?
    4. What voices?
  • by The Wing Lover ( 106357 ) <> on Thursday August 22, 2002 @03:31PM (#4121138) Homepage
    Work was interviewing somebody for a non-technical position. However, he had put on his resume that he knew HTML. The company's president (we're really small), who was interviewing him, quickly came to the conclusion that he didn't know a thing about HTML, but he wanted to see the guy sweat. So he said, "Here's my computer; I'll be back in 10 minutes. I want to see a web page".

    Well, 10 minutes later, the president came back in the room, and there was a web browser displaying his creation -- a single sentence, "Hi Tim, I wrote a web page" in bold and italics. Up on the screen were other web browsers containing internet searches about basic HTML, as well as the output of "view source" from one of our web pages.

    Three years later, this guy is still with us, by far the best customer service manager we've ever had.

    I guess the point is, give the person a puzzle that you know that they have no idea how to solve, and give them the resources to figure out how to solve it, and see what they do.

  • simple (Score:3, Insightful)

    by tomstdenis ( 446163 ) <tomstdenis@gm a i> on Thursday August 22, 2002 @03:33PM (#4121159) Homepage
    seek honesty not perfection.

    Ask questions of humility. That should be a good indication. Honest people will have no trouble telling you of their past mistakes and faults as well as their strengths and abilities.

    If someone only tells you all the good they've done [e.g. positive outcomes] then they are either a miracle or holding things back.

  • by adamjone ( 412980 ) on Thursday August 22, 2002 @03:34PM (#4121172) Homepage

    I've been on both sides of the interview table, and from what I can tell, most interviewers fall into the same trap: focusing too much on detailed technical questions. In reality, your programmers are going to be involved in much more than writing eloquent solutions to programming problems. Your programmers will most likely be involved in project management, project design, project implementation, project testing, and project deployment. Be sure not to get wrapped up in asking too many questions like "how many bytes in a java int?" Instead, look for good all around problem solvers. Ask about their design experience and what tools or resources they have used in designing previous projects. Ask how they would handle testing when a project has been under-quoted. These are questions that good problem solvers will be able to answer quickly, and those who "studied" for an interview will not. It will give you a much better idea of how your potential employee would work out in your business. Be sure that your interviewee will not only be a good programmer now, but also in the future when your development tools change.

    Another useful tool for an employee interview is to have a break for lunch with a group of your staff. This will give you and your staff a chance to meet the interviewee in a less structured environment. Many times, an interviewee will relax a bit during your lunch, and you get a much better idea of the person's attitude. Someone who answers technical questions very well may turn out to be a social dunce. Or you may find that the person doesn't share the goals of your company. It will also give your staff a chance to find out if they fit in with the group.

    If you don't feel satisfied without asking some technical questions, be sure to ask questions which apply to your framework, and not necessarily the programming language you use to implement that framework. For instance, if you design using Object Oriented principles, ask about "has a" and "is a" relationships. The idea is to ask questions that are still relevant if you change languages from C++ to Java or to some other language.

    Using some of these ideas, my company has been able to easily pick the good candidates from the poor ones. YMMV: good luck!

  • by kfg ( 145172 ) on Thursday August 22, 2002 @03:46PM (#4121331)
    How many people have you rejected that would have turned out to be the best people in your company?

    I'll bet the answer is well over 'one.'

    You're looking for a magic bullet. A simple mechanical reduction of human issues. It doesn't exist.

    The only sure fire way I've ever found of evaluating an employee is to give them something to do and see how it works out, bearing in mind that often times a person with mediocre skills turns out to be a very valuable employee and those with great 'creds' often turns out to be nearly worthless. That's why God invented the probationary period.

    To get a better look at what I'm driving at here take a look at another flip side. *You* are asking this question because you are performing less than 'perfectly' at evaluating prospective employees. Why? Because you're humans. You yourself are too complex to easily reduce your performance to a repeatable, mechanical formula.

    It is always, ultimately, no matter what interview and evaluation process you impliment, going to come down to what it has always going to come down to, an educated guess and a gut 'feel.'

    And you'll make mistakes, you'll hire people you shouldn't have, and *you'll let go people you should have kept.*

    Thus it has always been, thus it will always be, as long as it's people we're dealing with.

  • by nadador ( 3747 ) on Thursday August 22, 2002 @03:50PM (#4121373)
    that you're interviewing programmers, aka code monkeys. They might dance, but they will never perform. You'd probably like an engineer or a scientist. How you interview for them is totally different.

    I worked for a startup company back when it was the cool thing to do. The nerds with titles were debating how to interview for a new position, and the battle came down to this essential problem - which is the best question:

    1. What is java.lang.Thread.join()?
    2. Tell me about how you start and stop different execution paths in a multithreaded application.

    If you ask (1), you get a code monkey. He or she will write good code when given proper instruction because he or she has a minimum set of skills. Code monkeys can handle hammers and screwdrivers because they've used them before. Ask them to use, say, a quarter sheet finishing sander and they will be confused.

    Ask (2), and you get an engineer or a scientist. Knowing that you can wait for the termination of a thread in java with join() is nice, but understanding the implications and uses of join() is ten thousand times more important. Understanding the concept is more important than perfect syntax.

    My suggestions for questions are these two, because I think you are less likely to pick a code monkey and more likely to pick an engineer:

    1. Tell me about a project you are particularly proud of, and explain some of the technical issues you faced in finishing it. (This is a good question for several reasons. First, you get a good sense of interpersonal skills, because they have to tell a story. You also can gadge a candidate's general interests in the larger field of computer engineering/science, and a feel for their particular strengths. Lastly, you get to see whether this candidate is a finisher or a ship-it-when-it-compiles person because you asked about finishing a project, which is never the most glamorous, but frequently the most important part of being a software engineer.)

    2. Tell me about a project you worked on with a team. What kinds of challenges did you face and how did you solve them? (Again, story telling, this time with a definite bend towards interpersonal skills. You also get to assess team work skills, etc., in a technical environment. When I was asked about this question I talked about how my junior design project team needed to be more organized to meet our project schedule, so we got stricter about version control, documentation, etc. If the candidate tells you story about this irritating person or that jerk, you should consider whether or not you're going to be the jerk he talks about in his next interview.)
  • by StevenMaurer ( 115071 ) on Thursday August 22, 2002 @03:52PM (#4121398) Homepage
    1] Describe the technical accomplishment you're most proud of.

    2] How did it work?

    3] What did you do on it?

    4] At our company, we have this general problem X. What are your first thoughts on how to solve it?

    5] How would you rate yourself in (language)?

    6] A language specific question. For instance in C, what does "volatile" mean? For C++, write code whose meaning would change if you used the keyword "virtual" in front of a base class. (Note: passing the test is nowhere near as important as that it generally matches with the answer under #5).

    7] (Note: several questions may be done in this area - again, it is more important that skills are accurate on the resume than everything is done exactly right.)

    8] Say you have a technical disagreement with a fellow programmer, and you really think you're right. What are the steps you'd take to resolve it?

    9] What sort of software tools are you familiar with? How to you coordinate development with other engineers?

    10] What are the things you expect from the company for us to make you happy?

    I have noticed in interviewing that engineers can easily spot other good engineers. If you can't, it's because you can't program yourself. So go get someone with the skills to do your interviewing for you.
  • DO's and DON'T's (Score:5, Insightful)

    by mactari ( 220786 ) <> on Thursday August 22, 2002 @04:04PM (#4121535) Homepage
    DO ask for demos of working apps from previous jobs/schools. If they don't have anything working to show, they can't take a project, even a simple one, cradle to grave. You want self-starters who don't need constant supervision.

    DO NOT make them solve brain-teasers on the spot, regardless of what might say. I love brain teasers personally, but trying to get all the members of U2 across a bridge two at a time doesn't exactly translate. Reread number 1, and if they gave you their stuff, you're safe.

    DO ask them to review code from your shop and tell you what they'd do differently. Whitespace, comments, logic that should be pulled into functions or other objects -- these are the kinds of things a good programmer will notice. A good potential team member will even point them out, point blank.

    DO NOT discriminate because they haven't programmed in your particular programming language, unless the work is very short term. They're all dialects of the same language. Good code is good code, even VB! (Note that I didn't say "working code" -- I *mean* good, commented, well laid out, non-repetitive code) The only exceptions are pointers and object oriented code. Some people just can't get it. Test them [by showing them code to review] if you use either.

    DO look for someone who gets passionate about a topic during your interview.

    DO NOT for one second think that someone who claims they have 10 years experience in C, VB, Java, and FORTRAN means it. Ask what they've done which each language. If they can't tell you in enough detail that you can envision it, that's a "no hire".

    DO, for heaven's sake, call their references.

    And most importantly (and this is something olde Joel gets right), "Maybe" means "Don't hire". If you can't strongly recommend the candidate after the interview, don't hire him/her. Mistakes at hiring time will cost you for months and maybe years. It's worth spending the extra month or two to find someone worth their salt. Oh, man, it's worth it.
  • by Jack William Bell ( 84469 ) on Thursday August 22, 2002 @04:08PM (#4121578) Homepage Journal
    There seem to be lots of good responses here, many of which I have used myself in the past. But no-one has mentioned my favorite; the 'Toilet Tank Test'.

    The 'TTT' is designed to find out if the person thinks about programming off the job, if programming excites them and just doing it is enough to motivate them all by itself. It works like this:

    (After technical, logic puzzle and attitude questions are dealt with)

    -- First Interview --
    INTERVIEWER "OK, so let's suppose I walk into your house and go into your bathroom right now. What magazines would I find on your toilet tank, or wherever else you keep magazines you read often?"

    INTERVIEWEE 1 "Uh... Golf Digest, Sports Illustrated, People I guess." (Doesn't mention Penthouse.)

    INTERVIEWER "Thank you for your time. Don't call us, we'll call you."

    -- Second Interview --
    INTERVIEWER (asks 'TTT' question)

    INTERVIEWEE 2 "Uh... Linux Journal, Dr. Dobbs, Game Developer I guess." (Doesn't mention Penthouse.)

    INTERVIEWER "When can you start?"

    Jack William Bell
  • by bevan.arps ( 78909 ) on Thursday August 22, 2002 @04:10PM (#4121602) Homepage
    In a corporate development environment, you don't want someone who can only write code based on what they already know. You want someone who can accept a task requiring skills they don't already have - yet deliver quality anyway.

    The old adage about "if all you have is a hammer, everything looks like a nail" is what I'm going on about here.

    If your candadate only knows one thing ( Java or Delphi, or C++) be wary.

    If the candidate knows something useful about a wide variety of things (Java, Delphi, C, C++, shell scripting, XML, XSL, HTML, CSS, Perl, Python, Ruby, batch files, SQL, XQL, servlets, JSP, ASP, PHP ...) then you have a candidate that has a variety of tools in their skills toolbox.

    Before anyone chimes in with the old myth "you can only know one thing well" - I agree completely, you can only be an expert in one or two areas. But you CAN know a dozen (or two) things well enough to know which to use - one of the brightest developers I've ever met was a guy smart enought to say "I shouldn't do this - it needs X and I don't know it well enough. Give this to person A and I'll pick up what they are currently doing." This same guy scored 100% on the Java certification exam - he's that good.

    Ask your candidate what tools they know - from what vendors. Don't settle for one or two - keep pushing for as many as they mention. Ask them to explain how they would choose between tools - if needed, give them a scenario or three.

    One of the things you're trying to find with this approach is how well they might understand the principals that underly the languages - just as you wouldn't ask a fish about water, you can't ask someone who knows only one tool to critique that tool.

    Another idea is to get your candidate to give a five minute off-the-cuff presentation on something interesting. Limit it to stuff relevant to the position you're interviewing for, but otherwise leave it open for the person to choose for themselves. They'll choose something they know well - look for how they speak, how well they explain, how well they teach. Also shows how they work under pressure.
  • pairing (Score:4, Insightful)

    by GutterBunny ( 153341 ) on Thursday August 22, 2002 @04:56PM (#4122026) Journal
    Why not take your top three candidates and pair with each of them for an hour or two? Pick a task with little domain knowledge needed. Let them drive or do the majority of leading and see what happens...

    Then ask yourself (remembering that this is your first pairing with this person)..
    Did I like this person?
    Did he try to work with me or against me?
    Was he technically capable?
    Was his technique compatable with yours?
    Could he adapt to your style?
    Could I corroborate daily with this person?
    Does he smell ok?
    Did he offer to buy you lunch?
    Was he enthusiastic?

    If the answers were yes or mostly yes, then you've got a winner.

  • by DEBEDb ( 456706 ) on Thursday August 22, 2002 @05:21PM (#4122261) Homepage Journal
    Having hired several programmers who haven't worked out...

    1. ... or showered, or shaved...

    2. For myself, having hired several
    bodybuilders who haven't programmed...
  • by Ironica ( 124657 ) <> on Thursday August 22, 2002 @07:03PM (#4123123) Journal
    ... to simple questions.

    People who have "training" but lack skill or experience are desperate to show you what they know. You can ask a very simple question, and they'll throw out names of tools they think might be relevant, and buzz words they've heard. They're unlikely to give you the simplest answer.

    I once was asked in an interview for a DSL installation tech job, "if you installed a memory upgrade into a laptop, and upon boot up the new memory wasn't recognized, what would you do next?"

    I felt kind of foolish saying "Well, I'd open up the laptop, reseat the memory, and try again." But the interviewer nearly wept... he'd been interviewing people with all kinds of "qualifications" all day, and I was the first person who had given this answer. He told me how everyone else had said "Well, I'd start up Tech Tool..." or "I'd get out a memory tester and..." without even checking that the installation had been done right in the first place.

    That, of course, is not a comprehensive method for finding a good person for a job, but it might make your technical questions a little more effective.
  • by roman_mir ( 125474 ) on Thursday August 22, 2002 @07:15PM (#4123191) Homepage Journal
    and don't hire them, because not only do they read every single Slashdot article instead of working. But now they also know all the same tricks you picked up here.
  • by eyefish ( 324893 ) on Thursday August 22, 2002 @07:33PM (#4123288)
    In one of my previous companies we actually tracked engineer recomendations for new hires (i.e.: how well did a person you recommend to work at the company is actually doing after a period of time X), and after about 18 months I came up on top of the list after 98% of the people I recommended ended up being described as "outstanding".

    If you care how I can tell the good ones from the bad ones, read on.

    It all boils down to someone being proactive in learning things, entusiastic about the field he/she is going in, being able to communicate effectively, and basically have the capability to look at things in more than one way.

    In my experience the best thing during interviews is to let them talk as much as they want, you will be surprised how much you can learn from them in just a few minutes. Encourage more conversation by asking short questions along the form of "can you explain that part a little bit more for me?".

    Also, to avoid the "bullshit talker", once in a while interrupt them and ask them to described how exactly (in pseudo-code) they solved a specific problem.

    It's also a great idea to ask them to draw visual diagrams that explains how things work. This tells you a lot about the way they solve problems.

    If you have the time, place them in front of a computer and hand then a piece of pen and paper and tell them to write a made-up documentation for a fictitious project. This will tell you how well they communicate and how well they express their ideas.

    During all this, it is up to you to figure out what makes this person special from the others. Is he great at explaining things? is she great at understanding what you mean and putting it down into a design on a piece of paper? Does he come up with novel ideas to solve problems?

    That's basically it. I usually refrain (unless it is a basic requirement) from asking language-specific questions (C, Java, VB, etc), since usually a smart programmer can pick just about any other language in a few weeks, and besides, usually newcomers don't start from scrach programming, there's usually an installed based of development tools and written code which can bring him/her up to speed.

    Those are my 2cents of wisdom.

  • by teetam ( 584150 ) on Thursday August 22, 2002 @07:49PM (#4123362) Homepage
    Let us get some fundamentals clear - you interview people because your organization needs to fill some positions. This means that you should know exactly what you are looking for. After that, the interview process should be very straight-forward - just a few questions to determine if the candidates match those requirements. That's it.

    It hardly ever happens this way in real life. Many interviewers have no clue what they are looking for. Most questions are egoistic - just to prove that they know something that the candidate doesn't. Last year, a business software company asked me questions about Turing machines and the Halting problem. I answered him and further added that I had never thought about those since school and did not expect to use them at his company. So why did he ask me that? He said he just wanted to test me!

    An interview is not a quiz. If you are looking for a software developer to write Servlets, don't ask him higher math and complex algorithmic questions. Try to find out his views on software engineering itself (good practices that we all know about) and technologies related to his job (HTTP protocol, for example).

    Also, don't ask a programmer about any specific api or libraries (unless knowing that is specifically his job!).

    Don't ask him about tools ("how comfortable are you with Visual Cafe?" is a stupid question").

    And so on. Bottomline: Know what you need from him and see if he has that!

  • by CognitiveFusion ( 602570 ) on Thursday August 22, 2002 @10:31PM (#4124089) Homepage
    I found this a worthy enough read to bookmark it. The author has some good ideas about preparing for an interview and formulating a meaningful evaluation of that individual's skills beyond the basic text-book Q/A dialogue.
  • More horseshit (Score:4, Insightful)

    by bryan1945 ( 301828 ) on Thursday August 22, 2002 @10:53PM (#4124187) Journal
    I'll probably get crucified for this....

    If you have to include a "technical interview", not to mention 2 of those, then your company is shit. If your hiring manager can't get by with interviewing the guy/gal with some of his/her folks doing an informal interview (that do have some probing tech questions), then your entire structure is fucked.

    A bit ago I went through a tough time at my company, so I started out interviewing. I got 3 tech interviews that asked me questions like "what is the command to increase the frame relay delay timing", "what is the public number for public MIBs", and what are the arguments to display only workstations in a Tivoli system?"

    Give me 2 minutes with my books, I would have no problem. Expecting me to memorize all this random shit is just beyond stupid. Go find a 5th grader who memorized the nation and state capitals on the 1st try if this is what you want. If you want someone who actually solve a problem, maybe you want to hire someone who can research the problem and come up with a better solution.

    I'm still with my first company out of college. The hiring manager didn't even ask about my skills- he wanted to know if I wanted to learn, if I wanted to gain new skills, and if I was willing to put in the time to learn new stuff. Of course, I'm a DoD system and network consultant, so I need to learn and master new stuff all the time. The couple of corporate projects I've been on have so focused on one single aspect that they get a llama that can program in Java, and they still hire the llama. (Yes, that was mostly facitous).

    So go interview the guy/gal about who they are, what they want to do in life and in thier job, how they like to do their work. Don't worry about what languages they can program in (unless thi is what you are looking for), any literate computer person can learn a new language in a few days.

    In summary, look at the person, not thier certificatons and answers to crazy technical questions.

Competence, like truth, beauty, and contact lenses, is in the eye of the beholder. -- Dr. Laurence J. Peter