Monday, March 23, 2009

Don't Get A Computer Science Degree

Even if you're a programmer, you want to program for a living, you love programming, blah blah blah. Don't do it.

That's my short answer to this thread on Hacker News. The long answer goes here, because I got so annoyed at Hacker News discussions that I deleted my own password. Since I use randomized, automatically-secure passwords that are very hard for humans to remember, I've effectively locked myself out. Keep this in mind as you weigh the value of my advice.

I'm not saying you shouldn't take Comp Sci classes. You should, especially if you're somewhere like MIT, whose Lisp program is legendary. I'm not even saying don't get a degree. I dropped out of school, and I know great programmers who've done the same, or never applied to colleges in the first place, but if you can get a degree, it's usually worth the effort. But don't get it in computer science. I've come to believe that a computer science degree is actively counter-productive.

A random tweet:

An ensuing conversation between a pair of bald men:

By the way, plenty of older programmers still have their hair, and might disagree with our opinions here. Please find them and ask them. If you find any statistical correlation between hair loss and appreciation for art school, please report your findings immediately.

Here's another reason to appreciate art school:

Although to be fair, computer science made it to the top five.

I spent a year or so in art and music classes, and a good long stretch of time reading on all kinds of advanced topics in programming. Both made me a better programmer, and both happened around the same time. It's fair to say studying programming made me better at how, while art and music classes made me better at why.

The fundamental question of what comes from both of those - what you build will depend on what you know is possible and what you believe is worth building. Many programmers have unambitious ideas when it comes to what they believe is worth building. However, many programmers have unambitious ideas when it comes to how, too, including the ones with comp sci degrees, because many comp sci degrees fail to teach anything about higher-order programming. As far as I can tell, art school will expand your range of what you consider possible, while comp sci classes will inaccurately constrain it.

Of course the truth is that whatever works for you may be very different than what works for anyone else. Keep that in mind too.


  1. Isn't Wellesley an all girls school? If so, does that make this whole virgin/non-virgin thing hotter?

    No one I work with (8 peeps, including me) majored in CS. Sometimes I wonder if I'm a real developer because I didn't major in CS, so it's nice to see that some don't care.

  2. I love getting all this advice just as I'm finishing my degree.

    I do have a better understand of what is *going on*, but as far as *getting jobs* it does make me wish I had enrolled in photography after all.

  3. I was a CS/Math double major. I was thinking last night, as I systemically performed a depth-first search on Vault 92 in Fallout 3, that I use more CS in games and recreational activities than what I do to make money.

    I enjoyed what I studied, but I do wish I had more time for art and music courses in college. Maybe I'll go back some day to figure out why my "it sounds just off enough to be awesome" definition of a Chromatic is most likely wrong.

  4. Giles, MIT dropped its old 6.001 Scheme course a year ago. They now teach their introductory programming course using Python.

  5. Isn't Wellesley an all girls school? If so, does that make this whole virgin/non-virgin thing hotter?

    Heh, whoops. I wish I knew where to find better statistics for this sort of thing.

  6. As a CS major, I instinctively want to disagree with you. But lately I've been wishing I'd majored in music instead.

    Still, I think there's something to be said for getting a BA in CS over a BS. A CS BS is an engineering degree, and writing software isn't engineering. (Uh, can I say that?)

  7. Interesting discussion, but I have a semantic bone to pick: I saw the tweet about art schools and musicians a while back. While probably correct in an absolute sense, it misses the point of most music schools, which is to train classical musicians.

    If you looked at only the category of professional musician that music colleges are training -- classical --, you'd find that the successful ones almost universally have degrees in music.

    Now, if we're talking about _all_ genres of music, no doubt there are many more success stories from non-music programs. This shouldn't be surprising. Country music isn't the same thing as Classical music, and it would be silly to think you'd learn much about it from a Classical program.

    Whether or not institutions calling themselves schools of "music" should broaden their horizons a bit is a different discussion entirely, but the point is if you think you're going to learn how to become a pop sensation by attending Juilliard, you haven't done the least bit of homework about Juilliard.

    It's the same thing with Computer Science and Programming. They're not the same thing. If you think you're going to learn how to design a great Rails app at Stanford, you don't have any idea what CS is. For _actual_ CS careers (think research and universities), the field is populated almost exclusively with advanced CS degree holders.

    If you're only directing this post at people who want to become professional programmers, then I wholeheartedly agree with you (except the complaint about the music tweet; that still stands), but to give blanket advice against CS degrees is to miss the point of CS degrees.

  8. *facepalm* And so now I actually go and _look_ at that HN thread...yep, it's directed specifically at people wanting to get into programming. Maybe I should try to get some context for the conversations I join, eh?

    Time to go find some more blogs to miss the point of...

  9. I got into programming as part of my job (in my thirties). Now I am a full time code jockey. I am very glad I got my degrees and have experience in other fields. I don't have to work on thinking out of the box as I am *from* outside the box.

    At the same time not having formal CS experience is starting to catch up with me as I get into more advanced programming concepts like design patterns etc. Thank God for the internet and for Stanford and other Universities offering a slew of CS classes online.

  10. I can't tell if Duke Love is weirdly desperate spam or what, but I let it thru moderation because it's kind of entertaining.

  11. Interesting topic indeed. I am a software tester, games tester and doing quality assurance. Ironically, most issues found are related to programmers not understanding on how to gather information correctly from the specified requirements and not questioning why the program must be written that way. What is the business need for the requirement.
    I also found that programmers are most of the time fighting processes. Testing and quality assurance is about processes.

    Having interns on my team who is finishing their CS degree still don’t know the business aspects of software development and most of all the social aspect of software such as the usability.

    So why do more and more employers require testers to have CS degree?
    Why are testers expected to have more programming skills?
    And why are employers who request (the questions mentioned above) to have these backgrounds not adhering to the practices required by these professions?


Note: Only a member of this blog may post a comment.