The Non-Programming Programmer

Would you expect a senior software engineer how to implement a specific algorithm in language x?

Yes. Hell yes. Never mind senior software engineer, I’d expect that of a junior programmer.

I wouldn’t expect someone to implement a flawless C++ quicksort on the spot, but I’d certainly expect them to be able to sketch out a decent sort algorithm (any of quick, heap, shell or merge sort), and know that it’s better than bubble sort and why. I don’t expect programmers to be writing their own sort routines very often - if they’re doing that, there’s something wrong - but I do expect them to know how sorting works and what the costs are, that there are different ways to sort data, that the different algorithms have different costs and characteristics.

If you can’t do that, you’re the problem. If you don’t think it’s necessary, you’re even more the problem.

I know there are different sort algorithms and there are pros and cons on each but could I off the top of my head sketch out an implementation for each algorithm probably not.

Yes I would expect a coder who is having to write a sort algorithm would know how to do it. Even better know of an existing framework to do the required sort algorithm.

But if I had to review some code I would ask myself what are the requirements, and it was sorting then I would make sure I re-acquainted myself with the finer details of sort algorithms in the language I was reviewing.

So maybe we have similar viewpoints just at at different ends of the scale?

I can think of few reasons.

  1. There is a heavy demand for Programmers. unlike other professions, every field right now needs Programmers. Supply can not match up with it. It is not easy to find good programmers, as they are mostly already taken up by big instutions.
  2. Scope of programming is increasing exponentially. Most of the people are good in one technology and they just learn that without learning computer science and become programmers. My friends who studied Electrical Engieering, have done few c programs - thats it. They did not get job in their field. many of them did a crash course on MQ Series and landed on Job. they could know most of the MQ Series and they would think they are programmers but when you ask them simple algorithm questions or from Java or Perl they would blink. Only who have the bredth knowledge and can dive into depth can ammuse you. we have lot of silos.

Oh, people, just remembering old book “Hackers - Heroes of the computer revolution”. People who made computers and a lot of discoveries in the programming field were not a programmers! Do you know why? It’s not important to do this job and other one!

But you don’t have to use fancy math (mod operator) to solve fizz buzz.

Since it is based on a game children play, how would they solve this problem? I imagine they would use one hand to count up to three, and the other hand to count up to five. Every time one hand reaches three, they say fizz, and every time the other hand reaches five, they say buzz.

No fancy math. Just counting.

I apologize for butting in, but you guys just don’t realize how good you have it. In order to practice their craft, people in other fields have to buy all kinds of equipment, parts and tools just to do something basic. For some, it takes years to accumulate those things. For others, they’ll never be able to practice their craft outside of work or outside of a university.

But you can practice your craft almost anywhere. Along with books and magazines, you can get your “parts” and “tools” from wikipedia, blogs, forums, etc. Professionals from major companies will even respond to nobodies like me in their blogs. Best of all, if you make a really bad mistake during your learning process, you can always do it over again by restarting your computer.

And with all of these advantages, is it too much to ask that a college graduate with a degree in computer science be able to find a way to solve fizz buzz?

Again, I apologize for butting in.

@Andrew Zen “When I (try to) code, the biggest difficulty I find is knowing the “right” way to code, that is, my finished product does the job, but I have no idea if it is the most elegant solution, or the most secure solution.”

believe it or not, the fact that you “can’t tell” if what you’ve written is ideal is a good sign. it means you have taste to begin with. while you may not be able to tell yet, other people can’t even tell that there IS an “elegant” solution. the question “is this ideal?” would never come to them

all you need is practice/experience. get practice with a wide variety of languages… as many different paradigms as you can mess with

hmm: WRT the guys arguing you should just use a library function:

The best way to state simple problems in interviews (like the one I sat when I was being interviewed as a programmer) is not in the problem domain of a computer language. Languages these days are full of awesome lib functions that mean you don’t have to solve the same problem 40 times (for the 40 slightly different edge cases) every week.

I was interviewed first over the phone with abstract questions about physical objects (not giving away the questions as I got the job and they’d be cross!) then in the face to face interview that followed I was given like +, -, goto and maybe one other command and asked to solve problems - really stretches your brain and gives the interviewer a good look at it in the process.

No auto checking from some website neither - part of the question is simply “will that work?” - being able to evaluate your own code after you’ve written it and see problems (debug…) is an important skill that npp’s definitely lack, as they rely on the feedback of “compile until it (sort of) works!”

Yes, doing things the efficient way is important, but you can teach that after the person has arrived; that is a domain specific problem. The idea of the test, you would agree, is not to choose the language that lets you solve that low level problem in the fewest lines, but to watch you solve a tricky little problem (the like of which always pop up in the odd corners of whatever language you happen to be using.)

Watch out with your phone interviews that you don’t pull crap like asking experienced “practical” programmers idiot questions whose answers are to be found only within the pages of programming theory textbooks. I’ve been around the block with respect to programming, and in my COBOL days I was subject to one phone interview where the interviewer asked ridiculous technical questions that had little to do with programming, per se. My favorite was: “What is the difference between an implicit and an explicit scope-terminator?” I told him I hadn’t the faintest idea what he was talking about. He then explained that the implicit scope terminator was the period at the end of a COBOL sentence and the explicit was like the END-IF at the end of an IF statement. I thought to myself, “Thanks for adding to my fund of knowledge, dude, but just what did you think you were proving with that question?” There were a large number of similar questions, which the interviewer seemed to be selecting from a book, and which I couldn’t answer. Needless to say, I didn’t get the in-person interview, and I later got the back-channel word that the interviewer had thought I didn’t know how to program – which surprised my back-channel source because she had watched me punch out tens of thousands of lines of working code over the course of a year-long contract.

I say, let 'em keep applying and interviewing… sure it’s a pain on the interviewers, but they make me look like a programming superhero (and tbh, I’m only ok/good).

The question is: someone please show me their resumes because I’ve gotta start putting whatever they’ve got on theirs, onto mine if they can get an interview and I can’t. Hell, these days, I don’t bother applying to most jobs because they ask for ‘5+ years exp in all of java/jsp/c#/asp.net/c++/winforms/wpf/mfc/sql/sql server/mysql/oracle’ (literally, I’m not kidding).

I think the point that should be made is: If you ask for ridiculous skills/knowledge then you’re going to get ridiculous applicants.

Steve, I have all those things on my resume, with experience ranging from 3-5 years to 15 years, and 25 years overall programming (none of those things existed when I started - C was a new language a few years after I started programming). However, this is what you see in a down economy, and it goes in cycles - during the dot-com boom, companies had large IT teams, and the resources to train people and let them specialize. After the bust/9-11 double whammy, you started seeing a lot of ads for “general-purpose computer guys” as companies tried to get away from proper IT departments which are more expensive. In the 80s, when people didn’t take IT very seriously, you saw the same thing, and it wasn’t unusual to see large companies with one “computer guy” on staff, who had to know/do everything computer related.

I agree with your point - it is ridiculous to ask for a “brain surgeon/Oracle DBA/Truck driver” in a job ad, because that’s never what you really need… but there is a logical reason why we see that happening. It does tend to bring in some applicants who don’t have the full skill set that was requested, but the industry should not have to tolerate applicants with NO SKILLS at all.

That is what the blog is written about. It’s not about stupid interview questions, or use of APIs, or being a technical mastermind of some sort. It’s about people who have no skills at all related to the job of writing code, and the inability of recruiters/HR to weed these people out before they’ve wasted everyone’s time with an interview, or perhaps even been hired. We’re not talking about people whose skills aren’t up to snuff - we’re talking about folks who couldn’t code their way out of a paper sack if their life depended on it - people who couldn’t explain an algorithm for anything, much less write one in a computer language. It is not about whether you understand math terms like Fibonacci sequence - it’s about the fact that even if I explained how to generate Fibonacci numbers, they wouldn’t be able to code it.

Everybody chill. Sure there are incompetent job candidates. There are also incompetent co-workers, incompetent bosses, and so on down the line.

I have a degree in CS and have worked almost exclusively as a contract programmer/writer since uni daze (typo is intentional due to my horrid habit of being a smarta$$). Since I have had maybe 30 job interviews over the past 20-odd years, I can spew answers to a myriad of goofy interview questions, such as these from the top of my head:

  • Wwhy are manhole covers round? Because manholes are round).
  • How do you represent all the days of the month with two dice? Use 6 as 9.

And on and on.

I love coding stuff. I occassionally blow the syntax, especially a C++ gig if I haven’t had one for a couple of years. I manage to always keep up-to-date by writing little “fun” programs at least monthly. I’ll be reading something like this page and try my own FizzBuzz solution (I typically use Visual Studio/C# as I used to code in Java and invariably get the case wrong for stuff like console.writeline().). Took my maybe two minutes.

I think some folks forget what a degree in CS signifies. It means you have suffered through writing your own QuickSort, double-linked lists, b-trees, etc. You do this so that when you are in the real world you never do it again. No one does. That’s what libraries are for. However, you should be able to at least describe the algorithm and give a cogent reason why you might use a bubble sort instead of a Quicksort (small data set anyone?).

Does that make me a good developer? I don’t know. In my only real dev gig I had one close colleague who was good dev and another who was awful. She invariably checked in code that DID NOT BUILD!!! If she wasn’t so nice (and cute, the truth comes out), I would have strangled her.

doug (back to work writing the docs for our C++ library, including samples, a VS wizard, and tutorial)

Hi all,
There are plenty of readers of this Blog that aren’t classically trained CS programmers.
I’m not ,for a start, with experience in AS/400 and Siebel (plus a bunch of things in between). Its not that the questions are hard, but they really are not useful for determining whether a programmer is any good.
At this point I have to ask , what is a programmer? Are we talking about a code monkey ? someone who just does what he is given ? or the more expansive Analyst Programmer who actually thinks about what the business wants.
Being able to solve coding problems is all very well , but it isn’t what you are looking for in a business context. You want someone who is sharp and can get what’s going on …a trickier problem.

From what has been spoken in the comments there is a perception that solving the problem is trivial and anyone who doesn’t get it is not a programmer. Well, not true - it might be for the subset of languages and methodologies you are talking about - but consider someone who has worked for 10 or so years in RPG on AS/400 or Mainframe technologies.
Its not that the person is useless , but their world of experience so removed from yours its a difficult to see that they are any good.

Jasmine, I’d like to ask a serious question: Are you skilled in all of those things (honestly)? When do you decide not to put something on your resume anymore? At one point, I’ve worked in/with all of those technologies (except oracle), but I can’t say that I could be proficient with them if hired to do the job tomorrow.

Heck; in half of them, if you haven’t worked with it in a year, it’s not the same anymore. It’s been 5 years since I touched MFC… does it belong on the resume anymore?

Of course it is not too much to ask a candidate a FizzBuzz or LCM or question. I still stand by the fact that it isn’t all that useful.

We (hopefully) don’t write procedural code like that all day long in our Java, C#, or C++ jobs.

We write OO code and as such we need to ask questions that force the applicants to write OO code. If we don’t then we haven’t tested whether or not they can do our job.

Bottom line: It is an interview FAIL if you don’t force the applicant to code in the language and style that they will be coding in the job for which they are applying.

Don’t even have to read what’s been written above. I can get a job as a programmer/analyst just by reciting the affirmation when I need to: “I am a programmer/analyst.”

I show up. I say I am a programmer. I get the job.

I have a gift for abstract reasoning that I was born with. The rest is scribbling.

I have been wondering about this a lot. Programmers who are good enough so that they can be given a problem and can structure possible good solutions fast enough in their mind (and under the pressure of an interview) must have been living with code all day. There is one kind of programmer who has a personal interest and a strong focus into the subject, usually geeks who code as a hobby or for honor in their spare time and not someone who has just finished his computer science studies but shows no interest for programming outside of his studies/job. I have talked with computer science graduates who would be stunned when requested to type even the simplest program in a blank piece of paper in fifteen minutes. For most people this is a problem. A student I was doing private lessons in java is frequently curious how I am given a problem that was handed to them in the class and almost in an instant I can decide which functions, classes, variables and algorithms I have to create to solve this and why those and not other things. It’s a talent that you acquire because you were burned in programming in your youth instead of doing what most other people were doing. It’s not easily acquired by four years of studies except if you are really focused to learn and still you might learn the theory but miss the actual experience.

“I DO NOT WRITE CODE ON INTERVIEWS”

You attended an interview, hand-wrote some code to answer a question, and they stole your code and put it into their product?

Presumably upon leaving the interview you were accosted by aliens who took you aboard a space ship and probed you anally.

This is perhaps the most preposterous lie I’ve ever seen on a programming forum.

If you or anyone equally deranged wandered into an interview with me and refused to complete an interview question on the basis that they thought I had invited them to an interview in order to scribble on some paper a solution to a problem I was myself incapable of solving in order to enrich my codebase, not only would I have them immediately and forcibly removed from the building by security guards, but I would slip the said security guards some money to give them a mild beating outside.

Lunatic

I think that even the “Fizzbuzz challenge” doesn’t require computation. 100 lines of hardcoded “print” would do fine. The question clearly states “prints the numbers from 1 to 100” and not “calculates”. Any programmer who can clearly translate the requirements to proper working code is a good programmer.

I realy pity the people that dump any solution here. One other quality of a programmer is to “read” the requirements and give an answer in code to it. Those wo dumped a solution here did not quite understand the post. If the post was a test for a job interview, all of you would have failed. Therefore it is great that the comments are back here. There is more info in the comments about programmers than in the article itself.

My Supervisor said, 90% of the informatic students can’t code. I thought he was just a bit cynical and exaggerated things. After reading this I may reconsider the opposite- Maybe he was right?

@barney: “This is perhaps the most preposterous lie I’ve ever seen on a programming forum.”

You say that, without any basis, where I can affirm that this does and has indeed happened. It happened to me; twice. I was broke both times, didn’t have a choice, and did end up getting the job and the first thing I was to do was clean up my interview ‘test’ code and implement it in production.