Joel’s busy complaining that teaching Java in comp-sci courses makes life too easy for people, because they don’t have to deal with pointers and recursion. News flash for you, Joel: the times have changed, and new tools are available.
I’m sure that when carpenters switched from hand augers to power drills, there were carpenters out there that complained that the new apprentices weren’t being taught the old way of boring holes in wood. But the apprentices didn’t need to use hand augers anymore – power drills were so much better. It’s much the same with modern languages – you don’t need pointers, and recursion (while still necessary) is less needed. Heck, most of the things you need recursion for tend to get implemented in libraries that you pick up and use. Instead, you need new tools, particularly good abstraction and reasoning skills.
Yes, there is still a specialist need for pointers and recursion, as well as functional languages and so on. These should be offered as courses at universities – optional courses for people looking to specialise in those areas. Similarly, while all developers should know the basics of database theory and practice, advanced database courses, where you learn how to build a DBMS, are optional courses. Ditto for operating systems design, or distributed computing, or embedded systems.
Medical schools turn out all sorts of medical practitioners, and I wouldn’t trust a brain surgeon to patch up my kidney. Why should anyone expect all graduates of a comp-sci school to know everything out there? I wouldn’t. I’d expect them to understand the basics of most things, and have moderately advanced knowledge in a couple of areas. The “basics” change over time – and pointers and recursion aren’t part of the basics anymore, simply because developers don’t need to write their own basic data types all the time. Similarly, it used to part of the “basics” to be able to get code to run inside of 8KB of memory – this has been dropped even for most embedded device developers now.
The real beef that Joel has is that he hasn’t moved on. He says it himself: he can no longer tell who the smart kids are, the ones that are worth his time in bringing in and training further. He probably wouldn’t object to teaching recursion and pointers to a a smart kid if it was necessary for the job, but he can’t tell who the smart kids are anymore. Well, Joel – that’s your problem. Try actually talking to them instead of asking “I’m smarter than you are” ego questions. If pointers and recursion is required for the job, then keep the questions in. If not, toss them. If you need to keep them, and you can’t find people who know them, then maybe you should try to find out why the rest of the world’s moved on.
Here’s an idea: have a few different types of hard questions – maybe some OO, or concurrency, or parallel computing questions. Find out which area the interviewee claims to know and give them a question to suit.
Personally, I don’t care about universities not teaching recursion or pointers. I do care that they don’t teach things like decent debugging skills, or testing, or how to maintain a huge pile of crappy code without breaking it (I also care that they don’t teach kids how to avoid the huge pile of crappy code in the first place). Now, that’s a real problem, and it’s been a problem ever since the days of punch cards – I don’t really expect that to change soon either.