The Non-Programming Programmer

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

Back when I used to hire programmers (c 1990-2000) for a computer games company I used to run, we used to do a programming test during the interview and this weeded out a lot of people who claimed competence but really had none.

(My favourite example was someone who had written ‘Assembly language programming’ on their CV but didn’t know how to answer the question ‘for what processor?’ in the interview. Also, I interviewed someone once who, when asked what their hobbies were, replied “I smoke a lot”)

But what really astonished me was the level of BS on people’s CVs. People claimed to have written famous hit games when they had not (we knew the people who actually did write them) or people who claimed to have worked for MI5, the CIA or Mossad. If they had worked for these organisations they wouldn’t say so on their CV. If only out of self-preservation, never mind the Official Secrets Act. This made me think that a lot of the stuff on CVs that was harder to disprove was also BS.

In the words of Ronald Reagan: “Trust but verify!”

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

Surely calling the use of built-in functions in a programming language “cheating” is somewhat excessive? I find it hard to believe you’d be looking for the kind of candidate that would prefer to invent their own broken-ass string parsing functions instead of relying on standard libraries.

I mean I understand what you’re getting at, but “Nooooooo! Stop cheating!!!” seems like a pretty poor way to handle your own failure to write proper explicit instructions :wink:

Well, the point is that they aren’t testing whether you can reverse a string or not. They’re testing whether you can come up with an algorithm to solve an arbitrary problem. String reverse is kind of a lame example when compared to what you’ll ever actually have to do, but it’s a reasonable test of whether you can think through iteration and loops.

Also, it’s not just programmers who have this problem, it’s really any skilled profession that doesn’t have a meaningful certification. I’ve seen it interviewing carpenters. 3D graphic artists are the worst, because everyone who’s a little artistic and has pirated a copy of 3d Studio max thinks they can apply for the job. We had I kid you not ten different applications whose portfolio consistent of the same 3D Studio tutorial.

More than a decade ago I applied for a programming position and sure thing they made me code the solution to a rather complex problem. As it was my style back then, I wrote comments all over the code and I added an about message on top, sort of like: written by…
I didn’t get the job. They never really gave me an answer as to why. A few months later, a very good friend of mine got accepted to another position on the same company. He called me a few weeks later to tell me that he saw code that I wrote in one of the company’s main product. When I asked to describe the code he described what I wrote during the interview. However, what gave the code away was my about message and my comments: they didn’t even remove them! They just blatantly used my code.
In the following interviews I had over the years whenever someone asked me to write code as part of the interview, I would point them to my web site, then excuse myself and I would leave the interview. I DO NOT WRITE CODE ON INTERVIEWS!
That shows nothing.
My background: more than 20 years coding in C and ASM for Unix, Windows, and Mac. Over 10 years of information security consulting where I find exploits and vulnerabilities for common programs

1 Like

Jeff,

Over the years I’ve used quizzes, on-site programming questions and take-home programming problems as part of of the interview and screening process. I’m always amazed at how much you learn by asking someone to write some code. I’m also amazed at how frequently people bomb these fairly easy problems. Sometimes I even have candidates that refuse to do the programming problem! It’s like they feel offended that I’m asking them to demonstrate the very skill I’m considering hiring them for. The nerve of me!

While I think I’ve gotten better at screening and interviewing over the years, I think the best approach I’ve found is to hire people on a contingent basis for 3 months (consulting contract) with the understanding if both parties are satisfied about the arrangement after that time, then they will be converted to full-time.

@Andreir.wordpress.com

I feel compelled to point you to http://xkcd.com/385/

There should be an international association that accepts software developers into its ranks after some sort of peer assessment process. I have noticed a few of these while browsing the web, but I haven’t had a chance to assess their effectiveness or reach.

Accountants, doctors, lawyers and engineers have such associations with exams and strict qualifying criteria – programmers should to. I’m sure that NPPs will still sneak through, but I think that it would help.

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

I have to agree with an above commenter here. While I understand the intent of the task you’ve set, you make it seem like this having to add it is a bad thing. Frankly, my first instinct would be to shoot for that with the idea that “Hey, I know the language, DRY, and surely this is a trick question just to weed out the people that can’t focus on solving problems efficiently and quickly.”

Considering I could write the function myself without trouble, I’d be more likely, after finding out I’d been dismissed for using the native function, to post about the company as “a company that doesn’t even know the languages they are using and obviously using non-programmers to do the hiring.”

Basically, if you are going to ask for coding samples or actual demonstrations of code writing, make sure you clarify what you want. After all, while you want a coder, you also want someone who get’s the job done efficiently. And punishing someone for solving your problem within the limits outlined quickly and efficiently really suggests that maybe you aren’t a great place to work.

Note, I’m not suggesting that this is the OP’s work place. Rather, a warning to those who would use these methods.

I have to side with Ryan Bergman on this one. I’ve definitely been stumped by those academic-style questions before, and have grown to loathe them. Especially in the nerve-wracking environment of an uncomfortable interview. What those questions usually prove is not that I cannot program, but that I cannot remember the algorithm to do something off the top of my head. Give me the algorithm, and say “code this”, and I’ll be just fine.

But I really thing one of the bigger issues at hand is simply that most programmers have no portfolio they can show you. If all you ever work on are closed-source projects you don’t own the rights to, then you can never share more than a bullet-point in a resume about them.

This is one area where participation in open-source projects can be very important, in my opinion. It gives you something you’ve worked on, in a calm environment, that you can openly show to anyone who is curious. Of course it can be a double-edged sword, and many people may simply not have time to do that in excess to their day job. Regardless, it is one possible solution to a problem that we all seem to have.

Pfff…it’s easy to just say “they can’t even program”, but at the very least you should tell us what questions you’re asking. Maybe the guy who wrote that article is a complete tool on the phone and very off putting…who knows. Easy to throw grenades.

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.

Isn’t this exactly the sort of programmer you would want to hire?

She wasn’t incompetent, like you claim, just ignorant. But despite her ignorance she figured out a way to calculate the modulus anyway.

Programming is about solving problems. Later you may learn an easier way to solve that problem but the important thing is to have a problem solving ability to start with.

When I was beginning my professional career one of the first interviews I had asked me to write an array. This freaked me out and I couldn’t answer. Not because I didn’t know but because I felt like I hadn’t heard the question correctly. I had passed the little test the placement put me on (Getting a 70-odd percent in SQL, even though SQL isn’t my competence) and they thought I would be a good fit. The second interview had me do the exam by telephone. This sucked because you’re stuck on the phone, thinking of an answer, but have to break your concentration so they don’t think you hung up.
The third interview went much better. It was in person. We talked about my experience, resume stuff, and at the end they gave me a takeaway assignment. I had sent it back before the end of the day and had another interview a few days later. Although I was offered the job I didn’t take it.

I do believe that the interview process can be a nerve-racking experience. Like dating, when you’re taken everyone wants you. You’re confident, experienced, have all the right answers. You are polished. When you’re looking for work you are under pressure, lack confidence, and the stress can make things fall apart, quickly. Answering simple questions can send your mind racing.

BTW, I didn’t take the job because I had made my mind up to do some travel. Malaria shots take 2-3 weeks before you can travel. Without worrying about being accepted, the interview was less threatening

“I DO NOT WRITE CODE ON INTERVIEWS!”

Just write bad code. What’s the problem? If all they want to see is whether you can program at all, doing a bad string reversal should be sufficient to differentiate from those who can’t even do that.

While I tend (and want) to believe that application development is not computer science, I also think that some basic knowledge of computer science concepts are required, even if we always work with APIs rather than our own algorithms.

For the interview purpose I would assume that a string reversal that works on ASCII only is sufficient to show that I have an idea of what’s going on. Framework-provided methods work on unicode as well. Excellent, that’s why we use them.

Hey Now Jeff,

Programmers should be able to code & use SO for assistance with detailed questions. Nice Post.

Coding Horror Fan,
Catto