Lately I have been conducting technical interviews to fill some Java
developer positions, and this process is becoming highly frustrating. Good
candidates are very hard to come by in the Atlanta area. I don't know
whether there is an actual shortage of Java programmers in the U.S., or
whether the situation is unique to our metro area, or whether we are just
relying on the wrong recruiting companies. In any case I repeatedly find
that a candidate will list every Java technology in the world on his
resume, but then when I quiz him on specifics he can't answer. Or perhaps
he knows the buzzwords, but then when I ask him how he would apply the
concept in a specific situation he gets it all wrong.
My experience is similar. I'm not in the U.S. but north of you in Canada.
I've talked to people outside of the role of interviewer, i.e. just
chatting with people I meet outside work or on the web. A number of people
believe that everyone lies on their resume. If they are honest they will
not get an interview. So they lie on their resume too. One person who has
applied for jobs with this mentality now interviews people. He told me he
assumes people lie on their resumes. So if you apply to a position with
him and you are JUST qualified for the position he will not call you in
for an interview because he assumes you lied or exaggerated and are
underqualified for the position.
Just last week I interviewed someone who looked amazing. She is a Sun
Certified Programmer, she list EJBs, Servlets, JSP, JMS, JDBC. she worked
on WebLogic 7.0, WebSphere 4.x and 5.0, Tomcat 4.x and 5.0. She developed
using Eclipse and WSAD. She is expert in SQL, Oracle and DB2. The list
goes on and on. She even listed companies where she 'used' all her skills
and knowledge.
When she was brought in for the interview we kept it very friendly. She
felt at ease. She was always a little nervous. I made it clear that the
interview was not black and white. No one is expected to know everything.
There will be some questions she will have trouble with. That does not
mean she is not the best candidate. This put her more at ease. So much so
that after 15 minutes she admitted that she was certified years ago (she
couldn't remember if it was Java 1.0x or 1.1) and she has barely used the
knowledge since. She worked on projects that used a lot of the skills and
technologies but she was not directly responsible for any of them.
Many of the things listed on her resume she had not used for 4 or more
years. Most of them have changed a lot since then and her ability to
recall things was weak to none existent.
This was probably the worse case of exaggerating I had seen in some time.
Most the time it is junior employees who exaggerate and they know not to
claim too much or we'll know they are lying.
I continue to tell people, if you lie on your resume then I cannot trust
you. If I cannot trust you then I cannot give you any authority. If I
cannot give you any authority then I cannot give you any responsibility.
Here is a sampling of some of the questions I like to ask candidates:
* Write a program that reads strings from a text file, one per line, and
outputs a list of the unique strings along with their frequency of
occurrence. For example, this input:
Tuesday
Friday
Tuesday
Saturday
results in this output:
Tuesday: 2
Friday: 1
Saturday: 1
(To do this right they need to know about FileReader, BufferedReader, and
some collections API stuff.)
We'd ask questions like this. They don't have to write something that will
compile. Just has to have the basic idea. I understand that some good
programmers rely on their compiler and development tools to help them out.
But if they don't even know they need FileReader and BufferedReader then I
have a problem with them.
* Write a program to compute the number of hours in the current day,
correctly accounting for locale-specific time changes that might make the
current day more or less than 24 hours in length. (Simple Date/Calendar
API test.)
Not something someone I'd hire needs to know.
* Suppose I have the following class:
public class A { public String key; }
Write the code to sort a list of A's in ascending order by "key" attribute
using Collections.sort(). (Basic Comparator test).
Our work does use Collections and sorting so this is the sort of question
we might ask.
When I first started this process I was actually concerned that such
questions might be too easy for programmers with 3+ years Java experience.
Yes. I was too.
What is the difference between private, protected and public? Many
know what public is but they get the difference between private and
protected confused.
I've asked, "How do you compare 2 String objects?" You'd be surprised the
number of people who answer, "Use ==."
What is the difference between an interface and an abstract class?
In fact the opposite has turned out to be the case. Some candidates even
seem surprised that I expect them to know the core Java API and be able to
use it to solve actual problems. I could understand if I were asking about
obscure stuff like reference queues, but my questions generally pertain to
basic aspects of the Java API that I use frequently in my work.
Yes, that is my experience. I've also noticed a growing number of messages
from people, on newsgroups and forums, starting with, "I just got this job
doing XXX. How do you do XXX?" To which a number of people respond, "How
did you get the job if you don't know how to do it?" Answer: they give
good interview. This is why my current company has a set of multiple
choice questions we ask on a computer. The first day they have you sit in
front of a computer with a quiz on it. You have 2 hours to answer the
quiz. The first half is multiple choice. If you get more than 50% wrong on
the multiple choice the interview is over. The second half is short
answer. After the short answer questions are complete the technical
manager will ask you to explain anything that is not clear in the short
answer section.
I thought I'd blown it because the technical manager had no questions for
me after the quiz. Turns out he was pleasantly surprised because I
answered all the short answers correctly. The questions were things a
first year student would know.
Is my experience typical? I read a lot about unemployment in the IT
field, but it just seems to me that if unemployment were a significant
problem there would be at least somewhat competent people sending out
resumes looking for work, and I'm just not finding that to be the case. Of
course my experience is limited to the Java job market in the Atlanta area
and I can't speak for other technologies or locales.
My own experience looking for work is that many of the people I worked
with would stop looking when they landed a job. Especially in the past few
years. The people who are out there looking for work are usually the
people who got laid off or fired.
When times got tough a few years ago the site manager showed his true
colours. I looked for work for 2 years. I was good at what I did. I was
horrible at writing a resume. After 2 years of research and what little
feedback I could get from interviewers I now know how to write a killer
resume.
Maybe the best Java programmers in your area are really bad resume
writers.
Also, an interesting observation... all the people hired here since I
joined are people gainfully employed but unhappy with their current job
(due to merger or change in management). If you are looking at people who
are unemployed and surfing the job sites, maybe you are looking in the
wrong spots.