Archive for the ‘Object Orientation’ Category
Desperately Seeking Senior
Recently I chatted about appropriate coding assessment questions for senior developers, and came to the conclusion that Solver was a little too demanding for someone to do in around twenty minutes (under pressure), so I replaced it with Quicksort.
My assessment now consists of three questions:
- Fibonacci. In short, “print out” the first thirty terms of the Fibonacci sequence, any which-way;
- Quicksort. Sort a simple list of names into alphabetical order, applying a crude (read: not very efficient) implementation of the Quicksort algorithm;
- University. Code up a set of objects and/or interfaces that describe a simple domain model, illustrating structural relationships between the domain objects.
Here’s University:
At first glance, this would seem fairly easy. The tricky bit comes in due to the fourth bullet point in the problem description: “a lecturer might also be a student”. Now C# doesn’t support multiple implementation inheritance, and this problem calls for a design involving multiple inheritance.
I’m going to present my solution to the problem. I need to stress though, that I’m not wholly satisfied with it because it involves a StudentLecturer type (you guessed it … a hybrid) which just doesn’t sit well with me.
In any case, this is a classic case of the Diamond inheritance pattern (see the Diamond inheritance problem), and this is how the relationships might look:
I’ve deliberately left Course out because it isn’t really central to the real problem, and as a result, just creates clutter. Within the bounds of the description of this problem, this solution might be acceptable, but it’s pretty tightly coupled and promises to turn into a bit of a nightmare should we need to extend the orthogonal roles to more than just Student and Lecturer (although, off the top of my head, I can’t think of how). Ideally though, this sort of mixin scenario is more suited to a dynamic language like Python that allows types to be defined at runtime. Never-the-less, it makes for a worthy brain teaser when done using a statically typed language that only supports multiple interface inheritance.
All three questions comprising the assessment are required to be completed within an hour. What I didn’t anticipate though, is the response to the questions. After assessing twelve people, no-one has provided a satisfactory answer to University. Is this because it’s particularly hard? Are C# developers, in general, not as strong on the modelling front? It’s a little perplexing.