The Non-Programming Programmer

I find it difficult to believe, but the reports keep pouring in via Twitter and email: many candidates who show up for programming job interviews can't program. At all. Consider this recent email from Mike Lin:


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html
1 Like

Nowadays many people comes to programming world with the buzzwords like “MVC”, “Patterns”, “Sharding”, “Highavailability”, “Highscalability”…
But many people don’t know how to write simplest programs, such as “how to find the smallest common multiple of two integers”.
It’s sad.

That article makes me feel good.

As an incompetent programmer myself (I am a build engineer and good enough at that), I find it reassuring to learn that the vast majority of wannabe programmers fail at tasks that even I find easy.

(Regarding the FizzBuzz problem, I think the problem is even easier because the two words are meant to appear in the same line.)

Looks like I could learn more but I do find myself in a decent starting position.

Inspired by Jeff’s FizzBuzz I conducted several technical interviews in January and February 2009 for the company that I was working then.

I was shocked to see how true it was. Several 4+ years programmers struggled slowly to do it and many of them got stuck and called for my help.

The funniest of them all was a woman (don’t get me wrong but… thing are the way they are) who couldn’t find the modulo result and wrote a small function which iteratively subtracted one operand from the other until it hit zero or a negative value and took the decision from there on.

When I showed her the % operator she was shocked how simple and elegant that was…

It’s a market full of incompetents. Sadly.

Internet interviews are a great screening method. With a combination of Skype and Google Docs, you can do it for free, from anywhere in the world.
What does Mike’s app do that can’t be done with Google Docs?

I keep reading posts and blog entries related to this topic and it frustrates me. I have been working in IT for many years and recently completed a new degree focused around Information Systems and programming as I want to move from IT into development.

I find that most of the job postings without the Senior keyword in their title are looking for people with 5-7 years of programming specific experience and many of the senior positions have phrases like “Javascript, CSS, jQuery would be a plus” which I have but I am certainly no Senior Programmer.

I have used Perl and VB in my past life as an IT worker for 10 years and after learning C/C++, C# and ASP.NET I feel like a total noob. Until I finally get a job firmly in the software development role where 0% of my time is spent managing systems I feel like I am a very junior programmer.

I quess my biggest problem in looking for a position is how much of my IT scripting experience to I count toward actual programming experience and where are people drawing the line with the use of “Senior”?

Great I can write all the simple apps people talk about using as interview questions but I can’t get a call for the interview as I have 10+ years of non-programming specific IT experience.

At least in Sweden, people who are “on the dole” have to apply for any job they can, even if they haven’t got a snowball’s chance in hell to actually get it. If they don’t, they lose their unemployment benefits. That might have something to do with it, at least here

I haven’t really used it, but you might want to have a look at http://codility.com/. It’s an online programming assessment test that can actually evaluate the correctness of the answer automatically (a series of unit and perf tests).

1 Like

“Why do people who can’t write a simple program even entertain the idea they can get jobs as working programmers?”

This is why: http://en.wikipedia.org/wiki/Dunning–Kruger_effect

Also, for the unemployed, the cost of interviewing is very low compared to the potential payout, so even if they think it’s a long shot they might still try.

Omer, are you seriously suggesting that one can effectively write code in what is essentially MS Word? brows furrow

I couldn’t agree more with the conclusion that NPP’s (non-programming programmers) should be eradicated. Lately I’ve been, jokingly but with a very serious undertone been saying there should be a world wide register for these individuals so they can’t ever work in that field again, for the protection of everyone who values the work they do.

Lately I’ve been working on a project that involves an API that’s clearly written by NPP types and the entire API is a complete example with 100% coverage of what not to do in .NET. It’s a total inverse of every best-practice as if there was a contest to see how bad one could screw up an API.

Needless to say, once the multitude of problems came up, try to communicate and explain the problem when the other side you’re dealing with consists of NPP types. And then you provide them with profiler output that clearly identifies some very major problems, you point out exactly where, and even explain how to fix it with a few lines of code and you don’t get anywhere with them because they just don’t seem to understand anything at all.

It certainly made me wonder how people like that got their jobs doing what they’re (clearly NOT!) doing. Your post highlights, once again, one of the very serious gravitational black holes in the industry.

I also had interviews with people that have written in there CV 5 or more years of coding experience. But they couldn’t really tell me the difference between an array and a simple object. I should also start with internet interviews.

One line I love in CV’s is the following:

Java/JavaScript -> Excellent

During a round of recruiting at my last job at a tech startup in London I got to experience first hand just how terrible most applicants are.

I interviewed a load of candidates who all claimed 5years + industry experience so I was expecting great things. Unfortunately my incredibly taxing interview question proved too much for them all …

“In any language you like (with no attention paid to getting every last semi-colon in the right place) write a function that reverses a string.”

By the afternoon adding -

“Do not cheat and call your languages’ equivalent of str_reverse.”

No one managed it and I learned why I needed to phone screen people from then on. :frowning:

I like to start things off by handing them a short piece of moderately crappy code and having them critique it. You get a good idea of how they think. We also kicked around the idea of showing them a function and having them write a unit test for it, or vice-versa. Never actually tried that though.

And google docs would be a fine tool for the job. Wouldn’t want to use it for day-to-day coding of course, but it should work OK for an interview.

This tool is a basic version of Etherpad. With Etherpad multiple users can write (you can help the interviewee).

This is rather amusing timing, as just this Friday my colleague was telling me about a friend of his that had applied for a job required 2-3 years experience in PHP/MySQL/HTML/CSS/JavaScript, with strong leaning on OO and MVC patterns, and agile/XP development.

The friend had taken a web/programming course at college 3 years ago, but not a lot since. He’d never even heard of MySQLi or objects.

The thing is - a lot of these guys get through because the first filter on resumes is a human-resources drone who can match up the words written in a resume (tailored to a job description) with the job description. Also, a lot of them get accepted into jobs because the person interviewing them is not a programmer - you’d be be surprised at how many managers don’t bring in one of their experienced programmers into the conversation.

And then these guys sit there for a couple of years - hammering out godawfully buggy and insecure code - and then they can move on and now they have ‘legitimate’ job experience they can use to win the next job.

I like the link to Dunning-Kruger effect - and I’m sure that many people reading these comments will nod to it. But added to that is the general perception that programming is easy (we all hear stories from clients that balk at a fee just because “their 16-year old nephew can do it for nothing”) because it is just drag and drop (isn’t it?), and typing a little (surely?) - this is like thinking that just because you can cement some bricks together into a barbecue that you can engineer the building of a 20 storey building. We need to make programming look as difficult as building a skyscraper - and we should work to make ‘software developer’ a protected profession like ‘architect’ or ‘medical doctor’.

Only allowing state certificated software developer’s to apply for a position should cut down on wasted interview time.

Dunning-Kruger effect

That explains why incompetent people are less likely to realise their incompetence, but it doesn’t explain why people who studied programming to some extend find themselves unable to write simple programs.

As I said before I am not the most competent programmer, but I can write simple programs like the ones linked to in the article and I also program simple things at home just for the heck of it (I have a Haskell program to calculate which pizza is cheapest etc.).

Perhaps the problem is that programming courses tend to teach APIs rather than basic programming?

One thing to watch out for is to not stray too far into academic ground. The first comment said “many people don’t know how to write simplest programs, such as “how to find the smallest common multiple of two integers”.”

I have been programming for over 10+ years and I have never needed to find the smallest common multiple of two integers…ever. I have also never needed to read or understand hex, so I would not expect anyone to know or care what comes after F. I’m positive there are a lot of great programmers who may not know these answers off the top of their heads because they are actually rather obscure (unless you were a math major maybe).

Still, some things are truly universal the FizzBuzz test is pretty good. Some simple SQL is probably a good test also. I once had a Sr. developer who was just hired turn to me and ask “How do you do a ‘outer’ join?”

Ironically, I’m busy experiencing exactly this. I decided to formulate my own assessment that candidates come in to do.

I’ve blogged about this, and intend to collate the results once I’ve got a fair sample of assessment results:

http://thelimberlambda.com/2010/02/09/what-is-a-senior-developer/
http://thelimberlambda.com/2010/02/20/senior-developer-assessment-revisited/

So far, not great … four candidates and not one could generate the first 30 terms of the Fibonacci sequence (detailed explanation of the formula as well as first five items were provided!).

When I was interviewed for my second programming job, I was asked to write a function that prints the nth Fibonacci number. I scratched it out on a piece of paper, and apparently that was so rare the interviewer suspected someone from the company had leaked the answer to me, knowing it was his stock question.

I used to ask the following question as my “hard” question. It showed up some years ago on the Boston Perl Mongers mailing list. People didn’t have to produce working code, but it was helpful to see their thought process:

You have the numbers 123456789, in that order. Between each number, you must insert either nothing, a plus sign, or a multiplication sign, so that the resulting expression equals 2001. Write a program that prints all solutions. (There are two.) This is a pretty tricky problem, actually, if you don’t think to use recursion. I was satisfied with pseudocode, but the Perl Mongers version was to fit the whole thing into 80 characters!

1 Like