It's that time again. My employer needs another Java software engineer. We are looking for someone familiar with the usual enterprise Java stack: Spring, Hibernate, Tomcat. Pretty vanilla, right? So why is it so hard to find one? The problem is not with the frameworks: these are pretty widely used, and lots of people claim familiarity with them. My problem is the same one I've had for years: it's hard to find candidates who can clearly demonstrate their programming skills.
Am I too rough on them?
We ask all kinds of questions during interviews, of course. There are the soft "people" questions. We sometimes answer org chart questions (lots of boxes and lines on the whiteboard). There are high level architecture discussions (lots of boxes and lines on the whiteboard). And there are programming questions (lots of boxes and lines ... oh, you get the idea).
When talking to candidates, I personally want to know if my future peer is in touch with his inner computer scientist. Detailed API knowledge is not important (although if you only know enough Hibernate to be dangerous ... you are dangerous), only programming aptitude. So I'm hoping for the candidate to show off his inner geek: algorithms, data structures, big O notation and most importantly the ability to code. This is undergraduate CS stuff that a programmer should have in his head at all times. The tricky part is how to test this. Usually, it's in the form of a "simple" programming exercise.
I will tell you an programming exercise that I have stopped using: reverse a linked list. It's on Joel Spolsky's list of programming exercises for interviews. Unfortunately, it has been years since I interviewed anyone who can answer that question. I realize that it's not as easy to work out code on the whiteboard, and people can be nervous. I personally have crashed and burned under interview pressure, so I sympathize. I can understand if someone occasionally has a bad interview, but not if everyone I meet blow up over this. This isn't the hardest question out there. It's not a brain teaser nor a trick question. An exercise like this needs some familiarity with the data structure in question, and sometimes there is some discussion of algorithms associated with the data structure. The resulting discussion would ideally show off the candidate's ability to comprehend and address the problem as a programmer.
What is distressing is when somebody comes in with an impressive resume who otherwise had a good round of interviews. It's painful to see them struggle when my expectations are high. Even without that linked list exercise, many candidates do not seem prepared to get their hands dirty. Very few do well with programming exercises. Is there a better way to demonstrate programming aptitude?
Maybe it's not a good time
It's not 2001. At the height of the dot com bubble, we're told, lots of people entered the software industry who can't code their way through wet tissue. But after a decade, the fakers should have faded out of the no-longer-lucrative industry. We're supposed to be in a down economy in the US, so there should be a lot of good people out there. So why are recruiters trying to recruit people who are still working? It looks like the software industry never got the memo about the bad economy. Check out the Indeed job trends for Java. If this is what it looks like in a bad economy, I hate to think what it would be like to recruit under full employment:
It looks like this is still a fine time to be a Java developer. Wasn't Java supposed to be dead?
How about you?
Are you a Boston-area software engineer with serious Java kung fu? Interested in working for a software startup in the health care industry? Shoot me an email. Maybe you can show me a thing or two about how a good software engineer will interview.