top | item 17992147

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

54 points| cloudblare | 7 years ago | reply

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?

94 comments

order
[+] nwallin|7 years ago|reply
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.

[+] nolemurs|7 years ago|reply
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.

[+] cimmanom|7 years ago|reply
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).
[+] bthornbury|7 years ago|reply
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.

[+] KennyCason|7 years ago|reply
My recommendation is to go to school if you can. In addition to getting a good formal education in computer science, you also get exposed to many other subjects such as math, philosophy, physics, etc. Even classes like English/writing that may seem unrelated, all help you become a better professional as you discover how important communication and documentation is in the workforce. The university experience can be very fulfilling. You are also exposed to various extracurricular activities which can further supplement your growth. For example I was part of the game development club and even got to lead it for a few years. That bit of experience was not only super fun, but also helped me land my first job at Lockheed after graduation. I also randomly stumbled into learning Japanese and Chinese and got a scholarship to study abroad In Japan for a whole year. Absolutely amazing and life changing experience.

I also made some of my best life-long friends, and now business partner, in college. As you can see going to college is more than just the degree.

As others also mentioned having a degree significantly improves your chances of getting a programming job. I’ve helped many people prep for job interviews, both with and without a degree, there is a stark difference for better or worse.

I’m not saying college is a must-have. But I’m saying it can be a life changing and amazing experience, that is way deeper than just studying computer science.

I still reflect on those nostalgic days sitting in the coffee shop or student union on campus discussing math, philosophy, politics, programming with numerous people, many smarter or more knowledgeable than myself. I feel that I had a major “awakening” in college. :)

[+] CyberFonic|7 years ago|reply
I would suggest getting a degree in engineering! Electrical, Computer, Software. The key to being effective in the long term is to be able to design and then implement system of systems.

Astronomy is not about building telescopes and biology is not about designing microscopes. Whilst CS is a very important field, it could be likened to being like physics is to structural engineering. Physics study will teach you a lot about how materials behave, but structural engineering will teach you how to apply that science and build structures that will meet the requirements over a long time.

The problem with being self-taught is that you don't know what you don't know and can easily succumb to the Dunning-Kruger Effect. That is why programs are so full of bugs. The coders didn't understand what they were building, they just hacked away until something just worked (some of the time).

[+] Latteland|7 years ago|reply
If you want to be a software engineer, study software engineering, not some other engineering area. I think electrical engineering is far less useful to people if they are going to be general software engineers than being a cs major. You will spend a lot of time learning things that won't matter to software engineering. Of course if you were going tl be employed as an electrical engineer, but if you only were trained as a software engineer, you wouldn't be able to be proficient either. Study the field you want to work in!
[+] jl2718|7 years ago|reply
But CS pays, and engineering doesn’t. If you plan on getting a job, that engineering degree is worthless when you’re at a whiteboard and the interviewer is asking some canonical CS question requiring implementation of a data structure that you don’t know the name of. Also, engineering is hard, like, lifetime of accumulated knowledge hard. It’s true for CS as well, but there are so many kids running the show that it’ll never be expected of you. And that’s okay because CS problems are easy, at least the ones you’ll get paid to work on. Load a poorly-written web page faster, given infinite compute resources. A/B test the color of the button to get more clicks. Engineering problems are hard. Shoot down a nuclear missile going Mach 32. You’ll spend a thankless lifetime trying to learn enough about things like microwave phase shift jitter and electron transport dynamics in indium phosphide before you really understand how hard that is. Instead, just get a CS degree, and call yourself an engineer when you valiantly build the backend of the “Yo” app.
[+] stevenwadejr|7 years ago|reply
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.
[+] Buttons840|7 years ago|reply
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?
[+] jeremejevs|7 years ago|reply
> I've always regretted not having my degree

Why?

[+] seansmccullough|7 years ago|reply
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.

[+] fzeroracer|7 years ago|reply
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.
[+] gamechangr|7 years ago|reply
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.

[+] zfigz|7 years ago|reply
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.

[+] analog31|7 years ago|reply
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.
[+] AndrewKemendo|7 years ago|reply
#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?

[+] Ocerge|7 years ago|reply
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.

[+] analog31|7 years ago|reply
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.

[+] anoncoward111|7 years ago|reply
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

[+] elvecinodeabajo|7 years ago|reply
Learning your own doesn't give you a grade or diplomas to prove how much you've studied.

Another benefit of the degree is the already plannified roadmap, taking it's time to learn the basics in depth. And, of course, the teacher who answers the doubts that are coming and shows the advanced tricks he already know.

Definitely, learning in your own is a good choice if you don't plan to work on infosec jobs. But without a grade the most tech job I can find in my country is formatting broken windows machines, installing printers and routers, and no much else.

[+] mtnGoat|7 years ago|reply
the opposite is quite true as well... a degree doesn't mean you've learned anything or are great at the things i need.

of the 100+ engineers i've hired in the last decade, few had degrees and all of the top performers, aside from one, did not.

dual edged sword in my opinion.

[+] craig1f|7 years ago|reply
In general, 4 years of school is worth 4 years of work experience. The problem being that, without 4 years of school, it's hard to convince anyone to hire you and get 4 years of decent work experience.

Additionally, it's harder to get jobs at larger and more bureaucratic companies without a degree. This is because of risk. If I'm a hiring manager, and I hire you, and you do a good job, everything is fine. If I hire you and you're a disaster, there will be a review as to whether there were any red flags during the hiring process that were missed. If "doesn't have a college degree and sufficient work experience" is found, it'll be used to make me look like I was sloppy for hiring you. If no red flags are found, it'll be chalked up to "there were no red flags. This was just bad luck." and everyone moves on. Knowing this, I probably won't hire you even if I think you're a good risk because it's not worth the risk for me.

Without a college education, you'll need to work for small companies who are willing to take a risk on you. You'll also have to accept really low pay to offset this risk until you've built a decent resume.

All of these things might be better than accumulating student debt. Depends on where you live, what the job market is like, and what connections you have.

[+] homie|7 years ago|reply
My 4 year degree sure doesn’t look like 4 years of experience to any HR staff/hiring managers I’ve ever interacted with.
[+] agitator|7 years ago|reply
From what you see on social media, in the news, etc. it might seem like "wow there are people out there who are self taught and made it big! I can do that!" But keep in mind, these stories are out there because they are rare. Most people who don't go to school, even those who shared the dreams of making it big, end up failing. The ones that succeed are unicorns. The inherent structure of school forces you to follow through with learning, projects, and eventually completing a degree.

There are multiple benefits to this. First you have a base to fall back on. No matter what you do from that point on, you have a degree that declares that you are at least somewhat competent in your field. You can't go any lower than this new platform you made it to.

Secondly, having gone through college for a degree in a field that I do not work in now, I can say there is still immense value in getting any degree, especially a science degree. The most important thing you learn is how to think logically, think for yourself, and how to problem solve logically. These are things that are often taken for granted, or overlooked.

Thirdly, you learn about a multitude of topics that you may not have bothered to investigate, which broadens your horizons, and makes your a more informed and intelligent person. Same goes for meeting new people. You meet people that you may never have had the chance of interacting with. Universities aggregate people from all over the world. You will make lifelong friends and connections that can be just as important in a career as technical skills. This also results in learned social skills and emotional intelligence which is immensely beneficial.

[+] blihp|7 years ago|reply
Depends on what you mean by 'worth it' and what you would like to do if/when you got a degree. Assuming you mean monetarily/career-wise, there are some career paths/types of companies where you'll have a very difficult time getting into without one. (primarily large companies and 'gated' industries whether by professional associations or regulation) However, you can generally be a contractor/vendor for nearly any company as the business relationship is different and if they like you enough they may offer you a full time position despite the lack of a degree. But something not to discard is the life experience factor: I've met some people who just loved the whole college experience and that alone made it worthwhile for them regardless of the career aspect.

I'd highly recommend you at least try it for a while so you'd understand what you'll be passing on. One thing that isn't worth it is regretting down the line that you didn't go and having neither an understanding of what you passed on or a good reason why you did it. You don't even need to go to a 4-year college: take some Community College classes if you're unsure or money is an issue. (if you're careful to take classes that transfer, you can eliminate a big chunk of the cost if you decide to go for the degree) The downside is that 2-year schools really don't give you the same experience as the 4+-year schools. Bonus points if you take classes while trying to carve your own path: it's hard but then you'll get the experience from both sides to inform your decision.

[+] tropo|7 years ago|reply
It can be worthwhile, even though you are getting ripped off very badly. That 4-year degree gets you about 1 year of valuable education, 1 year of nice-to-have education, and 2 years of disinformation.

If you just got the 1 year of valuable education, you'd still need 2 years (only part-time though) due to long chains of prerequisites. This is easily demonstrated at some schools by the fact that a person with an AA degree (totally generic liberal arts, like repeating some high school classes) can upgrade to a BS degree after 2 more years. Since half of those classes would be outside the major, the clear conclusion is that the 4-year degree only gives you 1 year worth of valuable education.

So there you are, giving up 4 years of salary and paying 4 years of tuition and living expenses, to get just 1 year worth of valuable education. It sucks, but it might still be your best option.

Higher education is sort of a cartel. You are offered what they feel like selling, even though the customers are really annoyed, and every place is roughly the same. It's like dealing with De Beers or OPEC. The colleges even exert control over the accreditation organizations, ensuring that no college can cheat.

[+] sloaken|7 years ago|reply
It depends on what part of IT you are looking at, and what your objective is. If you need money now - then get a job and use what you have learned. The more you have a passion for the topic the more likely a degree is needed. Because after you get a bachelors, you are likely to want a master etc.

Programmer / Database - definitely - I have been developing code for a long time, I have worked in many positions. When I work with people I can usually tell if they have a degree in CS or some other topic. Part of it is the mind set of the person, and their ability to comprehend issues. A math or engineering major will understand recursion when explained. Most math majors will be able to do recursion after an explanation. A history or business major will nod in agreement, but still have no idea what I explained. That being said I use recursion to distinguish better programmers who can / could be great and those that are on the B team.

Like others have said, not all CS majors are great programmers, and many are just bad. But the chances are better, but I think it has more to do with passion than anything else.

If desire to be a systems administrator, a CS degree can help, especially in scoring the interview, but is often more helpful to have certifications.

It is easier for a boss to justify a raise / promotion for someone with a degree than not. Take this extreme scenario: you have 2 developers, one with a few programming certs and one with a CS PhD. A manager slot opens up... whom do you promote? How hard would it be to explain either promotion to upper management? If they screw up in the new position who will they blame (if its the PhD person they blame them. The other guy they blame you for promoting him beyond his skills).

If you want to do web pages, then I think the learn it on your own is the best tactic.

I would avoid a CIS degree. That appears to be a degree for people who cannot do CS but think a computer degree would be real cool. Last I looked there were a lot of unemployed CIS people.

The one advantage of starting work now, is you might be able to get the company to pay for your CS degree. But they almost never provide a good pay raise.

[+] meritt|7 years ago|reply
There is a massive amount of high quality and completely free material from universities available online. Use it to your advantage.
[+] mwnorman2|7 years ago|reply
In my opinion, the industry wavers back and forth on CS degree or just 'git-er-done'. I remember the early computer 'craze' (1970's) when all you had to do was open a company called "Compu-NNNN" and money would flow. Later, people wanted to see diplomas, degrees, certifications so then lots of folks when to school: undergrad, or grad-school if you already had undergrad degree. Now, things are a bit different: information as well as the opportunity to acquire skills is global, no one place is 'ahead' of the other

My advice: choose a path you are comfortable with in terms of time, money.