Joel Spolsky has just made
a telling assertion
. He says that in an interview, if he lets
programmers choose the language they want to use to implement some
programming tasks, they’ll often choose Java these days. And this
makes him worry:

  Instead what I'd like to claim is that Java is not, generally, a hard
  enough programming language that it can be used to discriminate
  between great programmers and mediocre programmers.

Why on earth would you want an interviewee to pick a
difficult language? That’s a bad sign.

As someone who has interviewed and hired a lot of programmers, let
me counter with some advice of my own: If you give someone the task of
digging a hole and offer them the tool of their choice, favor the one that
chooses the auger over the garden spade.

Sure, seeing someone handle a nasty pointer issue tells you something. It
tells you whether they can deal with nasty pointer issues. If you’re
doing software that requires that sort of thing, by all means—force
people to show you they can handle it.

Software development happens at many levels. I’ve known a lot of
programmers that are good at the low level stuff but not so great at coming
up with the high level architectures or the fluffy stuff that make a user
love an application. And vice versa. I’m not convinced that
all programmers can and/or will be great at both. I’d even go so far
as to say that different parts of the brain and potentially different
people are going to be right for these different layers and types
of application development.

Joel feels that low(ish) level languages like C and C++ with their pointers
and other various "hard stuff" are necessary to weed people out
of the industry. The ones that can’t handle the hard stuff in the
languages are the ones that were never meant to be programmers in the first

What worries me is that this will weed out the artists and the
craftspeople, leaving us with nothing but a bunch of engineers. Sometimes
you need an engineer. Sometimes you need an artist.

What you always need is someone capable of choosing the right tool
for the job.