Ask HN: How important is a CS degree?

19 points by beatpanda ↗ HN
I'm currently a journalism major and I do freelance web development work for money. I like software development a lot more than I like journalism at this point, but I'm 4 years deep in journalism requirements. I'm thinking of minoring in CS or switching majors entirely, and my question is, how important is a CS degree? Should I just finish my BA in journalism and then just do software development work, or is it worth pursuing?

11 comments

[ 5.9 ms ] story [ 48.7 ms ] thread
Your major isn't that important, read anything by Cal Newport. It's better to have a coding mindset, and produce code of your own and/or contribute to open source projects.
Finish your current degree, work on projects on the side, and read the more technical things discussed here on HN.

Not all these will ever be relevant, but they indicate your level of ability and your areas of interest.

Do you know what the time complexity is of Quicksort, and why? Worst case? Best case? What about Heap sort?

Do you know how to use regular expressions? Could you write a parser for lisp?

Can you write a recursive fibonacci function? Imperative?

Can you find the shortest path in a graph? Can you calculate the diameter of a graph? Its radius?

Can you compute in a random permutation of n elements the probability of a cycle of length k, when 2k>n? Does that question make sense to you?

Do you know the difference between inner-, outer-, left- and right- joins? Do you understand the implications?

Chase down which of these interest you, and put them into practice. If you are knowledgable and have example code to demonstrate, it actually helps if your degree subject isn't CS.

Sometimes.

(some further questions added in edit)

Agreed. The skills are the most important part. In my experience, though, the skills are weaker in those without a CS degree. Personally I'd like every developer to be able to solve some basic discrete math (graph theory, combinatorics, etc.) problems, but that's just me. Probably overkill for most software development, so maybe it depends where you want to work.
I initially left those out because I thought I might be unduly biased towards them, but have added them as an edit.
Having a CS degree isn't necessary but it will still give you more options. There are still jobs which require that "CS or related" piece of paper to get you in the door. Again, it's not necessary though because there is enough work for developers that you probably don't need those other options. Also, some of those jobs will waive that requirement if you have a certain number of years of experience.

The biggest consideration for me in your position would be the requirements to switch majors. I imagine you would be looking at quite a bit more school. Unfortunately, a CS degree requires a lot of classes which build on each other which Journalism doesn't require, so I'm betting you would be looking at another couple of years in school at the least.

Personally, I wouldn't bother, but school wasn't for me. I dropped out to go into web development and I'm rarely asked for a resume and I have never been asked about my educational background. I feel like communication and good writing skills are important for dealing with people, so you should be strong in that area as a Journalism major.

The caveat in this is that freelance web development will eventually get old (stressful, tricky to balance work and life, etc) and I don't consider web development to be software development. If you were to stop now you would likely continue the web development track and perhaps never get out of it. If you were to complete a CS major then you may be presented with opportunities that you would never have thought of as a web developer (job offers on graduation.)

Depends on what you want to get a CS degree for. If you want one, so you can get a job, i don't think thats that important(but it probably helps). But the valuable part of a degree is the fact that you'll be exposed to topics which you are unlikely to study on your own, for example graph theory, logic programming, compiler classes, discrete math. Learning how to hack php or ruby sites is easy and not that valuable, learning the general principals of computer science is. And its wicked fun!
I have to disagree here, only in that learning to hack PHP has been my meal ticket for the last 3 years and it sure as hell pays better than being a line cook. It's also opened up opportunities in journalism that wouldn't otherwise exist for me-- mediocre hackers in newsrooms are as Gods. But I see what you're getting at.
Im not saying simple web knowledge is useless, its just a very narrow and shallow view of programming. A CS curriculum(even if you don't learn that much in class) might widen your view a bit. You didn't become a journalist by learning to hack English did you?
Caveat: I have a doctorate in computer science.

Important things to do, regardless of your degree if you want to program for a living: 1. know what the hell you are talking about 2. have experience in the things you want to do 3. become known in the community

Expanding: 1. If you say that you know what the hell you are talking about, and your O(n^2) algorithm for computing something for someone's app used to work but now falls to pieces with more widgets, then you really don't. Learn how to design and analyze algorithms to fit the task at hand. I don't know how many times I've cleaned up someone's O(n^2) or O(n^3) algorithm to O(n) because either they didn't know the language or just weren't very good, but it's at least 20 times at this point. If you want to self-start, check out MIT's OpenCourseware. It has a free computer science education that will result in zero paper. Lectures are available online for free.

2. Don't just read a bit about a new technology that you want to get a job doing, actually use it. There are free VM solutions that will run on your hardware and OS combination, which will let you run and test any number of software configurations to see what it's like.

3. If you're really using the software, and you don't run into a bug, then you're not really using the software. Report bugs, fix bugs, get involved. Every project needs help; the more you help people, the more you are known; the more you are known, the better your resume.

There are people who have never had a problem getting a job without having a degree. And there are some people who haven't been able to get a position, regardless of their degree. Personally, my degrees have opened doors that would otherwise never have been open to me. And the education that I have acquired in school has been invaluable to actually performing my duties as a chief architect. In my experience, there are just some things that you are only likely to have been exposed to during the course of education and related further exploration.

Ultimately it's a matter of what you want. Do you want paper? What if the paper can increase your lifetime earning potential (do you care)? What if you are so good that you can do better without the degree slowing you down? If you were 1st or 2nd year, I'd say switch majors. At 4 years... I'd say go with your gut. If you're guts are wrong, at least you went with what you thought was right, and not what others thought.

One thing often overlooked is the social aspect of getting a degree (CS or otherwise) -- getting a CS degree will give you more opportunities to meet/get to know CS people. This has a soft benefit -- the people around you start to talk programming more (and you pick up a lot of casual knowledge from them). I think this is even more powerful than classes; it 'keeps you in the game' if you will. Of course, this works both ways (as you may lose connections to other people/majors because of this).
Honestly, it depends on what you want to do.

If you want to keep doing Web development, I won't lie to you: you are probably not going to use 75% of your CS course knowledge. You'll be hacking in JS, HTML, CSS and some backend language, and will probably only come across a CS-related challenge once every year or so. (Depending on your clients' industry and requirements). Your biggest challenge will probably be scaling, but that's something you may never even run into.

If you're talking about more corporate-oriented desktop or integrated software development, you will probably be using more of your core CS skills.