Lots of books talk about how to interview, research a job, etc.
I have interviewed many software developers. As a result, in 5 minutes I can tell how many years of experience a developer has, how good they are and if they love being a software developer. This is true for any field. My wife is a CPA (if you need a good CPA contact her at tw_taxes/at/yahoo.com) and this works for her as well.
I can also tell if a developer or anyone else is going to be a star.
The number one differentiator is PASSION.
PASSION means that the interviewee, goes above and beyond the minimal necessary answer.
PASSION means that you show that you have thought about the implications of the textbook answer. In all cases, a textbook answer is the “wrong” answer.
For example, I asked a candidate what does the java “synchronized” keyword do. This was his answer:
Synchronize instructs the system to ensure that 2 or more threads or concurrent processes running a process attached to an object does not have simultaneuis access to the object but that there is an ordered time sequence in the way these processes can access the related object.
(Mostly) textbook correct…. But completely “wrong”.
Why? This answer is completely useless at the practical level. This answer reads like something out of the Java Language Specification. It is utterly useless for either helping junior developers, nor describing in practical terms what is actually happening. Furthermore, this answer uses the jargon words, “process” and “object”, contrary to the way “process” and “object” are used “in the field”. This candidate was unable to communicate with others and further conversation demonstrated a passion for impressing others, not a passion for the craft.
The passionate answer demonstrates an understanding for the impact/implications to developers.
For example, if the question was:
What does this java statement do:
s += "foo" + "bar"
?
a poor (textbook) answer is :
concatenates the previous value of
s
with “foo” and “bar”
a better answer is :
concatenates the previous value of
s
, “foo” and “bar” resulting in a NEW string that is stored ins
a good answer is:
the java vm creates a
StringBuilder
object that it uses to construct a new string. The developer should replace the string concatenation with aStringBuilder
to construct the new value ofs
.
an excellent answer is:
the java vm creates a
StringBuilder
object that it uses to construct a new string. The developer should replace the string concatenation with aStringBuilder
to construct the new value ofs
ONLY if this occurs in the code already usingStringBuilder
or there is a reasonable expectation that the code is in a heavily used part of the code. Unnecessary string concatenation can significantly impact a programs performance. For example, using string concatenation to calculate the value of a key is a bad idea. The javac compile concatenates constant strings so"foo" + "bar"
has no runtime impact. However, gratuitously replace string concatenation withStringBuilder
makes a program less readable.
So true. When I have to make a hiring decision, I always look for that passion. It is more powerful than experience and age. It is more powerful than knowledge in the long run. It is more powerful than greed.
Pat, your comment on my site was outstanding. I love how you make a distinction between experiences vs. experience. I will definitely relay that advice to my friend Dan. I’ll be following your blog consistently now.
Hah, another interesting question. I would like to hear the word “immutable” come out of the candidate’s mouth. In .NET strings are immutable so you’re generally better off using StringBuilder (a mutable or changeable object) as it cuts down on the number of objects created. StringBuilder is typically 1 to 2 orders of magnitude faster than the code you have. If I’m a stickler I’d say your code will generate a compilation warning since “s” was used but never initialized but now I’m just being imaginative and picky.