The Non-Programming Programmer

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.

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.

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.

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. :slight_smile:

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.

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?

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!

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.

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

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.

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.

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.)

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.)

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.

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.

1 Like

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.

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.

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… :smiley: 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.

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.

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.