- Gets things done
- Communicates effectively
- Passionate about software development
- Has a solid technical foundation
- Quick learner
- Cultural fit (sense of humor, down to earth, enjoys working with others)
- Why are you interested in this job / company?
- Why now?
- Tell me about a tough lesson from your last job.
- What are the key things that you have learned about maintaining and enhancing a pre-existing software system?
- What is the difference between a class and an object?
- What is an interface? Why are interfaces useful?
- What is inheritance? Compare and contrast single and multiple inheritance.
Programming Language Theory
- What is recursion?
- What is an advantage of iteration over recursion?
- What is an advantage of recursion over iteration?
- *What is a closure?
- *What is a continuation?
Agile (assumes some [claimed] knowledge)
- Have you worked in an "agile team" before?
- Have you read up about Agile / XP / Scrum?
- Explain difference between waterfall and iterative development
- Explain some of the XP practices (e.g. pair-programming, test-driven development, continuous integration, re-factoring)
- What's Scrum about? How does it work?
- Difference between manual and automated testing?
- Which kinds of automated testing have you used?
- In which areas is it trickier to test automatically
- Test first or code first? Why?
- *What is Design By Contract?
- Favorite things about working in IT / software development?
- Worst things?
- What do you want to learn more about?
- Let me solve it and report back, or let's figure this out together?
- What are the key elements that make for a good team?
- Tell me about a cool tool, language, or technique that you have learned and applied recently.
- Favorite and least favorite programming languages that you have used professionally?
- What's wrong with [favorite]?
- What's good about [least favorite]?
Of course, a lot of the interview is about gauging the tone (affect) of the response and following up on interesting responses.
Additionally, I usually do a pair-programming exercise / challenge with technical candidates, usually with a little design phase and some test-driven development. This tells me a lot, but it is time-consuming and can be quite draining (especially if it doesn't go well!).