[Header Picture]

# Why Are CS Degrees So Worthless?

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 

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

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