Why Can't Programmers.. Program?

ha ha. Lets see some ASM code. You got 10 seconds. Assuming 8086.

What a whiny post. You complain about the graduates themselves but what about the departments who taught them? If you were really concerned with the situation, rather then obliquely congratulating yourself on being so shit-hot, why not attack the professors?

PhDs do research, not programming and Iā€™ve know dozens of apparently dim graduates turn into excellent developers.

I once interviewed a guy who TAUGHT programming at a city college and HE couldnā€™t answer very basic questions about the language. My typical C++ interview question is to ask whether they understand what happens when an exception is thrown, stack unwinding, how it can cause memory leaks, and what to do about it. (someone out there is thinking the answer is ā€œprogram in Javaā€ but they should go die now)

I suspect the original observation can actually be generalized to almost any other profession/job. It seems a common complaint that one has to search hard for even basic skills and then harder for someone who will put the effort into being an employee that can be counted on to even show up regularly and actually work.
One wonders what the future holds when you read the above posts, realize that a fair number of good programmers will be leaving the market over the next decade (boomers), and hear reports of declining enrollments in the field.

I wonder how often this book is read anymore:
http://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189

A sad fact is that many of these types of skills often donā€™t apply in business programming, and so you lose touch. Many of the exciting routines we used to learn just donā€™t apply. A little sad.

How about asking people the pros/cons of various types of sorting algorithms?

http://linux.wku.edu/~lamonml/algor/

Not sure what kind of educations you have over there but certainly here in Sweden you write A LOT of code if you study computer science on university or college elevel.

Even in high school programming courses you write code from day one, are you seriously saying this is not the case in the US ??

The whole thing sounds very strange to me.

The original post and the original quoted post do nothing except perpetuate the worst stereotype of what a good coder is. Executive managers prefer to think of their best developers as sweaty grubs who pound the keyboard (rapidly, Iā€™m sure) and who amuse themselves with anal debates. Most of the comments here seem to confirm that stereotype willy-nilly.

ā€œIā€™ve also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.ā€

Perhaps they became senior programmers by acquiring the habit of quiet reflection before pounding the keyboard (rapidly). Many executives do not understand that the person staring out the window may be getting more done than the busy people at the keyboard.

Job interviews structured to find sweaty grubs will probably find sweaty grubsā€¦

Isnā€™t this an issue because you can learn to people to master a programming language but not how to solve problems? The people who couldnā€™t solve the fizzbuzz test you describe in your article, might be great at solving well defined problems. I remember Jon Udell wrote an article about the tacit dimension of tech support:

http://www.infoworld.com/archives/emailPrint.jsp?R=printThisA=/article/05/06/15/25OPstrategic_1.htmlsource=searchresult

I clearly see ā€œproblem solvingā€ as the skill that defines what you expect to be a good programmer.

As Iā€™m reading this blog topic and all the responses Iā€™m having a hard time breathing for all the smug in the atmosphere (or, rather, blogosphere.)

Oh, Iā€™m such a great programmer that I canā€™t imagince that a professional programmer canā€™t do hexadecimal maths, says the crowd. Look, Iā€™m a relatively new programmer. I do exclusively VB.Net but I work daily in several applications (some in-house, and some production) and Iā€™ve been programming now for over a year and a half. It was very hard at first, but Iā€™m becoming more proficient every day. One day, I know, Iā€™ll be very good but Iā€™m certainly not there yet. You see, I made a career change. Many of you grew up with computers ā€“ tinkering with them, writing programs when you were eight, etc. I donā€™t have that background. After years in the military I got out and decided I wanted to challenge myself and become a computer programmer. So I went to a two-year college, got a degree and got my foot in the door at a small software company.

If youā€™re asking me, Iā€™ll say Iā€™ve done well. Iā€™m also probably being realistic when I say Iā€™ll never work as a hotshot programmer for Microsoft. But, you know, there are plenty of programmers out there who arenā€™t superstars. They donā€™t need to be. They are proficient and reliable and they get the job done. Just not superstars that eat, sleep and breathe programming. Does that mean they donā€™t deserve to be programmers?

I understand the point of this blog ā€“ but I just think some of you should step back and take a look at your egos. Because some of you might not have hired me and youā€™d have lost out on a good programmer. BTW the FizzBuzz thing would have been no problem, but I have no freaking idea what Hexadecimal maths is (itā€™s off to wikipedia!)

Just my two cents. Narf.

Jeff, I like your FizzBuzz question, but my use of it in screening would be different, since I see an entirely different problem in hiring a programmer.

Iā€™d try to sit down with the candidate, ask her to do the ā€œFizzBuzz danceā€ then wait to see what she does next.

I would be disapointed not to hear some questions, like
"why should she write this code."
ā€œshould the code be maintainable, fast, memory economic or is it a show piece?ā€
ā€œmight the requirements change.ā€

before she starts coding ā€¦

After she presents a first solution, Iā€™d change some requirements, crticise some aspect of the code (is a repeated execution of the modulo function needed/efficient, donā€™t you know more about the sequence of numbers your processing ā€¦)ā€¦ and learn not only ā€œcan she codeā€ (in my experience, they usually canā€¦), but can she think, does she stand up for her beliefs, does she spot incomplete requirements, can she point out the faults politely?

Only 10% of the day are taken up by coding ā€¦ much of the rest of the time is spent interacting with the designer/architekt/manager/customerā€¦ thatā€™s where most programmers Iā€™ve employed in the past have not failed, but struggled.

Haha, thatā€™s why we outsourcers get these jobs instead of some lame US graduates

I think this blog entry would have been better off at thedailywtf.com because it just has to be complete BS, if they have any kind of computer course and the paper isnā€™t falsified of course they know how to solve that, if they donā€™t then you have a serious issue in your education system.

Maybe if you stop wasting so much money bombing people and spend it on education instead ?? Just an idea.

I think the point isnā€™t that any one of us (most likely) could spit out a solution to the Fizzbuzz problem in a minute - I had a solution in my head before Iā€™d really tried to think about it. The point is that people go into ā€˜programmingā€™ jobs sometimes for the wrong reasons. Maybe because the money is good. I donā€™t know. But these are exactly the kind of folks that need to be encouraged to look elsewhere - and I mean a different career path - for employment. Encouraging folks with no aptitude for problem solving and logical thinking to work in a field where such an aptitude is needed simply drags down the team.

The problem Iā€™ve seen in the past is that often those doing the interviews arenā€™t qualified to know the difference between a person in a suit with a smile and a good disposition from a person that will actually be a productive member of an organization. This is particularly the case in larger organizations Iā€™ve worked within.

Any organization that doesnā€™t actively try to find the best people deserves what they get in my opinion.

I can sort of understand this problem, actually (no, not fizzbuzz - that one I get).

I graduated from a major CS school a decade ago - but the school was a Comptuer Science school - heavy on the science - not a computer engineering school. I had classes on Kleene stars and turning machines and all sorts of academic languages that I was unlikely to see again unless I went into computational linguistics. My token database class spent exactly a week on SQL - and, I suppose, with reasonā€¦thatā€™s ā€œITā€, not ā€œCSā€ in their view. Of course, since I graduated Iā€™ve written SQL pretty much every day of my career. We spent a lot of time discussing the finer points of various languages, spent a lot of effort writing applications that used these finer points, but didnā€™t bother to spend much time on ā€œwhat you would actually use these things for in the Real World.ā€ That fell outside the realm of ā€œCSā€ again. I guess the assumption was that this is academia, not a trade school.

Of course, on the flip side, the IT program at the same school required only the most basic programming classes and a lot of business stuff. CS gave you all sorts of cool architectural techniques but few basic skills to use them, and IT gave you all sorts of practical basics but few techniques. There was a huge range in the middle where ā€œactual programmingā€ fell that was never addressed.

Iā€™m not even going to go into some of the small schools with the build-your-own-degree programs.

The only reason I was ever able to hold a job or write some code immediately out of school was because of some hotshot programmer friends who showed me some stuff. Blind luck, basically.

So collegiate education seems to fall short. But thatā€™s only really a small part of the problem. From the day I started my post-college career Iā€™ve been in the minority in every IT department Iā€™ve ever been in - Iā€™m usually the only person with a formal background in technology. Many people in your standard corporate IT-development department landed there by accident or by lateral move - their training includes ā€œTeach Yoruself VB4 in 21 Daysā€ or maybe a few classes at the local community college. Iā€™ve worked with plenty of people who consider copy-paste in visual studio ā€œcode reuseā€, and I wouldnā€™t say this any fault of their own - theyā€™ve just never been shown what OO or even really decent procedural code looks like.

And thereā€™s the webā€¦web development allows a lot of sloppy code to slide under the radar, it seems. If a developer has never had to solve a problem because a web browser front end lets them get away with it, theyā€™re never going to think about that problem in the first place.

Iā€™m not sure what the solution really is - itā€™d be nice to have the education broaden a bit from both directions, but that will only help people who are exposed to it in the first place, which isnā€™t often the case. Working with a good programmer helps immensely - itā€™s what kept me from being useless for years, and Iā€™ve seen one guyā€™s good code transform the coding styles of entire companies in a matter of weeks - but how to do you guarantee a good coder in your environment?

Something to ponder, I guess.

To answer your original question: Iā€™ve worked on big projects where the low-level programmers (and me, the contractor,) spent weeks or months doing cut, paste, change-the-variable-and-function-names kind of work. A person can sit in front of a computer and ā€œprogramā€ for a long time without ever having to actually write even simple logic from scratch.
Maybe this is the ā€œexperienceā€ your seeing on peopleā€™s resumes.

It is interesting that at least two solutions given in the comments are wrong. People donā€™t even know that they canā€™t program.

wowā€¦ pretty scary thought.

Interestingly, in the USA (at least in massachusetts where i am from), we used to play the same game but it was called ā€œBizzBuzzā€, not ā€œFizzFuzzā€.

So here is an American BizzBuzz version in Python:

Can anyone post the answer to the vowel/even number logic puzzle. I hate logic puzzles, but the programmer/pessimist in me says all 4 because you never know what the next input would be. However, Iā€™m guessing the answer he wants is ā€œAā€ and ā€œ2ā€?

to LKM:
i am sorry if you felt my message as hostile. english is not my native language and i may sometimes seem a bit rude (i do seem rude anyway on my daily life). it was not meant to be offensive at all, and i deeply apologize if you took it that way.

anyway:
ā€œDo you understand that by using a local stack instead of the call stack, the computer needs to keep track of much less information and needs to do much less work building and tearing down the call stack? In most languages, using a stack instead of recursion speeds up your app tremendously.ā€

yes i do understand. it is just less error prone to let the computer do the stack keeping for you. also, a good compiler will have a good optimizer which will make handcrafted optimization look slow (unfortunately, apart from tail recursion, recursion is not the favorite playground of optimizers).

but, as always, the solution used to solve the problem will depend greatly on the domain you are coding for. you will not code the same algorithm for an embedded system, a large-scale data-center or a desktop application. you will definitely have to make tradeoffs between resource usage, reliability, and ease of programming.

Perhaps Iā€™m failing my Sense Motive roll, but Iā€™m truly saddened by the number of people who not only posted the solution, but posted the wrong solution.

Go back and count the ā€œsolutionsā€ that failed to print the values from 1 to 100. Go back and count the solutions that started a loop at zero instead of one.

So sad. I really hope that they were deliberately wrong to keep the script kiddies from getting a job. In fact, my sanity requires that I chose to believe that.