The blogosphere is abuzz today over a post by Jeff Atwood over at Coding Horrors entitled, “Why Can’t Programmers … Program?“. Jeff’s key points, backed up by lots of references:
1. 99.5% of all programmers interviewed for programming jobs can’t program. At all. We’re talking, “can’t write a loop that counts from 1 to 100” here … this is not hyperbole.
2. It’s a good idea to look at a programmer’s code before even bothering to talk to them.
In fact some interviewers have taken to screening all applicants early with some trivial programming problem like the FizzBuzz Question.
Personally I am more surprised that technical interviewers don’t do more pre-screening of applicants than that so few applicants are actually qualified for the work. The last time I interviewed and hired devs (about three years ago), I selected about eight people to interview out of a pool of over 400 applicants. But I hired two of those eight people, and they both proved very capable and talented.
Another excellent post by Atwood points out that 30 to 60 percent of every university’s computer science department intake fail the first programming course. In other words, about half the people in the general population are simply incapable of programming, no matter how well you teach them. This paper describes a test that can identify such people very quickly.
If more than one interviewer is reporting that most computer science graduates they interview “couldn’t program their way out of a paper bag”, then I’m wondering how many of that “30 to 60 percent” that just have no mojo at all are somehow making it through the college system.
The other problem of course is that most programming courses don’t provide the sort of experience that would be of use to people in an actual programming job. When hiring people fresh out of college, you want to look for the people who have participated in meaningful internships, programming labs tackling meaningful projects, open source efforts, and the like. Those are the people with fire in their belly and some idea what they will actually encounter in the real working world. The people who just sat through the classes and passed the courses will have a lot of book knowledge but very little iidea how to apply it in practice.
I stumbled onto a terrific resource today that sounds great both for “newbs” and for companies looking for quality software components written by talented people. TopCoder.com runs programming competitions where contestants work on software components and APIs based on specifications requested by TopCoder’s customers. Judges select the winner, whose finished and properly documented code goes up for sale in TopCoder’s component catalog. Contests are conducted in C# and Java.
This is a terrific concept. The specs are some of the finest I’ve seen, and contestants are required to provide UML diagrams, unit tests, and the like. They are developing real software for real use using real tools.
If you’re learning the ropes this is a great way to go. If you’re the lucky winner you get significant prize money and instant reputation. If you’re a TopCoder catalog customer you get great components and access to this talent via TopCoder’s job board. It’s a win/win.
Systems like this will identify capable and motivated new talent much better than certifications or college degrees. I mean no disrespect to colleges or certification programs, but by themselves they are not enough to identify excellent entry level people.