Interview Techniques, software development

Interview Techniques – Technical Questions

One of my interests is the ‘art’ of coming up with questions and problems to use when interviewing software developers. It should be evident that the questions you ask in an interview will be based on what you think are important characteristics and traits for good developers to have. Therefore, trying to come up with good interview questions is effectively asking ‘what do I think is important for a developer to do/have/be?’ Once we know what we expect from a good developer, we can progress in certain ways, like improving university courses etc.

I plan to have a series of interview techniques posts, of which this is the first. This post focusses on purely technical questions to ask a developer in an interview.

By ‘technical knowledge and understanding’, I mean things like OO theory, relational theory, use of UML etc, and not things like which C# namespace to use in a particular case. I consider such knowledge to be necessary but not sufficient for a good developer. A developer cannot write code without understanding these concepts, and conversely somone who understands these concepts is not necessarily a good developer. I feel that these technical questions should be the first questions asked in an interview, but certainly not the only questions. They are just the beginning.

I also want to make clear that often candidates are given automated tests that test things like whether the candidate knows which namespace to use for a task. I don’t consider these tests useful, because a. this knowledge can be easily looked up in a just-in-time manner, and b. just because you understand how engines and gearboxes work doesn’t mean you can drive a car.

I have built up this list over a number of months, while interviewing candidates, and discussing with colleagues what kind of knowledge we’d like fellow developers to have. The list is graded, so that certain questions follow on from earlier questions, and shouldn’t be asked if the candidate does not give a satisfactory answer to the earlier question – if the candidate doesn’t know what generics are, there’s no point asking about the difference between IEnumerable<> and ICollection<>.

So, forthwith, my list is below. Please comment if you have any suggestions.

Interview Questions

  • OO Programming
    • Describe object oriented programming.
    • Contrast it to another paradigm (aspect-oriented, functional etc)
    • Explanations of:
      • Encapsulation
      • Inheritance
      • Polymorphism
    • Design patterns
      • Singleton
      • Observer
      • Visitor
  • .Net:
    • Value and reference types
    • Classes and Structs
    • Casting and boxing
    • Access modifiers (public, protected etc)
    • Abstract, virtual
    • Interfaces
    • Difference between an interface and abstract class
    • Generics
      • IEnumerable<> vs ICollection<> vs IList<>
    • Nullable types
    • Delegates
      • Anonymous delegates
    • WCF
  • Web services
    • Inter-operability
    • Discovery
    • WSDL, SOAP
  • Databases
    • Relational Theory
      • Design
      • Normalisation
    • Object-relation impedance mismatch and O/RM
    • If used ADO.Net, ask about how to translate between DataSet etc to objects and vice versa
  • MVC
    • Describe MVC
    • Compare with other architecture (Winforms, MVP etc)
  • UML
  • Version Control
    • Why use version control
    • Which systems used
    • Different locking models
    • Branching & merging
  • Unit testing
    • What is unit testing
    • Unit test systems used before
    • Unit and integration testing
    • TDD
      • BDD
      • Mocking
      • Difference between stubs and mocks
  • SDLC
    • Waterfall
    • Agile
    • Lean
  • Card shuffling algorithm design
    • Object orientation
Advertisements

4 thoughts on “Interview Techniques – Technical Questions

  1. I had similar interviews like you have described. I mean same depth of questions. It took about 2 hours to interview a person, especially when he knows a lot. Then i tried another approach: http://www.joelonsoftware.com/articles/fog0000000073.html And now my part takes 30 minutes maximum and results are better. If you need particular level employee (like i did), it is enough to ask just couple of questions like this.

    1. Thanks for the link. The approach I take generally is to start off with the easy stuff, and very quickly move on to the more in-depth stuff if the candidate shows he is up to it. I think this approach could speed the interview up as well. If the candidate can answer an in-depth question about topic A, I’m less likely to ask about the basics of topic B.

  2. Very nice range of questions. I would also add the following:

     Describe what the using() {} block is for in C#
     Explain the SOLID principals .
     Some Domain Driven Design questions (Aggregate Roots / IRepository / Domain model / Domain Service)
     Add MVVM to MVP & MVC

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s