So I think that after this last trip to UIUC, I’m done with recruiting (at least in terms of traveling for it) for a while. It was an interesting trip. Part of that comes from being back on campus, which brings a weird sense of “home” with it, though along with that comes the “you can never go home again” feeling in that everything CS is now in a different building, and most of the people you knew are gone. It’s sort of weird seeing posters for good friends that I had back in school coming back from their respective companies to give a talk or whatnot.
But, despite being late in the recruiting season, I was surprised again at the quality of people I interviewed. Compared to its peers, the fact that UIUC at least has a course or two that still requires time in C and C++ makes a world of difference compared to the programs that are java-centric these days.
I don’t want to sound like a language snob, don’t get me wrong. I think any halfway decent programmer can pick up a language in a reasonable amount of time. The subtleties of some languages may take years to fully grasp, but most of the challenge in writing good software is understanding software design, data structures, and algorithms, and the specific language is just a means to an end.
With that disclaimer posted, I can’t help but agree with Joel; there’s a certain something that comes with knowledge of C or C++, and people who can’t or haven’t played with pointers are just missing something.
This is not to suggest people with pure experiences in java, smalltalk, lisp, and haskell aren’t good engineers or computer scientists, just that it’s a lot more comfortable to be able to have a chat with somebody who knows at least a little C or C++.
Huh. I think I did a pretty poor job of explaining where I’m coming from on that, but whatever.
All of this said, I’ve been seeing a trend lately, and it’s in both on-campus and industry recruiting. I’m not sure if it’s a really a new trend, or just something I’m noticing now, but there are a large core of people out there that don’t really care about finding the best answer, or at least a better answer — they’re happy as soon as they find an answer that works.
Like many interviewers, I have some pet design problems and programming puzzles. Sometimes interviews go in a direction where I don’t need them, which is pretty cool. Other times, they serve as a nice framework to see how a person thinks, picks apart a problem, what sort of questions they ask (and one hopes they ask some sort of questions, because the problems I give are far too vague to start), and how their drive is for pushing themselves in a hard situation.
So, it’s with some wonder when somebody proposes an algorithm on the back of the envelope, and you ask them what the complexity is. Often times, the discussion will go something like this:
Me: “So what’s the worst-case complexity of your algorithm?”
Them: “Oh, yada-yada” hand-waving " so it’s probably linear."
The conviction is frightening. It’s probably linear.
Me: “Well, but what if X?”
Them: “Well, I guess if things got bad it could be quadratic.”
What I want to say: “Wouldn’t when things get bad be the worst case?”
What I actually say: “Maybe. But if I’m thinking right, in the worst case, given an adversary, your solution may just never terminate.”
Them: “Well, I guess that could happen, but in most cases it should still be pretty fast.”
Yeah, usually the missile guidance software will work. Sometimes it will just blow up in the launch tube, but it’s close enough, you know?
It’s getting to be rare to find the person that starts worrying about their implementation right off the bat. Maybe a bit of self-doubt and curiosity is a weakness, but for me it’s an attribute. But, alas. Given the feedback that their algorithm could just never terminate, you’d think the gut response would be “damn, I bet I could come up with something better” but usually things require prodding to get them to the next iteration.
It’s weird. I can’t remember exactly how the convex hull algorithm is implemented, nor could I recall its running time. I tend to think that sort of thing is trivia. What’s important to me is that I can recognize that the problem I’m facing is a convex hull, and I’ve got half a dozen good reference books (and the Internet) where somebody else has answered all my questions and figured out the best implementation. The UNIX way I guess.
I don’t have a conscious thread running while I implement an algorithm nagging me “what’s the running time of that function” when I engineer software. But, when I step back and think about solving a harder problem, or when I’ve decided it’s time to switch from a hacked-together proof of concept to something real, I think I’d be pretty screwed if I didn’t have some sense for what I was doing, and some amount of curiosity about how much my implementation sucks, and how to make it better. I get really scared when I’m talking to people and they latch on to the first solution they come up with, because it’s good enough. The weird thing is I don’t know that I mind when people can’t think up a better answer. Rather, what kills me is when people don’t care if there’s a better answer, or knowing there’s a better answer, aren’t interested in finding it.
The current issue of The Economist has some good high-level discussion of the current talent problem in recruiting and hiring. I’d link to the article, but for some reason I can’t get their site to load at the moment. They point out that the demand for talent and the supply will eventually normalize, but the people that really need talent are going to have to pay more, or they’re going to get stuck with their current problem — hiring more and more lackluster people. At the moment, the market is looking positive, and thus there’s a high attrition rate, and a high amount of top talent portability, especially when combined with the dramatic change in corporate loyalty systems that evaporated with the late nineties.
I guess these are all “duh” statements, but it’s weird how I stop thinking about some of the obvious economic realities of the hiring, retention, and talent problem, despite a moderate involvement in the challenge of recruiting since when I started to try and staff people up under me at the bank.
No idea where I’m going with all of this, except that for some reason I’m in brain dump mode since my trip. Too much time sitting in airports, I guess. It’s probably about time I go pick up some supplies from the grocery, so I’ll shut up for a bit now.