As we already have a rough idea of his ability, aspirations, etc ad nauseum, today was purely work to gauge his technical and analytical abilities. We were planning to conduct the interview in such a manner:
1. A couple easier code problems, simple warmups to see if he can actually write a function.
2. A harder, more algorithmic problem.
3. Some abstract program management questions.
So we sat down and first had him reverse a string. Using only the subscript operator. This branched into whether or not C# string type is a reference type or a value type - candidate was convinced it was a value type because it turns blue in MSVS... Which is a fine mistake to make, but hilarious. Anyway. So about 1 hour later, we worked out what a string looks like in memory, what a pointer is, etc. Then onto reversing a sentence in place. The candidate basically imploded here, trying to solve too much in too convoluted of a manner. Of course it didn't help that we were caring about runtime half the time, and then not caring the next. Anyway I got bored and started spacing out, and started thinking to myself... Why in the hell are we having this guy do this shit? Do we have a dire need to reverse a 5GB sentence in-place??? Shouldn't we be questioning this guy on like, how he would write a web handler or something??? Why can't we get to something a little more interesting, why can't this guy just answer the problem?
The rest of the interview went decent. I wonder if we'll hire the guy.
Anyway, it was a bit interesting to see how far I had come in my understanding of computer languages and code construction practice. While grilling the candidate I asked when it would be a good time to start deriving classes, and he responded when you have an abstract class Car, you can make SUV, Coupe, &c ... as "You know, you could have one big object with a whole lot of data fields on it, but that would be totally unwieldly..."
"Arguably so is a big class hierarchy. I'd prefer just 1 object in that case. What would be the point where you would start subclassing?" Finally we wrenched it out of this kid: subclass when behaviour changes. (not data).
It seems silly to pat myself on the back for stumping the kid, but really I'm just pleased to see that I am actually picking up the craft. 2 years ago I would have given the same answer he did. Hell I certainly do NOT want to read code I wrote two years ago.
Finally it was interesting as it was kind of shop talk between my boss, the candidate and I. It shed some light on some ambiguities, like what exactly C# string is (it's an alias of String). Uhh and some other crap I can't think of right now. It was fun, but maybe not the best way to spend 3 hours in the middle of a sprint.
Also in other news I rode my bike from Cadie's to mine to pick up this computer and back to Cadie's again. 3/4 of the way through my return my front wheel got a flat, a slow bleeding one. Why the hell does this crap happen to me. Also, my leg is bleeding and I don't know why.