

Ask HN: How important is a CS degree? - beatpanda

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?
======
RiderOfGiraffes
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)

~~~
Locke1689
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.

~~~
RiderOfGiraffes
I initially left those out because I thought I might be unduly biased towards
them, but have added them as an edit.

------
DrJosiah
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.

------
gexla
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.)

------
wickedchicken
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).

------
pavelludiq
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!

~~~
beatpanda
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.

~~~
pavelludiq
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?

------
kevinburke
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.

------
robwgibbons
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.

