I suspect the cause is higher-level languages. I’m not a language snob by any means but Java, then C# and now Javascript has lowered the barrier to entry significantly compared to C and C++.
Many more people are trying to become programmers than ever before, even getting jobs in the field. However, it’s not uncommon to have “8-year senior developers” fail truly simple problems.
Frankly, at many companies it’s easy to hide or become a professional peer-reviewer or meeting-attendee, with few coding skills.
THE CODING TEST
Once their resume and LinkedIn pass muster, it’s on to a one-hour coding test. I’m tempted to explain the test here because it probably wouldn’t help most candidates that I see, but I’ll be restrained and share that privately.
Suffice it to say, it’s a very well known coding test, with a few wrinkles. Since you’re reading this you would probably recognize it – and may even think it’s jokingly simple. It is.
Yet, most of today’s candidates haven’t even googled “coding tests” or done any homework. 1 in 20 recognizes the test. Half the candidates fail to solve the first step.
I joke about writing a book with the code I’ve seen at this first basic step – here are some examples to give you an idea:
- Forgot the syntax of a for loop had to google it
- Another added a semi-colon after the for loop and wasted 30 minutes trying to find the error, even though the screen was a sea of red squigglies telling them exactly what to do
- When asked to pass in a list of values, they hardcoded p1, p2, p3, p4 and then wrote 4 if statements to use them. When asked what if there were 5 values, their answer was to copy/paste a fifth parameter and if statement
- 40 minutes wasted because of a missing brace
- Another was very puzzled with the concept of passing in a variable-sized list of data to his method. “You want to pass in 2 values one time and 6 another? That’s very complex”.
- Couldn’t work out how to reference his dll from another. Tried and failed with using, static, global vars, etc
- Confused continue with break – but actually didn’t need either
- Asked me the key combination for copy/paste “in this environment”.. Visual Studio.
I’m not making these up – I have many more. This list was created from skimming my notes from the last few weeks (I create a new Evernote note for every interview, paste in the questions and write notes inline).
The second step is to perform some simple refactoring; extract method, add a parameter, abstraction, etc.
If we get past this, we’re down to 10% of the people who started. The last question is “how would you unit test this?”.. often resulting in blank stares.
MOST FAIL, THANK GOODNESS
Yes, most fail the coding test, but that’s ok. I do them over video conferencing, with the candidate sharing their screen so I can watch them code.
The beauty of this (at least if you have two screens) is that I can continue my work as they code. With the competent candidates, I rarely can because they are chatting, asking clarifying questions and coding quickly (like it’s no big deal).
But I can cheerfully leave some candidates floundering without wasting my time. No, I’m not being callous, I do stress throughout that they can ask questions and discuss what they are thinking. And if they are nervous I account for that too and help some more.
I rarely cut any interview short. They deserve a chance to find their feet and do their best. I remember stopping only once this year when the candidate admitted they didn’t actually know any C++ but “thought it would be a whiteboard test”.
FWIW, I dislike whiteboard tests or pseudo-code; I feel you can get a better sense of a programmer from watching them actually code. Funny that.
BUT A FEW DO PASS
Of course, those who pass tend to do so convincingly, finishing in plenty of time and talking through their various design decisions and why they chose a certain route.
Some even ask permission to use TDD upfront, and usually sail through (although not always, there have been some notable and spectacular TDD fails).
But it’s still not about the questions or the answers. They certainly need to be able to be comfortable coding, but it’s far more about how they answer the problems, discuss them, give us options and know which to pick.
It’s style over substance. It’s not getting “the right answer” because there isn’t only one. It’s about them taking the interview seriously. Taking notes, asking questions and dealing with building pressure during the interview.
It’s listening to your instructions and following them – not making you repeat something multiple times.
Plan for an escalating difficulty interview – you may find something they don’t know.. how do they cope with that? They should be confident, honest and ask for help.
What’s your first impression of them? That’s usually correct.
Nervous? That’s ok, especially for younger candidates. Try to put them at ease. Yes, this is important, but you can still tell if they can do the job, despite their nerves.
Likewise, with arrogance – we’ve all had “that guy” strut into an interview without a care in the world and with no respect for you or your opportunity – have a “plenty more jobs like this one” attitude and I’ll gladly let you go back out to find one.
Arrogance is not the same as confidence and can appear at any age, from double-major graduates to Ph.D. Architects. No thanks.
One recent example – their first words inside the interview room were “I generally don’t agree with coding tests”, followed by “No-one has bothered to interview me for 10 years”. Sigh. Could they code? yes, up to a point. But not well enough to get over their personality.
It’s their personality that’s important.
Look for deference, respect, punctuality, culture fit, social ticks – and would you drink a beer with this person?