Slashdot Mirror


How Should You Interview a Programmer?

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?

58 of 976 comments (clear)

  1. Good question by mr_zorg · · Score: 4, Insightful

    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.

    1. Re:Good question by N3WBI3 · · Score: 2, Insightful
      as a PFY myself, I was hired because I knew how to solve a problem (my previous job and education) was in Engineering.

      You should look for that, not only do they know the man command, but that they know how to in a systemmatic way disect a problem. Finding the answer is easy if you know what the problem is.

      --
    2. Re:Good question by oakbox · · Score: 5, Insightful

      The right questions baby. Give them a problem from your production environment and see what questions they ask. Are they looking at how the product will be used by end-users (identifying the audience), can they reliably identify what other technologies will impact the project (defining the environment), can they break down the project into component parts that can be tackled in a sane way (modularizing the problem).
      These are the biggies, IMHO. This is what being a good programmer is all about.
      And poetry.
      -oakbox

      --
      Not just answers, the correct questions.
    3. Re:Good question by notsoanonymouscoward · · Score: 4, Insightful

      Give them a question they don't know the answer to (this may take a few tries). If they try to feed you some BS they're probably not a good candidate. Its always good to know you've got people willing to give the honest answer, "I don't know".

      --
      I ate my sig.
  2. just out of curiosity by AssFace · · Score: 4, Insightful

    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?

    --

    There are some odd things afoot now, in the Villa Straylight.
    1. Re:just out of curiosity by Ooblek · · Score: 5, Insightful
      People who are technical because they took school coursework that says they are technical usually can't think on their feet. This is the problem with a lot of students - they expect knowledge and a career handed to them on a plate with no additional work.

      People who have the certification and went to school plus have work experience (usually during school), reseach experience, personal projects, and possibly a track record of past successes can usually think well on their feet.

      Personally, the ones that can't think on their feet are usually the ones that can't remember how to fix a customer's tech support problem even though they've been told how to fix it at least 3-10 times already. These are usually the ones that piss the customer's off the most and end up getting me involved in a pointless conference call with the customer due to some perceived "catastrophic bug."

      The ones that think on their feet are the ones that use their own credit card to renew their company's $70 domain reg before millions of users of their free web-email service get locked out due to no resolvable DNS record. The same ones are those that pull a screw driver and make a tweak to your broadcast equipment 10 seconds after your first color TV broadcast goes live and everyone realizes all the color TVs everyone bought have a problem receiving 30 frames per second. (Now US TV gets 29.997 frames per second due to this same technical person.) Too bad there aren't more of these types of people out there.

    2. Re:just out of curiosity by Manitcor · · Score: 5, Insightful

      Interview skill like any other skill will get better over time. As you take more jobs and interview more it will get easier.

      Being a contractor for the past 7 years I have been to 100's of interviews and to be honest there comes a point when you realize that its normally the person doing the hiring that is kind of nervous or off thier game (they don't do interviews everyday normally).

      I also don't tend to think about wheather im going to get the job or not, instead I think of them as a paying client already and I try to get them into discussions about thier current enviornment, issues, future plans etc. Then I provide advice and suggestions on these things. sometime if I steer it right I can go through the interview without ever having a formal tech-out or question anwser session becasue you show your skills right away.

      --
      "Don't mess with him, he taunts the happy fun ball."
    3. Re:just out of curiosity by Amazing+Quantum+Man · · Score: 5, Insightful


      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.

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
    4. Re:just out of curiosity by ivan_13013 · · Score: 4, Insightful

      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.

  3. Riddles... by Cryptnotic · · Score: 2, Insightful

    Ask them a few riddles. For example,

    the ones discussed here

    --
    My other first post is car post.
    1. Re:Riddles... by jmccay · · Score: 3, Insightful

      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.

      --
      At the next eco-hypocrisy-meeting, count the private jets used to get to the meeting. Should be interesting to see that
  4. Hire only people you know by mikki_m · · Score: 2, Insightful

    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.

  5. The ultimate way. by unicron · · Score: 2, Insightful

    Remember, the worse he looks, the smarter he is.

    --
    Finally, math books without any of that base 6 crap in them.
  6. Show me the money.... by PGillingwater · · Score: 5, Insightful
    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....

    YMMV....

    --
    Paul Gillingwater
    MBA, CISSP, CISM
    1. Re:Show me the money.... by poot_rootbeer · · Score: 5, Insightful

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

    2. Re:Show me the money.... by dollargonzo · · Score: 3, Insightful

      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

      --
      BSD is for people who love UNIX. Linux is for those who hate Microsoft.
    3. Re:Show me the money.... by DaveV1.0 · · Score: 2, Insightful

      If the programmer has contributed to an OSS project, then the interviewers can go look at the code as an example of the quality, etc. of work created.

      If the programmer hasn't contributed, then no big deal.

      --
      There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
    4. Re:Show me the money.... by dschuetz · · Score: 5, Insightful

      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.

    5. Re:Show me the money.... by ch-chuck · · Score: 2, Insightful

      the kind of programmers that are likely to contribute to OSS projects are probably those that CAN'T find a job

      OTOH - they might be the kind of programmers that are SO GOOD that they can no only hold down a job, but contribute to public / community projects that they're interested in in their spare time. That is, an employer specifies what your going to work on, but they may have other personal interest persuits, as a self educational hobby and don't mind sharing it.

      Jeez, there's a LOT of ppl with time and talent on their hands who do community volunteer work at Hospitals, Churches, schools, scouts, election commitees, etc. - I would be leery of anyone who does absolutely nothing w/o getting paid for it. Employers used to expect some kind of participation in Lion's clubs etc just to help promote a friendly, responsible image, instead of looking like greedy bastards.

      --
      try { do() || do_not(); } catch (JediException err) { yoda(err); }
    6. Re:Show me the money.... by Reality+Master+101 · · Score: 3, Insightful

      If you are keeping your eyes open, then either your desire is just money, or something else it wrong. My guess is the former.

      I'm astounded by this attitude. Are you seriously suggesting that there is something wrong if your employees keep their eyes open? Are you seriously suggesting that if an employee is happy working for you, then there is no possibility of a better job coming along that might be more in line with what they ultimately want to do?

      Personally, I don't feel this need to hold employees in bondage and take it as some personal insult if they happen to find another job that is better for them. I don't know; maybe I'm just weird but I'm happy for people personally when they are able to find something better. Sure, it's a pain in the ass to replace people and often I wish they would stay, but I just don't feel this greedy need to hold onto every employee at all costs, and think "that ungrateful, disloyal bastard!" if they happen to find something better.

      To be honest, it sounds like you (whether you think you do or not) look at employees as chattel who shouldn't dare to think their might be something better than what you offer. Maybe you should expand your outlook a bit and think that maybe employees are human beings with their own disires and ambition, and your job offering may not match what they ultimately want.

      --
      Sometimes it's best to just let stupid people be stupid.
    7. Re:Show me the money.... by banda · · Score: 3, Insightful
      So applicants showing those traits are a subset of the set of (likely) good programmers.

      Wouldn't it be more effective to identify the superset, thus ensuring that you don't overlook good programmers who don't meet your more restrictive criteria?

      Identifying the subset exposes you to the following risks:

      Your subset includes only the least qualified of the applicants

      Your subset doesn't identify any candidates at all

      You're mighty quick to attack other people's logic skills, there, partner.

    8. Re:Show me the money.... by MisterBlister · · Score: 3, Insightful
      If you don't like the GPL, you don't get hired.

      Haha, like anyone with a brain would want to work for a company with that attitude? Especially since you'd have no money to pay them since everyone knows you can't make money by giving away free software!

    9. Re:Show me the money.... by cduffy · · Score: 3, Insightful

      And if you see writing code in your spare time as "another evening in front of the screen", you probably aren't a Real Programmer (or whatever terminology one wishes to use to refer to those with true mastery). That's not horrid -- there are lots of folks who write good code from 9 to 5 and then stop, but of those whom I count among my betters, a great many of them still do all-night hack sessions after work -- despite having a family and kids and all the obligations that entails. Not that late-night hack sessions are a requirement either -- but a love for the work is, and contributions to OSS are one way to help measure that.

      Of course, there are also lots of folks who do contribute to OSS and aren't quite godlike in their skills (yours truly among that group).

      I'm not going to not hire someone because they haven't contributed to OSS on their own time -- but it's still a reasonable question to ask, as long as it's only one indicator within a larger evaluation process.

      Finally, let me mention that most of the open source work I've done has been while employed. Indeed, I'd estimate that over half of my contributions to open source have been done within the context of my job (my present employer is in the embedded Linux business). Most of the major contributors to Linux/MIPS, Linux/PPC and gdb (and probably many other projects) also do so professionally, not on their spare time and certainly not on account of being unemployed.

    10. Re:Show me the money.... by Ironica · · Score: 3, Insightful

      Wouldn't it be more effective to identify the superset, thus ensuring that you don't overlook good programmers who don't meet your more restrictive criteria?

      Not usually.

      Logic is all well and good, but for those who haven't noticed, it tends to break down a bit where human beings are concerned. When we are in a position of evaluating other people, we necessarily rely on certain prejudices based on our prior experiences or information gained from other people. In some cases, the prejudices are unjustified (eg: I don't like people with beards because I was mugged by a guy with a beard once) and sometimes, they are justified (eg: among the people I've worked with over the years, the ones who are willing to correct me tend to be more intelligent and resourceful). Regardless of the genesis of the prejudice, however, you will *always* eliminate some people who otherwise fit your criteria.

      The reason we do it this way is simple: because we just can't cope with too much information. The nature of our brains is such that we *have* to simplify input in order to analyze it. We seek patterns (that sometimes aren't there), we prejudge based on past experiences (that sometimes aren't valid), and so on. This is a *human* thing, not a logic thing.

      Ideally, I suppose, we should sit down with a committee, come up with all the possible criteria, weight them for a particular position, give the prospective applicants a detailed questionnaire based on the list, enter it all into a database, and have a computer sift through it all to find out who is the BEST applicant for the position. Unfortunately, we're likely to forget something... and that approach doesn't leave room for the applicant to add some surprising detail that puts them over the top.

      So until our brains are significantly augmented, we're going to continue using "illogical" methods to cut down the amount of information we use in making decisions. Address complaints to the psychology department of your local research hospital.

      --
      Don't you wish your girlfriend was a geek like me?
  7. New Slashdot Section? by JTFritz · · Score: 5, Insightful

    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?
  8. Hiring a programmer by 2names · · Score: 2, Insightful
    I can tell you one way you absolutely SHOULDN'T interview a programmer:

    "Here's a piece of paper. Write me a program that does ."

    I actually had a guy do this to me. I'm a very good programmer, but I don't keep syntax of every language I've ever used in my head, that's what REFERENCE BOOKS are for.

    Find someone who understands logic, flow, analysis, etc. and is also good with people and you will have found yourself an excellent programmer. Getting hung up on syntax memorization is retarded.

    --
    "I'm just here to regulate funkiness."
    1. Re:Hiring a programmer by amuro98 · · Score: 3, Insightful

      I'm glad to see at least one person thinks syntax memorization is stupid...

      Can't tell you the number of times I've been asked to scribble down some code only to have the interviewer say things like "you missed a semicolon here" or "you got the arguments backwards."

      At one point I told him that's what the compiler is for, but he didn't appreciate that... Seemed to think that syntax == algorithm, therefore bad syntax == bad algorithm == bad programmer.

  9. Asking the wrong questions by leibnizme · · Score: 2, Insightful

    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.

    "Is friendship inherited?" is just a bad interview question. Are you looking for specific programming languge knowledge, or the knowledge to search for answers? "How would you find out?" indicates the latter. Phrase the question accordingly: "If you wanted to brush up on friend classes, where would you turn?"

    Depending upon the skill set you're seeking, algorthimic questions should be of an appropriate level of difficulty. "Given 1-10, with one missing..." is a question my mother could answer without any knowledge of computer science. If you want to check for algorithmic understanding, pose a graph problem. They're easy to visualize and easy to describe. You should get some stock answers like Dijkstra's or BFS or Kruskal's... Then ask for the person's own algorithm to see how he reasons through the problem and modifies his approach. This helps test for intelligence and flexibility in thinking.

    As for testing team skills, pose both hypothetical questions and real-life questions. "What would you do if a person in your team was not pulling his weight in a project?" "Describe a time in your life when teamwork was essential. What were some problems you encountered?"

    In general, the best thing you can do is force the person to talk. Not just simple, short technical answers, but stories and long "essay" answers. You shouldn't ask specific details about C++ ("In a switch() statement, how you specify the default case?") but general questions ("When would you use a switch() statement?"). Of course, you would want to ask harder questions, but you get the idea.

    The best interview I had was with the CIA (Central Intelligence Agency). Did they care about my technical skills? No. They had my resume and my transcript. Every question got me talking about myself. "Tell me about a time you failed" separates the men from the boys. And you get a good sense of who this person is... which is the goal you're really seeking.

  10. simple by tomstdenis · · Score: 3, Insightful

    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.

    Tom

    --
    Someday, I'll have a real sig.
  11. Don't Focus on Quiz Questions by adamjone · · Score: 5, Insightful

    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!

  12. Re:easy by Anonymous Coward · · Score: 2, Insightful

    I agree with this post.

  13. Interviewing Programmers by Anonymous Coward · · Score: 1, Insightful

    Having been on both sides of too many interviews, the best process I have seen is Art & Logics. They require applicants to write a short program using a class they provide. The first "test" of the interview is to see the applicant's response to the class not compiling. If the person write HR asking for a working version, the process is terminated. Besides getting a feel for the applicant's nature, the fix requires a knowledge of the c++ preprocessor. After getting past that hurdle, the applicant is free to design/code the program as they see fit. (They are required to follow certain coding standards). Once submitted, it is reviewed by senior programmers. Those that have done a nice job are then provided an in person interview. By this time, the employer already knows quite a bit about the applicant. As one who hates technical interviews (ie: Microsoft's), I actually enjoyed Art & Logic's. It provided a non-threatening environment that allowed for creativity while being able to learn about my technical abilities. See: www.artlogic.com

  14. Leading Questions and love for the work. by Anonymous Coward · · Score: 1, Insightful

    Ask questions that allow you to ask "why".

    For example: 'Given the following scenario blah, blah, blah, what type of data structure/class would you use?"

    When they answer with Tree/Hash etc. Ask them why they picked that answer. Ask for the logic behind the decision. Most people in the field have either read enough/heard enough in school to scam their way through multiple guess, yes/no type questions. But its hard to fake your way through good thought processes. For every "reason" they give, you also have another option to say "why" or "what about an alternative"...In general the "whys" are more important than the "hows".

    Ask what the person does with their home computer.
    If they don't use a home computer for anything useful (i.e. more then email/games) its much less likely that they enjoy their work than one who uses their computer for other things. Do they write code of ANY kind at home? Do they tinker with the hardware. Do they run *Nix or something else other than Windows?

    Ask what they do for fun. Someone with no social life may be productive but will probably cause you other problems because they wont play well with others. They'll be an outcast (i.e. no communication) or they'll just creep people out so that no one wants to deal with them.

  15. And the almost always overlooked flip question. . by kfg · · Score: 5, Insightful

    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.

    KFG

  16. The problem appears to be... by nadador · · Score: 5, Insightful

    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()?
    or
    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.)

    --

    Outside of a dog, a book is a man's best friend. Inside a dog, its too dark to read.
  17. My top ten questions... by StevenMaurer · · Score: 5, Insightful

    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.

  18. DO's and DON'T's by mactari · · Score: 5, Insightful

    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 joelonsoftware.com 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.

    --

    It's all 0s and 1s. Or it's not.
  19. Re:Interviewing Programmers 101 by beme · · Score: 2, Insightful

    Just a comment on the extra-curricular stuff on the resume. I've heard that often HR-types look for that stuff as weed-out criteria, indicating that the person doesn't have enough "real-world" experience and they needed to fill out the resume. Stupid, I know, but you often have to get past the stupid folks before you get a shot at a job.
    From my experience, upwards of 90% of jobs come through references anyway, and the interviews are just checks to make sure you're a functioning human being.

    --

    -beme
    1971
  20. Re:Our interview process by jandrese · · Score: 5, Insightful

    I know the Joke thing would get me. There's no way I'd tell my best jokes to my employer (they just aren't workplace safe), much less my interviewer. Besides, you probably don't want to hear some of the jokes I make to myself when I go out to interview, they aren't very flattering to the employer or interviewer.

    --

    I read the internet for the articles.
  21. The 'Toilet Tank Test' by Jack+William+Bell · · Score: 4, Insightful

    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

    --
    - -
    Are you an SF Fan? Are you a Tru-Fan?
  22. Don't Ask "What", ask "How" by bevan.arps · · Score: 5, Insightful

    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.

  23. Re:Our interview process by Hoi+Polloi · · Score: 5, Insightful

    After working on computers for 8hrs+ a day I don't feel the desire to go home and code some more. I'd say you should be doing something else at home to keep your interests varied unless you want to hire single minded fanatics.

    --
    It is by the juice of the coffee bean that thoughts acquire speed, the teeth acquire stains. The stains become a warning
  24. Re:Stretch their minds... by amuro98 · · Score: 2, Insightful

    I hate brainteaser questions during an interview.

    Wanting to know what my thoought processes are is one thing, but more often than not you're going to expect an answer - and if the candidate takes too long or doesn't get it, what then? Reject them?

    One of the worst interviews I had was at Microsoft. 8 straight hours of nothing but linked-list code fragments and MENSA questions.

    At the end of the day, I still had no idea what position(s) I had interviewed for, and couldn't tell what any of the folks I talked to actually did. Sort of makes answering "So, would you like to work here?" sort of tough, unless all you want to do is solve brainteasers while your peers look on and say "Come on, you're going too slow."

  25. pairing by GutterBunny · · Score: 4, Insightful

    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.

    --
    managers...why god invented purgatory
  26. Developers != Programmers by Eric+Savage · · Score: 2, Insightful
    One HUGE mistake managers (technical or not) often make is not realizing the difference between a developer and a programmer. Personally I consider myself an excellent developer and a competent programmer. What's the difference you say? Well the programmer lives in the world of code and pops his head up into the real/business world as needed. The developer is just the opposite. Programmers are typically the caffiene-fueled hackers that can bust out elegant/efficient/stable code that developers can only admire. The developer is presented with a problem and very quickly figures out platform/logistical/architecture issues, and can implement the solution (but is better off helping a programmer to do so).

    Unfortunately many programmers/developers also don't realize the difference and think they are both. In truth you can't be one without some of the other, but after a few years you will realize which camp you really excel in. I once worked with a large team of only (good) programmers and it was a nightmarish experience because they didn't appreciate the "development" side of the work, leading to a steaming pile of logistical problems and a missed deadline. Conversely, a team of only developers will likely turn out code with great intentions and design but a weaker implementation.

    Its not a matter of being better or smarter or more personable or working better in teams because those skills are valuable to both trades. It really boils down to
    1. what you like to do
    2. what you are good at
    3. why you do it


    To answer the question at the top, I think the first thing you need to do is find out what you have on your staff already, and then establish what you need and interview with that in mind. Looking for the person who does everything and does it well is likely going to lead to dissapointment.

    --

    This is not the greatest sig in the world, this is just a tribute.
  27. Well by mindstrm · · Score: 4, Insightful

    So what if I'm the kind of programmer who would have to whip out a book to do this? Does that make me a bad programmer? What if my methods and code are far cleaner and efficient than most, and I always produce what I say I'm going to produce on time.. are you going to discount my work as a programmer because I had to look something up? Because I didn't know it on the spot?

    Seems far too many people think it's about hotshot know-everything-instantly type of work, where you work when inspired or work when you are 'in the mood'.

    What about those who can methodically and cleanly produce code day after day?

  28. Re:One simple little function... by Mr+Z · · Score: 2, Insightful

    Of course, the three-variable version (the one that uses a temp variable) is probably faster on modern machines, as the three-XOR version has a serial dependence that forces it to take 3 cycles. The temp-variable version can go as fast as 2 cycles on a multiple-issue machine, or on an explicitly parallel machine, 1 cycle if the compiler realizes it can optimize one of the moves away in one of the later scheduling passes.

    I'm thinking along the lines of the following sequence being executed on a multi-issue machine. (The '||' indicates instructions issued in parallel.)

    MV A, T
    MV T, B || MV B, A

    And in the case where the compiler can allocate 'T' and 'A' to the same register on an explicitly-scheduled machine, the sequence becomes simply:

    MV A, B || MV B, A

    Can't do that with the three-XOR version.

    --Joe
  29. Re:What to look for by notsoanonymouscoward · · Score: 5, Insightful

    you would expect them to work offline?!?! come on. just give them everything they would have in a normal working environment. do you really want to not hire someone because they forgot to add one little thing? because they didn't have access to the documentation for whatever tools they are using? I am of course saying this all because I'm one of those people who doesn't memorize. I just remember the best places to look when I need a reference for any of the number of languages I've done work with.

    also, 90% of work is on the job training... do you expect people to be a perfect match walking in the door? wouldn't you rather have someone intelligent, adaptable and dependable, than someone who really really knows css and frontpage?

    --
    I ate my sig.
  30. Re:Our interview process by Anonymous Coward · · Score: 1, Insightful

    You have web pages that are lynx friendly.
    You are hired.
    Sign right here.
    -
    -
    Good luck with everything. Unlike quite a few people
    here, you know whats what.

  31. Re:Well.. by Axe · · Score: 3, Insightful
    Education does not make you an expert, it gives you enough to START doing what it is you want to do.
    Education does not make you a professional.. it lays groundwork.

    ..and you do not have good anough START, or nave poor enough groundwork - it comes back many years later and bites you in the ass. Hard.

    Most important thing I ever learned - is how to learn.

    --
    <^>_<(ô ô)>_<^>
  32. Re:One simple little function... by Pig+Hogger · · Score: 3, Insightful
    A = A XOR B
    B = A XOR B
    A = A XOR B
    My data structures professor showed us that on the first day of class. That got my respect.
    No wonder he's a teacher; only a teacher would gloat at a "clever" stupid trick like that; in a production environment, he'd be the first one to be shot, 'cause such kind of "clever" code is exactly why there are so many bugs in software nowadays, 'cause not all programmers will "get it".
  33. Re:One simple little function... by Axe · · Score: 3, Insightful
    Well, that may be right thing to do.. but..

    I did not know SQL. Never did. Did not put it on my resume.

    Had a project requiring implementing DB access. I got a book. By the end of the day had it working just fine.. with all fluff and what not.

    Our DB guru was reviewing it a bit later and said it was one of the cleanest made solutions he have seen. Note: it was reviewed.

    My point being: yeah, when you need an exact narrow skill, or just to weed out liars - sure, that approach works fine.

    You will not find people who can learn new stuff, and apply it sucessfully, that way. You will be stuck with jacks of one trade.

    On my book - #1 skill is the ability to learn.

    --
    <^>_<(ô ô)>_<^>
  34. Using google for past reference ? by Anonymous Coward · · Score: 1, Insightful

    How about asking hem their nick or email address they usually used and use google to search for the names. If you found them posting comp.lang.c or others technical discussions ( open source or non open source ), it can used as an indicator for how passionate the person is in that field. More posting - better . More posting with sample source code even better.

  35. Um, look at past work maybe? by Anonymous Coward · · Score: 1, Insightful

    Am I seeing this right? No-one seems to be saying "look at past work they've done". Look at their source code too, if at all possible, and find out how long past projects took, how many people worked on them, what they did to contribute, how they made technology and implementation choices, how they prioritized design ideals with reality, what major unforeseen problems they ran into and how they solved them, and so forth.

    Asking pointed questions about past projects makes it pretty clear whether they have design experience and understand design tradeoffs, whether they can really handle writing a substantial sub-system, and whether they know how to write robust and maintainable code.

    Quizzing people and cute interview tactics don't do any of that.

    Another thing to consider when hiring doesn't work out: Are your own expectations realistic, or are they failing to work out in an impossible management environment? These are way too common, in my experience, to ignore this side of the hiring coin.

  36. Higher and Higher on the Interview by jefu · · Score: 2, Insightful


    Having sat on both sides of the table (being at the moment on the interviewee side as I'm looking for a job) here's my two cents worth (and worth every bit of sense you can get out of it too).

    I don't trust exam type things - especially with pen and paper and looking at specific skills. Indeed, I personally don't tend to care much about specific skills - the organization may need those today, but what about next year? Things change.

    The "here's a puzzle, stand at the board and talk about it" is always a good way to find out what how the person works - but don't just go for the right answer - go for the method and how the person reacts to getting stuck and to hints.
    (On one such exam (PHD qualifiers actually) I got stuck completely and spent an uncomfortable amount of time trying to unstick myself - but when the examiner said "how about this" - I saw the answer immediately and said "Ah..." It was the "Ah" that the examiner had been seeking. )

    I do always ask about a previous project that they enjoyed, and about one they hated (these can be school type projects). For each I try to find out what was the best part, the hardest problem, the worst part... And I'll usually encourage them to talk about team problems as well.

    Finally, in the case that the interviewee is undergoing a number of interviews with people in the organization) I encourage interviewees to just relax and take the time with me to decompress (to the extent that they can) and try to just chat about whatever. This gives me a chance to find out if they can talk and know something besides geekdom - which I think is a nice plus.

    But you might want to do just the opposite of my ideas - I've managed to make some quite wonderful mistakes. One of my favorites was very talented, but very inexperienced - he had the bright notion that it would be a good thing to send a 2000+ line program to the compiler writers and insist there was a bug in the compiler because it didn't work.

    Hmm, come to think of it, that would be a good question : "Have you ever found a bug in a compiler? - How do you know?"

  37. More horseshit by bryan1945 · · Score: 4, Insightful

    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.

    --
    Vote monkeys into Congress. They are cheaper and more trustworthy.
  38. Re:What to look for by (outer-limits) · · Score: 3, Insightful

    I don't think I am such a bad programmer, but i don't like the MS type riddles. They annoy me in that there is a single, pre-defined answer. When I am dreaming up a technical solution to a request, I am thinking up something that doesn't have a pre-defined answer. I have seen plenty of solutions that work, but merely parrot the previous solution and ignore any new possibilities that may have come up since. All that results is that we get bogged down in old technology and methods.

    --

    Microsoft - Where would you like to go today, Maybe Jail?

  39. Re:What to look for by Grab · · Score: 3, Insightful

    If a company asks me a Microsoft-style riddle, I'm outta there. You might as well ask a Trivial Pursuit question instead - it's just testing whether you've seen that riddle before, not testing any brain-power.

    The important thing to test in an interview is *method*. Not whether the answer was right, but whether they went through the right steps to get there. If they got the right answer by some random guess, that tells you nothing, but if they went through the right steps and made a mistake, in the real world they can back-track and find the mistake.

    Grab.