Ask HN: Is a computer science degree worth it or should I learn on my own?

54 points by cloudblare ↗ HN
Is 4 years of going to school really worth it? Or should I just try to learn as much as possible on my own and carve my own path?

98 comments

[ 3.9 ms ] story [ 201 ms ] thread
both
Seconding this. My degree comes in handy all the time conceptualizing software and architecture problems into computer science problems, which are much less murky to solve. My practical experience comes in handy all the time with the day-to-day usage of libraries and frameworks, and "hands-on" skills ie debugging, deploying, etc.
If you are paying for it in loans/cash, be very very careful about where you go and how motivated you are.

If it's mostly subsidized at little cost to you, probably worth it

No one can answer this for you.

If you want the fastest path to get a $50,000 -$90,000 job - you may want to consider self study. There are jobs in every city that could fit for this.

If you want a career path and want to work on high level engineering, then go to college. You will need the basics and a network.

If you are asking and not sure, you should most likely go to school.

Depends on a lot of factors, age, savings, debt, etc...

Recently had to make this choice for myself as a 24 year old.

Reach out to me if you want to discuss it further and I may be able to provide some insight.

Hey leesec, you don't have an email listed. I'm a 25 year old making similar decisions. If you wouldn't mind quickly sharing the factors that went into your decision, I'd appreciate it. Included my email address on my prof.
You might want to put an obfuscated version in your profile and edit it out of this comment. I imagine email harvesters are happy to crawl HN, and you might even get some more... targeted emails.
Updated...appreciate the tip!
How young are you? If you're around an average college student's age, you should definitely get that degree.
Get a degree. It is so much easier to get a job, and you are more likely to complete it since you have skin in the game.

Go to an in-state school with a good CS and Engineering program if you can. Also you can consider going to community college first and transferring in your credits to save money.

A good engineering program also exposes you to higher level maths and physics as well, stuff you might not encounter or need if you did mostly self-study.
This is a really good point I’d like to second.
Yes, I would say worth it. Not just for the degree itself, but the networking and internship opportunities being a student gives you. If you live in an area with a strong tech scene you can get high quality paying internships which give you a strong foot in the door at many companies.

It's possible for you to carve your own path but from my experience companies are looking more and more with people that already have professional experience even for entry-level jobs. As long as you can afford it without going knee-deep into debt then I would say it's a good idea.

I'm 33 years old and have been programming professionally for 11 1/2 years, and I'm self taught. I'm considered "senior". I founded and lead a user group and I've spoken at a conference. I don't say this to brag, I say this to state that despite my success and that a piece of paper won't advance my career, I've always regretted not having my degree. I'm married with a kid and I just started going back to school to fulfill my wish. I say this from experience, go to school first. It's much easier the first time around.
How do you deal with classes like "intro to web development", where you will learn what a GET request is, when you've been a senior web developer for 10 years? (Just as an example, maybe you've worked in something other than web development?) Is cleping classes realistic?
You just slog through it and use the free time to dive deeper in your other courses or to go above and beyond what's required for the course.
Do people really need to take an “intro to web dev” class as part of a CS curriculum? Is intro web dev included in the list of requirements nowadays?

When I was in college and grad school 10-20 yrs ago, and when web dev wasn’t as hot as it is today, the CS folks were taking classes like algorithms, data structures, operating system design, compilers, microprocessor architecture, etc.

Has this changed much in the past decade? Or are you talking more about a trade school type of degree (and do they still call that CS)?

He might not have any classes like that. I majored in computer science and mostly took classes like crytography, compilers, operating systems, automata theory, etc. They might have had some courses like intro to web dev, I wouldn't remember; I always wanted the "hardest" courses I could get. I could program before ever staring the curriculum (at 26). They had two mandatory weed-out courses early in the curriculum to bounce anyone who just didn't have the aptitude or likely ability to complete the program where I had to write some boring Java, but that's it. In other places in the curriculum or some classes, they did have some programming, but things that wouldn't bore most anyone (For one class, we had to write Tetris, for instance. In the operating systems class, we wrote an OS.)
> I've always regretted not having my degree

Why?

I'm 31 and considering getting a degree. Wondering if I should go for a masters in CS or do a bachelor's. Coming from a non-cs background and doing a career change at this point isn't easy. Master's would be much shorter and the Bachelor's obviously would take much longer. Any suggestions?
Usually Masters degrees require Bachelors first. Maybe you mean Associates?
Some programs in Canada allow you to get a masters in CS without having a CS background. It would require taking certain prerequesites.
The (reputable) programs I am familiar with in the US are the same.
He probably has a bachelor's in a different subject.
Yea sorry should have mentioned I have a Bachelor's in Finance
It's conceivable he had a non-CS Bachelor's, and could either take a second bachelor's or try to go straight for a CS Masters. Second bachelor's programs often, IIRC, have more minimum coursework than Masters programs (though that can be offset by needing to take undergraduate courses outside of the minimum to meet prereqs in the Master’s program that someone with undergraduate CS background wouldn't have to.)
> Wondering if I should go for a masters in CS...

That strongly depends on what you plan to do with it once you have it. Is it just for the credential? Is there some specific area of knowledge you feel you need to know to advance your career? Is it for the sake of personal curiosity?

I think it really depends. A degree requires more commitments, both time and efforts, but it'll give you more: fundamental theoretical knowledge, network, career consultancy and vision. But if you already have good fundations and need to get started in CS, there are so many resources available these days. You just need to be much more self-desciplined and dedicated. Good luck!
There was a time where the software industry was booming and immature so that someone with enough time on their hands to teach themselves what was necessary, could end up being as good as the other guy.

Now systems have become more mature, more complex, and companies expect more from an individual that they only want to train on the details of their own system rather than the basics of the craft.

Gradually that's meant that at the very least, you ought to be credentialed to have an advantage now if you want to be hired by larger companies. There is an exception to this, and that's if you manage to be front and center in a large self-sufficient software project. But getting to that point can be just as difficult as getting a degree, and leaves you with the burden of communicating your value even if you have learned a lot in the process of maintaining this codebase. See the story with the Homebrew guy failing his Google test.

From my experience a university program emphasizes theoretical material which gives you a bit of every domain in software engineering. You are still given a lot of room to direct your learning outside of this, but it would be mainly to keep current as to what tooling industry uses as well as maintain your network. What you are paying for is structured material plus access to the wisdom of professors, which can often be quite mind-expanding in its own right.

Both. An education is worth it if it is a master; I do not think, speaking from experience myself and people I have hired, a bachelor is worth much of anything.

A master will give you thorough theoretical understanding, it shows you can get through difficult and boring phases but did not give up and you learn to learn and reason systematically. Outside that networking, social life and having fun should be a big part imho.

If you have to build up student debt (I am from the EU; it was basically free for me as long as I wanted, so I got several degrees) then it depends what you want with it; I would say for IT compsci is definitely worth it; other fields, you might struggle to pay back debt for a long time so then it would need to be something you really want. As you are not sure and asking here I assume you mean compsci.

> An education is worth it if it is a master

ymmv here. the company I work at offers the same starting salary to fresh bachelors, masters, and phds, unless your scholarly work happens to directly pertain to the business. in a lot of cases you will have missed out on 4-5 years of raises and experience. a lot of companies will be calling your peers "senior devs" by the time you get your first job.

ymmv indeed; probably depends a lot on the field and region, hence the ‘in my experience’ ;)

Many companies we work with throw bachelors straight on the do not hire or maybe-if-no-master pile. This is also related to that in my generation and my country, bachelor basically meant dropout. You always got the equivalent of a master and hiring managers from my generation and region still feel it is basically not finishing.

Both. Do not expect a college to teach you how to write good code; they won't. You can write terrible code and still get Cs/Bs. ("Cs get degrees") It's up to you to learn how to write good code. If you want to progress in your career, you will need to be able to write good, maintainable code, and that isn't a skill that's taught in college. If you're "that guy" on the team that writes shitty code, sure, you'll get a paycheck every month because management can't justify firing you when they're behind schedule, but you'll never get promoted, either.

That being said, having a degree makes it significantly easier to get your butt into a chair and have the opportunity to prove that you're a good programmer and deserve a raise. When you don't have a degree, the burden of proof is on you to demonstrate to the interviewer that you're a good programmer, and then the burden of proof is on the interviewer to convince HR that you would be a good hire. But if you have a piece of paper with the magical words "Bachelors of Arts/Science (doesn't matter) in Computer Science/Engineering" and there's a strong need in the organization for people, the burden of proof is on the interviewer to convince HR that you can't program and that HR shouldn't hire you.

It's a role reversal. It's the difference between "proof beyond a reasonable doubt" in a criminal trial vs "preponderance of the evidence" in a civil trial. With a degree, you can get a job just because you don't suck. Without a degree, you'll have to convince a startup CEO that you're a ninja/rockstar/MacGyver or whatever the buzzword is this month.

I'd add that there's a big difference between having a non-CS degree and having no degree at all.

With a non-CS degree it may be a little harder to get an interview, but if you can interview well, it's not going to count much against you. A degree in a strong technical field (like Physics or Engineering) might even count in your favor compared to a CS degree if you can still do well on an interview.

With no degree at all, you may find it harder to get interviews in the first place. There are definitely still jobs to be had, and companies who will interview you, but the options will, at least initially, be more limited.

(comment deleted)
Good, maintainable code has it's place in the engineering cycle.

But so does quick, slapped-together code from late last night.

Depending on the complexity and impact of either, you can progress in your career.

College won't teach you either, but it gives you an (otherwise very difficult to obtain/justify) opportunity to study full-time for four years on complex subjects and a foot in the door.

Plus the degree goes a long way in getting you past the resume gatekeepers and into the interview room in the first place. There are a lot of places that won’t hire at all without a CS degree, and many others see it as a strong signal at entry level (education becomes less and less important as you get further into your career and have a job history to demonstrate your skills).
Going through school also helps you build a network and gives to access to peer groups that will have you learning a lot quicker and be exposed to new things.
I wouldn't get a degree. They're not needed and you'll make far more with an extra 4 yrs of experience. There will be some jobs that will be harder to get, but it doesn't make up for the fact that you're not working for 4 years, and paying through the nose for school.
Worth it. And you will not convince someone you learned on your own.
Yes, for reasons everyone has said, and to collect those life experience badges (going to college, college friends, etc). You wanna try a lot of things once.
Like others have said, it really depends. As somebody who works-to-live and doesn't particularly love software, I never would have achieved the knowledge I have now on my own. I needed the real-life deadlines and stress to learn. Additionally, I can say with quite a bit of confidence that I use knowledge obtained from university almost every day, even if indirectly. If you do decide to go to school (and are in the United States), I would highly consider the community college -> in-state public university route. I went to a top-30-ish CS program at a large in-state institution, and I don't think I missed out on many opportunities because of it. Unless you get into CMU, MIT, Stanford, etc. just pick a large, hopefully cheap in-state school, make good grades, and apply to jobs through your school's network.

However, if you're the type-A/self-motivated type, you can totally learn learn enough on your own to land an entry-level gig. I will never be that kind of person, but I work with people who are, and they earn the same if not more than I do doing the exact same job.

There's also the middle ground of going to a reputable coding bootcamp.

I'm a 34 year old dad with two kids with a bachelor's /master's, so I'm not really itching to accrue any further debt and I don't wanna spend 2/4 years in school. Sure, if I had the time and money, I'd go back to school and take a bunch of math/theory that would probably help but wouldn't be essential to finding a job.

Anyhoo, I start class at a bootcamp in a couple of days. Other than a bunch of codeacademy, mdn and other random resources, I don't have a load of experience in programming

If you're in the U.S., take 1-2 intro programming courses at a local community college. If you get an A, and like the course content, you will be in a much better position to determine if you should go it alone or get a degree.
#1: There is more to college than the education, education is almost incidental anymore. It's about networking and signaling, and that is actually pretty important even though it shouldn't be.

#2: I was just reviewing a big requirements document with a Program Manager in the DoD and they asked me to come up with criteria for hiring SWEs. They were specifically asking what kind of education they should have.

I told them that BSCS was good, but I would hire someone the same age with no degree, but 4 years of experience over someone with no experience and a BSCS.

My experience shows me that even at the Senior Level this seems to apply.

There are drawbacks though.

Generally speaking, code savants don't need school to be amazing, but a non trivial number of them are high maintenance Divas that aren't great employees. Genius level work though.

On the other end, the BSCS folks have a floor of competence most don't fall under, so code is more predictable but in my experience rarely really amazing work.

On the extreme end, PhD's generally can't code worth anything. Don't hire them as SWEs, they're researchers and architects.

So the answer to the question is really more questions.

Are you ok losing out on positions that have a mandatory degree?

Could you maintain your desired lifestyle as a freelancer/code mercenary?

Are you sure you want to miss out on the social and network benefits of going to College?

There's also the middle ground of going to a reputable coding bootcamp.

I'm a 34 year old dad with two kids and a bachelor's / master's, so I'm not really itching to accrue any further debt and I don't wanna spend 2/4 years in school. Sure, if I had the time and money, I'd go back to school and take a bunch of math/theory that would probably help but wouldn't be essential in finding a job.

Anyhoo, I start a bootcamp in a couple of days. Other than a bunch of codeacademy, mdn and other random resources, I don't have a load of experience in programming. I'm constantly making mistakes and often hit the solution button to fully understand the problem.

I think the biggest motivator than anything is to find a problem/type of program you'd like to create and learn as a means to achieve that idea. That's been the biggest motivator for me.

Just out of curiosity, why bootcamp and not a community college course or two? I ask because my mom taught programming at a CC in the 1980s, and her students got decent jobs. And my spouse is just about to sign up for a Python class at the nearby CC.
Mostly because I'm older and I have a family I need to support. I don't feel like a course or two would benefit me as quickly as 16 weeks of nonstop learning.

The other big factor is that the bootcamp has a strong relationship with recruiters making it easier to land a job afterwards.

There's always the possibility of getting a non-CS degree. Granted, I started college in 1982, but I ended up majoring in math and physics while teaching myself programming and electronics. Lots of people were getting programming jobs without CS degrees.

Then I got a graduate degree in physics, so you never know. Your interests can always change while you're in college.

Today, I do a lot of programming, but I'm not employed as a programmer. On the other hand, math, physics, and electronics are "domain knowledge" that have served my career well.

(comment deleted)
There is a massive amount of high quality and completely free material from universities available online. Use it to your advantage.