Yes, yes, I know. Computer Science classes are useless and difficult. It's okay. I took them too. I hated having to study full year of physics, thought my software engineering class was at least two years behind the times, learned operating systems and languages that were twice as old as me, and pulled an all-nighter at least twice a semester trying to finish a nearly-impossible algorithm (I still hate you, Dynamic Programming).
The practical and obvious reason for a degree is to get a job. Recruiters from all the big software companies make the rounds at Universities and completing your degree is a quick way to a cush office chair at one of the biggies.
But if you're a bit of a punk like me and don't care much for working in a cubicle, why bother going to college at all? There are lots of examples of successful folks who didn't finish their degrees. Well, there are plenty of examples of people who did. And that's not the point. Does college have anything to offer a working programmer?
I've been a working programmer for less than a year now and I've been pleasantly surprised to learn that the four five years I spent in school weren't completely wasted. University gave me the opportunity to explore different topics in computer science while providing mentors (professors) and colleagues (other students) in each topic. Computer science is a wide field and I was surprised at which subjects I ended up liking the best. As an aspiring web designer, I probably never would have learned any Perl. Yet Web and Internet Programming, taught in Perl, turned out to be the most fun class I took. So I ended up loving application development and giving up on design entirely (this blog is a great example of my current design skills).
Knowing a variety of languages, popular or outdated, seems to have helped me out as well. I recently started learning Python and saw obvious similarities between languages I knew from school, like Java and C++. It came as a surprise to me that Python doesn't currently have any type of switch/case statement. However, Python developers often use a series of unnamed functions, lambdas, to simulate a switch/case statement. No problem, I know lambda well from a first-year computer science class I took in Scheme. Scheme, that obscure language that I thought I'd never use.
Another advantage of a traditional computer science education is the ability to gauge optimization (pay attention to the lectures on normalization and asymptotic notation). As a web developer I care a lot about optimization. Efficiency is the key to responsive web applications and throwing huge, expensive servers at scaling problems won't help if your database design is inefficient or your code is redundant and sloppy. Not that my code is ever sloppy...
Okay, so the classes are HARD. That's the best part. Getting your ass kicked gives a bit of perspective into the working world of programming. There are HARD problems. HARD problems are fun. The great developers that I know are always trying to tackle tough problems and expand their knowledge. I do not know a single rock star developer that shies away from a programming problem because it appears too difficult. They would all say, "bring it" (and they would all readily admit times when a program got the better of them.)
So the decision is really up to the individual. Just don't be too quick to complain about a computer science degree. Just think of all those classes in linear algebra, who ever uses those?