The Non-Programming Programmer

February 22, 2010

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:

The article Why Can't Programmers... Program? changed the way I did interviews. I used to lead off by building rapport. That proved to be too time-consuming when, as you mentioned, the vast majority of candidates were simply non-technical. So I started leading off with technical questions. First progressing from easy to hard questions. Then I noticed I identified the rejects faster if I went the other way – hard questions first – so long as the hard questions were still in the "if you don't know this then you can't work here" category. Most of my interviews still took about twenty minutes, because tough questions take some time to answer and evaluate. But it was a big improvement over the rapport-building method; and it could be done over the phone.

After reading your article, I started doing code interviews over the phone, using web meetings. My interview times were down to about 15 minutes each to identify people who just can't code— the vast majority.

I wrote that article in 2007, and I am stunned, but not entirely surprised, to hear that three years later "the vast majority" of so-called programmers who apply for a programming job interview are unable to write the smallest of programs. To be clear, hard is a relative term -- we're not talking about complicated, Google-style graduate computer science interview problems. This is extremely simple stuff we're asking candidates to do. And they can't. It's the equivalent of attempting to hire a truck driver and finding out that 90 percent of the job applicants can't find the gas pedal or the gear shift.

I agree, it's insane. But it happens every day, and is (apparently) an epidemic hiring problem in our industry.

You have to get to the simple technical interview questions immediately to screen out the legions of non-programming programmers. Screening over the telephone is a wise choice, as I've noted before. But screening over the internet is even better, and arguably more natural for code.

I still wasn't super-happy with having to start up the web meeting and making these guys share their desktops with me. I searched for other suitable tools for doing short "pen-and-paper" style coding interviews over the web, but I couldn't find any. So I did what any self-respecting programmer would do. I wrote one.

Man, was it worth it! I schedule my initial technical screenings with job applicants in 15-minute blocks. I'm usually done in 5-10 minutes, sadly. I schedule an actual interview with them if they can at least write simple a 10-line program. That doesn't happen often, but at least I don't have to waste a whole lot of time anymore.

Mike adds a disclaimer that his homegrown coding interview tool isn't meant to show off his coding prowess. He needed a tool, so he wrote one -- and thoughtfully shared it with us. There might well be others out there; what online tools do you use to screen programmers?

Three years later, I'm still wondering: why do people who can't write a simple program even entertain the idea they can get jobs as working programmers? Clearly, some of them must be succeeding. Which means our industry-wide interviewing standards for programmers are woefully inadequate, and that's a disgrace. It's degrading to every working programmer.

At least bad programmers can be educated; non-programming programmers are not only hopeless but also cheapen the careers of everyone around them. They must be eradicated, starting with simple technical programming tests that should be a part of every programmer interview.

Posted by Jeff Atwood
253 Comments

"Well, I am interviewing right now."

How many applications did you receive?

How many did you toss immediately?

On what basis did you make your decision?

Of those you decided to contact for follow-up, what percentage were a complete waste of your time?

How many of your applicants had no zero experience, zero ability, and zero real interest in the job you were offering? Who'd simply fired off an application on the off-chance?

jdege on March 16, 2010 8:59 AM

cvsdave - you make good points, which obviously come from experience. As I mentioned before, the mediocre programmers are the life blood of the industry and not much would get done without them. They should be encouraged and mentored and they should try to determine if programming is a good choice for them. As I said before, if it's not a good choice, they should go on to something else. I don't believe someone's career should be something they hate, but do anyway for the money. Those who love programming will enjoy their career, but those who don't should go on to do better things - like become managers who work better with the IT department, or something else that gets them off. I see a lot of people out there plugging away at jobs they hate, and I realize a paycheck is important, but I don't see much potential in those people, and I would rather mentor and encourage people who love programming, but simply need experience and guidance to become great.

IMO, when a person shows up for an interview, and they can't even code Hello World in a language they claim to know, they are a fraud, plain and simple, and they don't deserve a job flipping burgers, much less a job on a team which needs to get stuff done. We're not an educational institution, and we're not in the business of teaching programming. However, if someone came in for a job which was clearly entry-level, and they were honest and said they didn't know much programming and really wanted to learn, I might take them on and help them out... but they would need to have some skills which can benefit the company, or not expect to get paid. We don't have interns here, but we do have volunteers, and if you really want to learn something and you're starting from scratch, a volunteer position might be a good way to go.

This blog post isn't about the non-hot-shots who aren't in the top 1% - it's about people with no skills at all, and who really are wasting your time in an interview. Those people should be applying for other jobs, for which they have the skills. There needs to be some method of filtering these people out, and simple programming tests are a good way of doing that - and I don't think they should be trick question types - they should be essentially Hello World type tests, just to eliminate the fraudulent applications. The rest can be determined pretty easily in an interview.

Jasmine Adamson on March 16, 2010 10:30 AM

Finding "the smallest common multiple of two integers", and things like that are problems solved in the first or second year in school when you learn programming, and never used. So, I could do this 12 years ago, in half the time I could do it now. And I don't think that I'm twice as bad at programming now than 12 years ago. Exchanging the contents of two variables without a temp is an aha question, taught in the first or second year of learning to program in the school, and never used. % is also very rarely used in real programs. Usually you do the same thing for each element of an array. So, it's better to know how to update an UI efficiently, how to avoid race conditions, than these academic problems. But those need more time to test.

Csupor Jenő on March 16, 2010 1:50 PM

One of the first thing you (should!) learn as a programmer is:
don't reinvent the wheel.
That's a big part of what procedures, oop and general modularity is about.

Mike's program, however useful, bring functionality to us that is already present on the web. Sharing a text document with someone is hardly new ...
Check out EtherPad for quick fix: http://etherpad.com/
Really quite useful, and works at least as good.

Google Docs is free and can be used for the same purposes *with* authentication.

Oligofren.wordpress.com on March 17, 2010 3:07 AM

Having tried that 123456789 problem, I can assure you it neatly fits in a 500-liner including its own small stack machine, parser and code generator (no `eval` tricks!), all in Python. :)

Vladimir M. on March 17, 2010 9:04 AM

Back when we actually used to hire people my job as an interviewer was to assess technical skills, so I didn't go with any kind of super fancy test, I went with a realistic sample of what gets done at our company every day: Connect to a database, spit out some data to a web page.

It was amazing the kinds of resumes that came across my desk versus what they could do. Some were owners of their own start up web based company that made six figures, others had multiple college degrees, others had certifications, etc.

The biggest disappointment was always the college degrees. People leaving college with an Information Systems or Computer Science degree honestly believing that that was supposed to get them the job. Unfortunately the CS departments at just about every university are mired in teaching "Computer Science" instead of "Software Engineering", with no actual usable skills when they graduate. I've had so many flame wars about that topic on Slashdot I've lost count, but since I earned myself a CS degree, and I've attended CS programs at multiple universities I consider myself at least well versed in the subject. About the only thing the degree is good for is making your resume look good.

Dave on March 18, 2010 7:47 AM

Hi I'm a really young developer from germany and reading your article from time to time.
And this article really made me think "WTF?" and want to share my thoughts about it. I really can't imagine that people *really* CAN'T programm.

I'm mean we are not talking about GOOD programming! We are talking about writing a programm for a simple task.

Maybe I can't programm too BUT how can I know? Is this not based on with whom you are comparing with?
I mean there is no test who can say that you can programm or not.

And can you do a me a favor?
Tell me when can someone programm?

Oemer Avci on March 22, 2010 2:12 AM

I'm a painter & decorator and am a hobbies programmer. I would love to work as a programmer but I'm not that good at it. My knowledge is vast, developed over 10 years and dozens of books and half a degree in computing covering concurrency and other advanced subjects but I lack detailed knowledge of anything but so what I enjoy it.

When I come across people who call them self's programmer I love to talk code but often find out they are nonprogramming programmers. It's funny that someone who makes websites in a web framework and does a bit of code editing (usually in PHP) would consider them self as programmers.

I don't think it just programming but this is a problem through out the computing industry. Even more so with web design and Internet marketing.

You even get this in painting & decorating most people think they can paint but they would soon get stuck knowing how to deal with damp exterior walls, repairing damaged wall paper which is no longer in stock and why should paint older properties in vapour-permeable paint.

To be skilled in any field you need to always work with a sense experimentation, with an open mind to leering new stuff. I have been a decorator for 15 years and know more than I did last year and I know that in a years time I'll know even more.

I hate amateurs thinking they are pros!

grunt on March 23, 2010 8:52 AM

The article and comments sounds a little elitist to me.

If anything, more people need to come in into programming. so that in 100 years it will be a basic human capability, which goes: walking->speaking->reading->writing->calculating->programming

you just sound like monks of the 12th century, making fun of the peasants who can't read your copy of the bible and you propose elaborate schemes to screen out people who shouldn't be allowed into the monastery in the first place.

Allocater on March 24, 2010 2:40 PM

@Brandon: Actually, I would argue that it is especially problematic for CS as "Computer Science" and "Software Development" are _very_ different things.

Max Guernsey on March 27, 2010 1:52 AM

If you want to see where it all starts, begin with the AP Computer Science exam. Kids come to us at NCSSM having a 5 on that and they often don't know fundamental things about OO.

Our goal is to teach people how to design, create, and debug a simple working application in Java by the end of the first two trimesters. Our best students get internships at local companies. The people there are happy, as are universities where we send our kids, because we emphasize writing code that works.

It's a novel idea. More places ought to try it.

John Morrison on March 28, 2010 4:14 PM

I would agree that under-trained job seekers is a problem but I blame schools. They convince people with no love or talent for programming to take the CS program because it supposedly is the path to wealth. Then they give students a bunch of history and art classes that have no use at all, a few IT classes that are mostly useless, a bunch of math classes that most will forget before they actually find a use for the knowledge (and then have to relearn when they do need it), and then kind of slide in a few half assed programming classes that aren't long enough to learn an entire technology in-depth but are to long to quickly cover a single topic in-depth. Then you get into the problem that most teachers either don't know their topic well or aren't good at teaching. You're lucky if the graduating student can put together a few lines of code let alone write a complex application or work with others.

I'd suggest Computer Science education needs an overhaul. It needs to a competency-based approach that focuses on specific tasks and tools in short (two weeks to a month) courses. Math, IT, etc should be focused on tasks related to things the student will actually find useful. Could start with a few short courses on basic math, logic, and computers and then some courses on basic programming concepts like data types, control structures, functions, objects, etc as well as different programming environments and tools and finally start getting into common data structures and algorithms. Then layer in classes on specific topics of interest to the student. A basic LAMP web development class should fit in a month and then students could take more specific classes to give them deeper knowledge of the topic. One month I might take a class on Mac OS programming and the next a class on iPhone programming. Maybe later I'd take Java and then Android programming. Another student might take embedded device programming and digital signal processing. A CS program that teaches just basic programming theory and then a couple OS theory classes is of limited use. As technology grows and changes so rapidly it makes sense to promote on-going education too. Although I have a CS degree I might want to come back and take courses on programming for iPhone and Android.

I think standardized tests for any course, and degree, should be a given too. And not just for CS. A degree from my local university should mean I know everything someone from MIT has to know to get the same degree. Likewise someone from MIT shouldn't have to know more to get the same degree. If they know substantially more they should be able to get an additional degree. Taking the tests, and being issued a degree, should be free (or no more than a small administrative fee). Testing should not be done by the same people doing the teaching. That seems a conflict of interest to me.

Michael McGlothlin on March 28, 2010 7:25 PM

I've done some phone interviews over the last year for prospective support guys.

Our support guys have to be able to dig into code and figure out what might be broken. Since the code is mostly C under Unix, I ask C and Unix questions. Easy ones.

I apologize first, but explain we just need to make a cursory check of their knowledge.

One couldn't answer "what does * mean in C?" Couldn't come up with pointers or multiplication.

Another couldn't tell me what "static" meant in front of a function or global variable declaration. Just kept telling me the same thing - what it means inside a function (and sounded like he was reading it from something.)

Walter Dexter on March 28, 2010 7:31 PM

I've done some phone interviews over the last year for prospective support guys.

Our support guys have to be able to dig into code and figure out what might be broken. Since the code is mostly C under Unix, I ask C and Unix questions. Easy ones.

I apologize first, but explain we just need to make a cursory check of their knowledge.

One couldn't answer "what does * mean in C?" Couldn't come up with pointers or multiplication.

Another couldn't tell me what "static" meant in front of a function or global variable declaration. Just kept telling me the same thing - what it means inside a function (and sounded like he was reading it from something.)

Walter Dexter on March 28, 2010 7:31 PM

Just adding my 2 cents.
I've never apply to any programming jobs. I usually read the job posting, see "Computer Science degree" as a requirement, and look no further. I figure I don't want to waste someones time if they are looking for that. Job applications for programmers really can be improved by not letting the HR people write a hundred different keywords and instead describe exactly what the job entails. Like "The hired programmer will need to know C on the x86 platform, use library X, Y, and Z, and use MVC." If they are still interested by this point, proceed to a "prove it" test.


But the thing is, every job I've wound up working (call center work mostly,) I wind up doing programming because they don't have any competent people, or... the people who originally wrote this stuff have left or were fired (because they aren't being employed as programmers they won't turn over the source code.)

At once place, I wrote something that parsed the content of their billing system and cross-referenced it with the long distance and in-network calling. Turning what was often a half hour phone call into a 2 minute call. Why they didn't have this capability in their billing system, I don't know. That was written in VBA.

At another place I wrote a script in xslt because the only tool they had was the web browser and notepad, and I needed it to read files on the shared drive.

Then at yet another place I re-wrote something they had from scratch using jscript because they had updated their tools and could no longer use their macro language tool (macro express) to do something that required a lot of manual cut and paste. Again taking a 10 minute manual work into a 20 second script.

But none of these places I was ever hired to do programming, I was hired to just to follow hardline policies on customers. So the tools were written or modified, often on the fly due to changes in policies. For some reason they don't actually have their programmers sit down with the customer service staff and take notes while they they use the tools being programmed.

Anyway, I frequently wind up being the person who is unsatisfied with the status quo, nobody asked me to do programming at these places. I just happened to figure out what was within their policies and not locked down, even if it was the most horrible out of date scripting language on the system.

A true programmer can learn what is needed to do the job.

kisai.livejournal.com on March 28, 2010 10:53 PM

What really bothers me is all of the so called professionals commenting here who have absolutely no clue about the difference between Computer Science (CS) and programming. Sure, there is some overlap in the Venn diagram of the two, but Computer Science is primarily a research area in applied math. If you want to be a programmer, find a program in IT or programming or software engineering. To the interviewers, don't expect a CS graduate (especially a graduate from a good or top CS school) with a BS to be a proficient code monkey, as they learn the mathematical basis of two major subjects: algorithms and automata (mathematical computers). The common CS curriculum should not be changed to a vocationally geared one either, even though all the managers out there would like that! Vocational programming programs do exist.

daaxix on March 28, 2010 11:28 PM

I'm concerned that a "programming and human factors" blog is jumping to this conclusion rather than addressing the human factors issues.

(My background: I'm a computer scientist and HCI researcher who has interviewed and hired programmers.)

Suppose I was interviewing Jeff for a human factors job. I ask him:
"Jeff, why do you think programming interview candidates usually fail simple coding tests, even when all the other empirical evidence (their career thus far, references, and degree from a top rated university) suggests they should be competent?"

And he responds:
"Because they're just all that dumb; top tier university professors are monkeys who can't assess students; the exam results are all fake; and programmers' bosses are all just chimpanzees that can't see whether any code is being produced even though they are programmers themselves. The empirical evidence from the rest of their careers is wrong and my toy interview question asked by an untrained interviewer over the telephone is right!"

Jeff would not be getting the job -- however much the grumpy misanthrope in me might want to cheer him on!

Like it or not, from a human factors perspective, coding at interview is very different from coding on a job. To use a loose but obvious analogy: a great many people struggle at public speaking -- shove a microphone in front of them and say "talk about rain" and they go "um, er, um... Mummy can I go home now?". That does not mean they don't know English or what rain is. Dumbing the question down to "ok, well just talk about water then" doesn't solve the problem. Similarly, if I'm hiring a engineer to design the plans for an extension to my house, the best test is not "draw me a cartoon of an igloo in the next ten seconds".

In an interview, we have a fake task (nobody wants to use the code), in a fake setting (an interview), via a false interaction (over the telephone!), with a false assessment (one interviewer whose word is God, no compiler, no user, no sales, no code metrics or unit tests), a fake timeframe (a few minutes on each 'project'), false pressures (your job depends on the next ten lines of code), and somehow we expect to have valid results. Speaking as a scientist, that's just nuts.

Fine. At this point, most people reply "Sure, but we don't care about missing out on good candidates, only not hiring bad ones." But I have worse news for you. You are probably still hiring as many bad candidates as if you selected your candidates by rolling dice. Most interview coding tasks are so over-simplified that they no longer select for programming or thinking skills at all -- the "programming on stage" skill dominates completely.

The irony is that by selecting for "skill at interview coding tasks" you are effectively selecting for people who have done a lot of interviews -- but you actually want to hire the guy who has hardly done any interviews because no company ever wants to let him leave.

Wbillingsley.blogspot.com on March 29, 2010 12:49 AM

its because of the irrelevant on-paper requirements of the human rights departments. its beyond irrelevant for a single department to be able to set entry standards for all departments. since hr dept. cant be an expert on any other technical branch, they dont know zit about what requirements to set. therefore, they just read the references and certificates that are put in resumes, and get people to interviews. had it not been for the relevant dept. heads that interview the candidate, lots of crappy candidates would actually be hired.

what should be done is to relieve human resources dept from hirings and firings. these should be performed by individual departments themselves.

Ozgur Zeren on March 29, 2010 1:05 AM

From way up there "Reverse a string". It's been literally a decade but... not using a string reverse function but anything else.

lemme see. stdio.h, strings.h, int a,b string str1[]="your string", str2. main blah blah.
a=strlen(str1), b=0, do str2[b]=str1[a] a-- b++ while a != 0 close all squiglys mash compile... swear. And if I was paid by the hour that's a days work... :D j/k

Figured a for do might miss the last character off but whatever.

Moving on. The problem is the requirements of a job can be exceptionally out of whack to what the position really is. This is more prevalent here in the UK where you have intermediaries such as agencies replacing your own HR department. You tell them you want an entry level programmer... that spawns an advert for something akin to a senior analyst (multiple languages multiple years, lots of experience, project management skills, University degree 2:1 or above, etc.) so the people coming through the door are either going to be vastly over qualified for what you want... or fakes, you might get lucky and a hobbiest appears but... agencies often filter those out due to lack of business experience.

So quite often if you've employed an agency the reason your getting the wrong thing is you've not explicitly and forcefully told the agency EXACTLY what you want; you gave them some leeway and they've gone and made a right mess out of it. At least one agency has had the gaul to slap a BSc on my CV, not tell me they were 'fixing things' and send me off for an interview; I looked a right pillock.

MistressSarahH on March 29, 2010 2:23 AM

I was reading the original article, and I have to post here, because comments there are closed. There was a post there about how a hiring manager wants people who can do modulo-16. I've been doing development (and not web development, nor scripting) for over a decade, and I don't even know what modulo-16 IS. I don't want someone who can do modulo-16 during an interview, I want someone who can recognize he needs modulo-16 and teach himself how to do it in a few hours.

Mark Parker on March 29, 2010 7:55 AM

I don't have a degree, though I have taken a few university courses. When I was 15 someone felt that it would be wise to point me at Knuth, a thing for which I'm very grateful, though I expect I would've stumbled across computer science proper eventually on my own.

People who have been working in a particular application area but are not familiar with basic CS concepts are not people I would ever consider hiring unless I was hiring them to do exactly what they were doing before, and even then I would have some misgivings.

In my opinion, it is your professional responsibility to educate yourself about stuff like this, not just for interviews, but so you become a better programmer over time. Knowing hexadecimal, for example, aids greatly in the understanding of various things because base 2 and magic numbers (at least seemingly magic in base 10) associated with binary occur all over the place. Being intimately familiar with the numbering system that computers use at base is going to make you better at your job, plain and simple.

And I would not ding a candidate for asking me what a prime number was. But if they couldn't code up something involving searching for them after being given the definition, I would question their programming ability.

I once did meet a candidate who could program, but who couldn't code during an interview. I realized this was the case because she had some very low-level work with ELF format binaries on her resume and when I asked her detailed questions about it, she knew the answers. I admit that we all likely gave her the benefit of a doubt because we wanted a bit of diversity, but my intuition turned out to be correct, and she was one of the better programmers on our team.

So I always ask for code during an interview, but I do not demand it. But if a candidate can't code for me, I am extra-careful to probe the candidate's background and ask detailed questions to make up for the fact.

I have not experienced the "hordes of non-programmers applying for programming jobs" problem. But most companies I've worked for have had good recruiters that screened candidates for us. I can easily see how you would fall into using coding questions as a screening tool. But I think that risks some false negatives, false negatives you would be sad to have missed had you realized it.

Omnifarious on March 29, 2010 9:14 AM

Jeff,

I'm not a programmer, but in the past the situation was similar in the publishing industry: There were lots of people with English degrees who thought they could be "editors." The part of the industry I worked in (postsecondary textbooks) developed simple copyediting tests to weed out the posers.

Now, whenever someone asks me for advice about becoming a nonfiction editor, I tell them to forget whatever they learned in "English class" and instead prepare for a practical copyediting test based on the style manual in their chosen field. This makes most English majors very unhappy.

Dave Spiech on March 29, 2010 12:07 PM

The most important thing, though, is whether or not someone can do their job.

Because nowadays there are many types of developers/programmers and it would be a bit conceited to assign superiority to one class. Why is a web developer who only works with APIs and writing glue code somehow less than a guy who does assembly for a living? If this was the case, why would that web developer be paid $90+k in the Silicon Valley and the assembly programmer be worthless?

If you were hiring a frontend developer for a 9-figure high profile startup soon to go IPO and make everybody millions (I dunno, maybe a Zynga or Playdom?) would you care more that the guy knows his algorithms, or that he is aware of cross browser compatibility issues?

Again, the important thing is that the person can do the job.

Ambert Ho on March 30, 2010 3:47 PM

77 chars, using the shell suggestion by itub
map{print"$_\n"if eval($_)==2002}glob(join('{,+,\*}',split(//,'123456789')));

Ed Sznyter on March 30, 2010 4:13 PM

I once had a PhD in Computer Science that could not program. This person was so incompetent failing even the most elementary programming assignments. Now the question is was it could not or would not?

What's the difference if as a manager you have deliverables and they fail you. To make a long story short they eventually quit and now teaches programming at the University level. OMG, WTF

Bernie Riemann on March 30, 2010 5:14 PM

Having just stumbled across this site, looking for a keyboard for programmers ironically, I think I have an answer to this burning question. It simply boils down to the fact that (in my American experience at least) the College/University degree programs for software development glorify irrelevant garbage, like Super-Scalable-Generic-Jargon-Speak, and make light of the skills that are actually useful. I had a teacher that demanded a design for every program we wrote, minimum length was three pages, and it had to be written like paper for a Liberal Arts class. One of my fellow students actually had to ask how to put text on a button in a Junior level class.

I laughed at him, vehemently
Failed out of college
and now have a job writing software for business/inventory management applications.

Nic Bland on April 7, 2010 9:17 AM

About 15 years ago, I went through a battery of phone interviews for a little known company in Redmond that starts with the letter M and ends in the letter T and has icrosof in the middle.

Anyways, I passed the phone interviews with flying colors and proceeded to get flown out and do the standard 3 group interview process (interviewed by 3 different teams).

So, to prepare.. i'm thinking, this is (you know) so I should bone up on my (you know) technologies, buzz words, etc...

Well, it was a disaster. I went in with the totally wrong mindframe. I was asked these questions about reversing a string so that each word was reversed but the still in the same order, and various other algorithmic questions.

I just drew a blank, because I was totally prepared for a different kind of interview, and I found myself in shock over what was being asked of me.

Needless to say, I didn't get offered a position. But it did teach me to despise this sort of interview. I have no problems with doing relevant code samples, but unless you're absolutely in need of someone that can think on the spot after being suprised by the interview... what's the point?

Nobody Real on April 8, 2010 11:58 PM

I made a similar (free) online programmer interview tool using Silverlight (real time code viewing; simple chat included for discussions). You can find it here: http://www.vladhorby.com/Coderproof/

Vlad Horbovanu on April 9, 2010 12:58 PM

I'm floored by the asinine and stupid comments on here from a bunch of effete snobs. I have written hugely complicated analysis systems that would put most people to shame - yet I have no frigging idea how to compute a 'fibbonaci' number. Nor do I care to. If that's what you are using for a 'screening mechanism' then you have no damn business interviewing anyone and should just crawl back to the cubicle you came from. I've both interviewed and interviewed bit twiddlers like I've seen here who have some vast sense of self-anointed superiority about their 'programming skills' who couldn't program their way out of a wet paper bag, and then ask idiotic programming questions like the ones I've seen on here. Amazing. I'm glad I don't work for the likes of any of you.

nowhereman on April 10, 2010 4:17 PM

And really, who gives a **** whether or not I can write a function to reverse a string? Isn't that what the g*******d API is for? Tell ya what, skippy. You pull out your portfolio of work and I'll pull out mine, then we'll play rock-paper-scissor-spock and see who wins. Someone who writes code should be able to do exactly that - pull out a damn portfolio of past projects and work - and that ought to settle the question right then and there - so let's move on to something more relevant and germane to the situation at hand, shall we, mkay? Good.

nowhereman on April 10, 2010 4:21 PM

Schwartz -- You're actually incorrect. The reason manhole (personhole) covers are round is so the cover doesn't fall down the hole. That is the *correct* answer. Oh, and for the record? Ex-Microsoft, still an alum - '92 - '94. Yes, I was one of the 'chosen ones' and they did ask questions to gauge my intelligence and my perception - but they didn't ask me idiotic and stupid algorithm questions.

nowhereman on April 10, 2010 4:46 PM

@Barney - what, exactly do you find so preposterous? That someone would steal your solution? Guess what, dude - that happened to me. I had a company *fly me down* and put me up in a fricking hotel overnight so they could get a free consultation in the form of an interview. My god, your ignorance and naivete are frightening.

nowhereman on April 10, 2010 4:50 PM

Pixy - You're really getting on my nerves, you know that? So you're telling me you went and 'interviewed' the last doctor that you went to, right? I don't give a crap about whether or not someone can program a stupid algorithm. I DO give a crap about whether someone can consider multiple approaches to a *PROBLEM* and tell me what they see as the pros and cons of each approach. I can hire a bit twiddler from India. What I WANT to hire is someone who a) isn't some retrograde morphodite thumb-sucking ass-backward programmer with the social skills and adaptability of a rock and b) someone who may not know all of the answers but by God knows where to go and get them.

And by the way - there is no one 'right' way to write anything or code anything. If this line of work was easy, everyone would do it. There are more optimal and less optimal ways of solving problems in programming. Again, effete snobbery. I'm so glad you don't work for me. You wouldn't make it past the first five minutes of my phone screen.

nowhereman on April 10, 2010 5:03 PM

Jasmine:

IMO, when a person shows up for an interview, and they can't even code Hello World in a language they claim to know, they are a fraud, plain and simple, and they don't deserve a job flipping burgers, much less a job on a team which needs to get stuff done. We're not an educational institution, and we're not in the business of teaching programming. However, if someone came in for a job which was clearly entry-level, and they were honest and said they didn't know much programming and really wanted to learn, I might take them on and help them out... but they would need to have some skills which can benefit the company, or not expect to get paid. We don't have interns here, but we do have volunteers, and if you really want to learn something and you're starting from scratch, a volunteer position might be a good way to go.

Really? They don't deserve a job flipping burgers. My god - you really are hardcore, aren't you? And how did you, oh might master of programming, get your start? See, I have real problem with people like you - they get filed under 'flaming ahole' - because ultimately, that's what people like you are. They. Don't. Deserve. A. Job. Flipping. Burgers. Man, what a piece of work.

nowhereman on April 10, 2010 5:09 PM

This is mainly why i do not work in the industry. The code should be actually an art of transposing your ideas in the binary world. But for what i've seen in my university and for the people who finds jobs, they are mostly incompetent. When you don't know what is a pointer or a variable, i can tell you for sure there's a problem. I've been coding now for at least a good six years on and off and primarly because i love it, i'm still a student in that way until i find the right job and i'm allowing myself to see something different.

Programming is just mathematics that makes sense, the bug is just the human behind it.

TG on April 11, 2010 3:59 PM

Wow. I read this article yesterday, and I was shocked.

I decided to try a Perl implementation of this, assuming all integers greater than 0 and less than 101 to be the "numbers".

Keep in mind that I don't have any formal/institutional programming knowledge/experience; all that I know about programming I have found on my own (or, occasionally, asked on a forum).

So, using "vi", which I am still quite new to (and struggling with), I managed to get a working Perl implementation, along with some added formatting (commas, spaces, and newlines).

Also, it tells the user when it is finished. Finally, I left room for easier modification, if it would need to be expanded. There are also some comments where I had lines I was using for testing/debugging.

Now, here it is:

http://pastebin.com/39JT0eNA

Of course, this is not "good" code, but it does work. I doubt it would allow for a successful interview, but nonetheless, it is really scary how easy it was for me to get a working implementation, since people that should know far more than me, apparently can't make it happen.

Jared Brees on April 15, 2010 8:26 AM

For what it's worth, I've had this issue both when I was a developer participating in techincal interviews and as a hiring manager - and the problem IS getting worse.

Part of it is that more and more of the competent software engineers I know are retiring, early, out of the field, simply tired of working under ludicrous conditions (chaos, no requirements, no process, etc). The other part of it is that most organizations, with the exception of a scant few, don't really spend time nurturing their developers or creating real software engineering groups - most of them care more about code slingers - then wonder why their projects are delayed and don't work.

Don't get me wrong half the problem is that most business units have no clue on how to approach a software development project. But the other half of the problem is unacceptable incompetence on the part of the software development manager and team.

And all the management consultants aren't going to help if a) you can't define the problem you're trying to solve b) you have truck drivers that can't get out of first gear!


Sam Adams on April 16, 2010 7:31 AM

I tried codability an only scored a 19/100 on their example program. I don't think it's adequate on showing who can program or not. Especially given only 30 minutes to complete a program that requires some degree of extensive testing.

Programmer415 on April 22, 2010 3:38 PM

"Equilibrium index of a sequence is an index such that the sum of elements at lower indexes is equal to the sum of elements at higher indexes. For example, in a sequence A:


A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0

3 is an equilibrium index, because:


A[0]+A[1]+A[2]=A[4]+A[5]+A[6]

6 is also an equilibrium index, because:


A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0

(sum of zero elements is zero) 7 is not an equilibrium index, because it is not a valid index of sequence A. "

Try solving that in 30 mins with little testing

Programmer415 on April 22, 2010 3:45 PM

When I tried to find developers for my company, I also faced with this problem. It is very difficult to find well-experienced programmers with good programming skills. All of them already have well-paid job or work as freelancers and do not want to be hired by somebody. The only thing to do in this situation is to hire guys who have great potential but do not have sufficient programming skills as probationer and teach them.

Worksforweb on April 28, 2010 7:46 AM

@Programmer415 I've got 100 just by being deliberately accurate, forcing myself to find an O(n) algorithm and remembering about edge-cases. That even worked on the first run (their test button), and was fun overall (at least in Python).

Vladimir M. on May 5, 2010 11:34 AM

Maybe if companies didn't focus so much on stupid buzzwords and focused more on skills and viewing the programmer's portfolio, these things wouldn't happen. I don't even bother applying for jobs when the job description is loaded with buzzwords. Most of the time, I can't even tell what the day-by-day activities of the job would be after reading the job description. Employers lie through job postings and job candidates lie through their resumes. In the end, both parties are disappointed and so much for 'automating' those 'streamlined' 'solutions'.

Benjamin Kohl on June 23, 2010 5:45 AM

My ruby solution

100.times{|j|
i = j+1
outt = i.to_s
outt = "Fizz" if i % 3 == 0
outt = "Buzz" if i % 5 == 0
outt = "FizzBuzz" if i % 5 == 0 and i % 3 == 0
puts outt
}

Prognosticus on July 17, 2010 10:52 AM

Bravo for a wonderful blog and we will be very useful
Some time ago that I was coming on your blog and I must say that it's always so interesting!
duo sexe , voyance par audiotel , Voyante , voyance par telephone , voyance en direct , voyance par téléphone , medium

lora on August 10, 2010 6:19 AM

I decided to throw in my 2cents about the issue (it is rant, copy-paste from original blog post:

In (awkward) defence of the non-programming programmers

Recently in response to a new site, codify, there was an uprise in the blog-sphere about the concept of non-programming programmers. Reference article the one in coding horror. Although no-one reads my blog yet , I would like to throw my 2cents.

I will defend the non-programming programmer. There are many and they are needed and many companies want them. That's why, that's the unfortunate truth.

I happened to be (for short term periods, I could never stay for long there), in companies where:
Accounting is being done by accountants,
Graphic Design is being done by graphic designers,
HR by the HR team,
etc...
and "Programmers" do everything else.

Usually they are tech savvy people with some knowledge of coding, that spend their days doing: configuration, customer support, server or general administration and eventually... some programming.

They are good for their company (they can do anything), don't complain a lot, do all tasks quite well. Remember we are not in a software company so the tasks are usually trivial, that's why. They also don't spit out spells like TDD, Merging, Continuous Integration that are some fixations of some remore ultra-geeks... Even the clients are usually happy that they can "talk to the developer" straight.

Who is not happy? The real developers and software engineers, people who can think algorithmically, want to do their... job, and get working in such environments.

Besieger on October 13, 2010 2:45 PM

@paul:
>>>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.

Are you sure it is 2001? I think it is actually 2002. I actually wrote the program in java and then also verified it with awk/bash.

Fakrudeen Ali Ahmed on November 27, 2010 9:34 AM

Once our company hired a guy and he was assigned to my team (I was not involved in the hiring/interview process). I assigned him one task and he came back to me next day and said that it can't be done, because no documentation is available anywhere about it. What he done was, he googled the name of the class / function from our code base and tried to find the solution from the web. The amazing thing is even after I pointed out to him what he is trying to do, he is defending himself to the point that it can't be done because its not in the web!

Kannan on December 31, 2010 1:18 PM

I always get really pissed off when I hire an outsource guy that says he can code, but ends up just copying code off forums and tweaking it to fit the project instead of making good quality code. the "seemikecode" site is pretty sweet. I haven't tried it yet.

Another site I just found, though, that kinda speeds up the process for coders, is ColorinHTML.com. Check it out, y'all might find it useful. You might even be able to take a "coder" to it to see if they even know what CSS is! Ha!

Grant Smith on January 18, 2011 9:53 AM

Are they allowed to use the API documentation? One issue that I have is that having used several languages is that I can't keep the various libraries straight (most of my jobs are SQL Developer so I am an expert on any one programming language).

If you ask me to write something simple with basic arrays/etc. no problem. But once we go into the library, I would probably need to refer to the api reference. So I was wondering if that is considered not being able to program under your test.

Cervo on March 3, 2011 3:37 PM

I have been employed as a programmer for 10 year and I can assure you that I have created and maintained a great deal of code in that time. When I'm at work I have time to think about a problem until I figure out the algorithm, but doing it on the spot when I know there is a time limit, or on a whiteboard in front of a group of people I find very difficult. To find the author of this blog sitting back and calling people like me "non-programming programmers" makes me want to vomit.

Tzuccolo2001 on April 11, 2011 11:12 PM

My favorite interview question I was asked:

Interviewer: "Do you know what a thread is?"
Me: "Yes"

Then, before I could elaborate, he moved on to the next question. Needless to say this shop ended up with lots of NPPs.

Chris Eagan on July 28, 2011 5:32 PM

Not only do I wonder "why do people who can't write a simple program even entertain the idea they can get jobs as working programmers?", I end up screaming at the TV when some idiot says "well, I'm a programmer, but I'm only doing that to pay the bills, I really want to be a property developer".

Argh!!!!!!

I've spent 20 years trying to get people to pay me to use my innate skills and aptitude as a programmer, and ending up working as a builder To Pay The Bills, and there's incompetant d*******s like them out there who don't want to do the job I do want, and want to do the job I don't want. What is it with today's society?

I've only got the development job I've got now because the lady who recruited me refuses to use agencies and HR people and tracks down people personally on individual recommendation.

Jonathan Harston on October 6, 2011 2:45 PM

Programming is more art than science in my opinion, people can copy paste make tweak and still can manage to get it work but thinking programatically,or producing solution , algorithm and even writing a quality code is art, you just don't see on every single programmer, out of all programmer and developer only 2-5% qualify as excellent and those are the ones who drives all others.

Thanks
What to review while doing Code Review

D on October 8, 2011 2:51 AM

«Back

The comments to this entry are closed.