I call BS on the article. If a couple of places were getting hordes of unqualified applicants, it's because they screwed something up. If we're going to be throwing around anecdotal evidence, then I'll stick with my own over theirs (which says that the vast majority of people who make it through 4+ years of CS education actually do know something about programming).
While you may be right (though 3 years is an option here), the article works from a more plausible premise of some small set (with or without an education in CS) who can't code bouncing between interviews.
Yes, I found the long explanation of what you are describing from
Joel's post on the topic.
Now, when you get those 200 resumes, and hire the best person from the top 200, does that mean you're hiring the top 0.5%?
"Maybe."
No. You're not. Think about what happens to the other 199 that you didn't hire.
They go look for another job.
That means, in this horribly simplified universe, that the entire world could consist of 1,000,000 programmers, of whom the worst 199 keep applying for every job and never getting them, but the best 999,801 always get jobs as soon as they apply for one. So every time a job is listed the 199 losers apply, as usual, and one guy from the pool of 999,801 applies, and he gets the job, of course, because he's the best, and now, in this contrived example, every employer thinks they're getting the top 0.5% when they're actually getting the top 99.9801%.
Obviously, a very contrived example as he points out in the rest of his post but the premise remains.
That being said, even 1 out of the 10 (of the 40 that started) that passed the first course, still could not figure out basic programmer things like how to debug and reading syntax error messages
Can anyone read C++ template errors?
Yes, either a lot of practice, being good a pattern matching or a long time to reformat the error to be a legible one and not a long line of nested angle brackets.
The article seems to reflect some of the feelings I have got from programming. First thing is that programming is not easy, despite a lot of CS students thinking so when they start. This, like many other trades, is something you need to have an internal desire to do. Getting paid good money is not a good motivator if it is the sole motivation of studies.
Agreed, it depends on what you are trying to do by programming, just get it done, or make it the most elegant and well designed program or library out there.
Second thing is that I have found out that lots of Physicists are better programmers than Computer Science students in the dirty low to mid level stuff. But there are some catches, Physcists do have it easier to understand low level functions and what physically happens in the motherboard. However, abstration layers, classes, polymorphisms or inheritances are not mentioned that much in the lessons. In the end I find that I can actually program subroutines using Assembly, or vanilla C (Pelles C has been wonderful!), but for some reasons I have an inherent dislike for C++. And especially I hate writing GUIs. But, then again MATLAB has been wonderful!
Two things:
1. no programmer really likes doing GUIs, they are best left to the interface designers to layout and implement if the designer is capable, or have the layout and the programmer implement.
2. Unless the physicist also understands electrical engineering, more specifically electronics engineering, they would likely only understand electrical properties of the computer, which really only has a minor effect on understanding what the computer is really doing and how fundamental computer operations are implemented such as dereferencing pointers, virtual memory, or page tables. That being said, the type of thought process that physics would require (namely the need to be very analytical of everything) is also very helpful as a programmer.
Bottom line is, every person is different and like different things in programming. I hate Object Oriented programming, cannot stand writing GUI event handlers, but give me anything that needs Maths and I'll be happy! But then again, I write mainly mathematical programs or libraries in the rare case I need them. The whole application development; I'll leave that to somebody else - I don't find it that interesting. So, some people like Table Oriented Programming, some like Procedural and some Object Oriented. Give the person something what they are fluent with and that's where they are most efficient.
Programming paradigms has little to do with the original FizzBuzz problem. The most important part of the FizzBuzz problem is can you implement in code (of any kind) the algorithm that was outlined. Implementing the algorithm
is programming. Generating the algorithm
is Computer Science. Most programmers that can do both are quite often called "Software Engineers" (much to the annoyance of the rest of the engineers), or "Software developers", and because both get rolled into one a lot they also just get called "Programmers" (mostly because to the layman algorithms are useless and Computer Science and programming (along with most anything computer or technology related) are the same thing, magic).
As a sidenote, I always found Assembly to be an incredibly useful course of explaining what computer actually does! And C fits in wonderfully to continue on that track. And the pointers are quite clear after that.
Defiantly, and if you want to know why a computer does what it does, in the way that it does it, you need to look at a (integrated) circuits course.
Besides, I'm not sure what to think of the replies to that article - even I can spot some of the errors in them. And the same seems to continue here, suddenly everyone has a need to write one as if to prove they are on the good programmers' side. Whatever the reason, be sure to take a look at the dailywtf for the isValidInteger() function... written in Java. How many errors can you spot?
I agree that, it why I refrained from posting my own, though remember that by the fact that we are even here discussing this idea, is a very good indication that we in fact are not one of the 199 that Joel (see quote near the top of this post) and Jeff are talking about.
Perhaps I should put up the simple dynamic vector library here for code review - anyone interested?
Code review is always useful, even though I have no idea what the "simple dynamic vector library" is used for (I can guess) or its relevance to this discussion.
[snip]
How wrong am I?
You are 100% correct the function adds no value as its inputs will always be integers or coerced into being integers.