As part of my day job I am asked to interview prospective developers, and this process is incredibly difficult. The idea of being able to determine developer competency in the course of a couple of hours is nearly impossible (also how do you determine personality fit, this is just not my specialty). So my strategy is to take a basic concept and try to coax from the interviewee a situation where they may have used that technique or pattern, while trying to avoid the obvious and mind numbing regurgitation of facts.

For example, all object oriented programming languages must allow you to express the three basic principles, referred to as the Pillars of Object Oriented programming. Here are those principles (briefly described) along with the kind of questions I try to ask.

Encapsulation

This trait describes the languages ability to hide implementation details from developers who consume the object.

  • What objects have you designed for other developers?
  • What kind of task did it accomplish and how did it change the ease of code development for your peers?
  • How did you protect critical properties from being tampered with?

Inheritance

Inheritance describes the languages ability to allow users to extend and build upon existing objects, in essence you develop upon the abilities of a base class.

  • What considerations have you made for allowing subclasses of your objects?
  • How did you elect to protect methods from change in subsequent child classes?

Polymorphism

This describes a languages ability to treat related objects in a similar way. This allows a base (parent) class to define a set of members that are available to all its legatees.

  • Describe a scenario where you need to design subclasses that are all related to one parent class?
  • How did you decide which methods would be shared between subclasses and which would not?
  • Describe where you have needed to use Method Overloading or Method Overriding?

The point here is that you can discover much more about a developer by asking questions related to past work rather than asking them to recite topics from memory. Trying to understand exactly what they have designed verses what they can memorize tends to reveal much more useful information.