I will be the first to admit that it is my soft skills, and only partially my programming skills, that has got me to where I am today at the director level. I am a good "architect", problem solver, and researcher, and I am very good at designing an application's business rules. However, when it comes down to things like design patterns, measuring performance, algorithms, unit testing and the like, there are a lot of programmers smarter than me. We are getting to a point where I need to hire these programmers. I need them on staff to be a compliment, but what sorts of questions should I be asking... when they should probably be the ones asking the questions. I'm not an idiot, but I'm also not going to whiteboard some complicated Java code off hand by memory, and expect someone to optimize it off hand by memory.
Find a relevant problem you can't answer, or took a long while to figure out and ask that.
Do you have someone smarter than you already working at your company? If so, bring them into the interview. One of the smartest things I've seen decision makers do is have an expert present to ask the necessary technical questions and evaluate responses.
Otherwise, I would recommend that you come up with a list of problems that you've encountered in your application development (if you've had bad experiences with things that previous employees couldn't do these are good candidates) and make certain that you have a fair understanding of a 'good' solution and perfect knowledge of what the 'wrong' or 'bad' solutions would be.
I assume this is the first hire you're making in that area. Once you've managed to hire one, you make that person responsible for assessing the technical abilities of the applicant. I've had interviews where a non-technical person was asking technical questions, and you can tell that they don't really understand the answer. This has a benefit, in a sense, that the applicant needs to be able to explain themselves to non-technical staff, but it doesn't help you figure out if they're the best candidate for the position.
I agree with annakata that you may want to present them with a problem you can't or took a long time in solving. But your best bet is to find someone technical who can really understand the answers presented. Remember, even if you did manage to solve the problem you ask, they may give you a different (better) answer than the one you came up with, and you may not be able to understand its subtleties.
I would have someone even smarter interview them. He/she will probably know what kind of questions to ask. Also, sometimes people can be very convincing, even when they're wrong or unknowing. Make sure you know the right answer and caveats so they don't bullshit you :)
[EDIT]What Gabriel1836 said![/EDIT]
First, I would make sure they are at least as competent as you (there are a lot of incompetent smooth talkers out there). Then I'd ask them to describe how they would go about solving problem that you know isn't your strong suit. From your example, ask them to explain the difference between some design patterns. If they can help you understand something, then they are probably "smarter than you".
More importantly, if they understand something you don't, but can't explain it, then you should raise a red flag.
Good question. Remember it's not a case of "smarter" - you just have different skillsets. This is important, since you have to conduct the interview with confidence not too much humility. There's little point in trying to come across as a better programmer than them, and that would make you look foolish.
I'd suggest first and foremost posing some questions that test whether they could take your direction in terms of architecture, spec, etc. and run with it in terms of implementation. Make sure they can bridge that gap between your high-level analysis and the code. Your working relationship is going to be very important (at least with the lead developer) since you're relying on trust.
As for testing their capability code-wise:
- Have a look on SO, google, and ask any developers you respect for good interview questions for programmers. This is more of a sanity check so keep it quite basic.
- Perhaps you know a programmer who would sit in on the interview for you?
- Ask for specific examples of production work they've done. If they can show you the source this is a good sign, but often they won't be able to, so you'll have to read between the lines of what they say they did.
I'd advise first hiring one lead developer and spending a lot of time getting the recruitment process right. If you get that right, they can help you hire the rest of the team.
Ask them to sit down and write some code and solve a problem next to some of your smartest (and nicest) developers. Seeing how people code and talk about code is better than any interview questions you could ever ask.
Get an expert programmer to participate in your interviewing process.
If that's really not possible, you'll have to skip the them-actually-writing-code part, but there's a ton of great questions you can still ask. Just look around these threads:
Interview Questions
If I were hiring now I would start with Steve Yegge's phone screen questions because most people who apply for jobs appear to be clueless liggers. If someone came back with "hey, you're just repeating Steve Yegge's phone screen questions" that would pretty much guarantee them an interview because it would indicate they had read something from that direction.
Finding things like what books, blogs and websites on programming they used a lot would be a good start. If they read any that might indicate that they are in the in the top percentile of programmers who are still working to improve their craft. If the books or sites they favour are more along the lines of The Pragmatic Programmer than SQL Server For Dummies you are probably on the right track again.
Better still if they have their own blog, or other public profile to indicate their expertise. If, for example, they had a profile on this site that showed a trail of insightful or accurate responses that would be another good sign.
None of these things guarantee expertise, but they do indicate the kind of mindset that I would like to see in a programmer I work with.
There are also warning signs I look for- this is purely personal belief, but I don't think a programmer who only uses one language can be as good as someone with equivalent experience who has used several. Each programming language you use gives you new insights and techniques that you can apply to all the others you are utilising and the type of person who is not interested in trying new languages or experimenting with new technologies may not be ideal for you if you are creating a new application.
I think if someone is really passionate about what they do it that will come across when you talk to them about it and someone who is passionate is going to be more motivated and probably do a better job as a result.
My guess would be to consider some parts of where you aren't strong, e.g. design patterns and unit tests, and figure out what kinds of questions would you want them to know when you get into a situation where you'd hand off something to be programmed, what kinds of things should they do with that? When would they look for patterns to use or other implementations to use? How would you feel if they Googled up 80% of the code for an internal application?
I'm not saying you should become an expert on those developer skills you feel you aren't strong in, but you should know enough of the basics to be able to tell those who are proper about what they know compared to those who just BS their way into a position.
Communication is a large part of the job you are describing and so how well they can answer some questions may be a sign of how good or bad things would be if they did have the job. There is a reason why there are probation periods may be something else to note.
Ask them what Open Source projects they have contributed to. If they answers "none" then it is highly likely that programming is not their passion.
If they mention two different Open Source projects with two distinct different technologies and in addition implemented in two different languages you should be relatively safe with the "tech stuff"...
However the really difficult stuff is the non-tech stuff...
I would never hire a guy without knowing his personal goals in life.I he have none or they don't overlap great with mine, sorry... ;)
You seem to be confusing skills with "smarts", and as a director, it surprises me that you'd consider asking an internet forum such a highly contextually dependent question.
Being able to write unit tests/use design patterns/measure performance is a learned skill and has little to do with intelligence beyond a certain base level. And in any event, as someone else mentioned, intelligence comes in an infinite number of flavors.
Surely the answer to your question depends entirely on what role you need the new hire to perform. If have no in-house skills in the domain you want to hire into, the only way to get an accurate reading is to have someone who knows the domain have an active role in the recruitment process - and that doesn't mean posting to a forum without any form of context for contributors to use to guide their response.
I don't understand how the above is non-obvious.