There's a debate starting on Dave Farber's Interesting People list. They're starting to discus why it is there aren't more CS students, but I think that's focusing on the wrong aspect of the debate. The better question is why CS programs suck so much.
I sent this post to Mr. Farber, in the hopes he would post it to his list. This is a question I have wondered about for many years.
There's one question I have for everyone on this list: Why do we need more CS students? A bit of background for everyone before I jump into my question: I'm currently 28 and have been working professionally in one tech job or another for 10 years now. I've been interested in and learning about technology since I was in grade school. Somehow my personal track kept me away from programming and steered me towards a sysadmin career, but my experience has put me into contact with many different programmers and technical people. Today, in addition to my system administration work, I also write web applications in php and python that are used in a number of different organizations in the energy sector. I have not attended college. I graduated from high school in 1998 and saw the writing on the wall. I moved immediately to Northern California and started working in the tech industry on the basis of my technical skill. Had I gone to college I would have graduated just in time to hold a degree that might get me a McJob (2002, just after the bubble burst.) In my past I've worked for ISPs, local tech houses, software companies and non-technical companies. There are a number of roles for which companies indicate they want someone with an EE/CS or equivilent. No matter what their actual dutites I've seen 4 basic archetypes: The Genius; The genius was the smartest guy at the company. He knew how everything worked and was the guy that management went to when they had something new to do. The Programmer; The programmer was just that, the average, everyday computer programmer. The Admin; The senior system administrator, who made the decisions on what their technical infrastructure looked like. The Tech; The tech was generally a semi-skilled worker doing grunt work, such as help desk, QA or system maintenance. Let's take a look at The Genius first. The Genius is the guy that's been programming since he was 8. He started on a C64 or an Apple II with basic and moved on from there. In high school he was reading Diijkstra and Knuth. From there he either went on to the working world or he went on to study EE and/or CS, often on a full scholarship. These guys have universally put me to shame. I have tried to debate them in my weaker moments and have always lost. I've talked to many of them about their college experience and except for one guy all of them said it was a waste of time. Of those that didn't attend college they have universally said that they've never regretted not going. The Programmer is by far the most common player. This is also the player that is most likely to benefit from a CS degree. The problem? They didn't learn anything useful. I have had to educate programmers in basic skills they should have picked up in CS 101. For example, not long after I joined a well-known dot-com there was a vulnerability discovered in OpenSSL. Naturally I upgraded it to avoid the exploit. A couple weeks later our head programmer (who held a CS degree from Caltech) came to talk to me about it. Apparently because I had installed both the shared and static versions of OpenSSL it was now being compiled against the shared version. I spent an hour explaining the difference between shared libraries and static libraries. He still wasn't convinced it didn't matter. So I spent 30 minutes explaining to him (in step by step detail) how to change '-lopenssl' to '/usr/local/lib/openssl.a' and how it was no different than not having the shared library in the first place. The kicker? A couple hours later he came back with my boss and they asked me to remove the shared library because they thought it was causing problems. I did so and it didn't fix their problem. A month later I put the shared library back and never heard another complaint. For those of you unfamiliar with Unix the problem I just described is a basic one. A programmer who doesn't know the difference between a shared library and a static library is similar to a car designer who can't tell you the difference between a carborator and fuel injection, and has to ask the mechanic to explain the differences. The Admins and The Techs are really in the same boat when it comes to a CS degree. There's no reason for having them go through a CS program. If these jobs need any training after highschool it's best handled either on-the-job or in some sort of vocational school. (Those have their problems too, however. I will not hire an ITT grad, for example, as I've never seen any worth their salt.) This brings us around to my question; Why do we need more CS students? Or, more correctly (if a bit harsh); Why are CS degrees so worthless? The smartest guys, those who should be involved in getting their doctorate, see it as a waste of time because they learned it all in high school. There's nothing a CS degree will teach them they don't already know. The guys that would actually benefit from a CS degree aren't learning anything either. Why? They're not being taught. Current CS degrees focus so much on algorithms and math that they see the basics as unimportant. They're teaching students to jump and do cartwheels but they don't teach them how to walk. There are a couple interview questions I ask every candidate that anyone with a CS degree should be able to answer in under a minute. Most (~60%) of the candidates I've seen can't answer these questions. The questions: Please write a program that prints out the numbers 1 through 10 in the language of your choice. Please demonstrate a snippet of code in the language of your choice that will swap the value of two variables. I'm not looking for specific answers here. I'm looking for whether they can answer these very basic questions in under 5 minutes. I've asked a number of candidates these questions. Those who did not have a degree answered them every time, typically in under a minute. It's only the people who have a CS degree that have ever failed these questions. Some of those guys had more than 5 years working experience, too! To be fair, most of the guys that failed these questions were trying to get their first job. It still leaves me wondering: How did these guys gradutate with a CS degree in the first place?
posted at: 2007 May 29 18:13 UTC | category: tech | (story link)
Copyright © 2006-2008 Zach White