- Smart
 - 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)
 
Work history
- 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?
 
Object-Orientation
- 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?
 
Testing
- 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?
 
Motivation
- 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?
 - Why?
 - 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!).
2 comments:
Maybe it's just my new glasses, but I could have sworn that the third question in the Programming Language Theory section was "What is an advantage of recursion over recursion?"
Tim:
That's a bit like the dictionary definition of recursion.
Recursion, n. See Recursion.
Post a Comment