Hacker News new | past | comments | ask | show | jobs | submit login

I think its pretty well known that you can work as a successful developer without a CS degree. However , as someone who is currently working through a masters in CS (after working in software the last decade), I would say that CS courses (some, not all) provide invaluable foundation that would be difficult to obtain (of course you can self study CS). Sure — you don’t need to know how the OS works to write a web app that rakes in cash . But there’s something beautiful about peeling back the layers of abstraction : you gain an appreciation of how things work underneath the hood.

You can "peel back the layers of abstraction" without a CS degree, all it takes is time and (admittedly rare) dedication. Webservers, operating systems and books on theoretical CS are all out there, you just have to be interested.

It's possible to learn most things through self-study. But the vast majority of people will only learn the parts that they find fun and interesting.

They generally won't wrestle with the tough sections in a systemic fashion, the way you are forced to in a decent CS program.

For most people (even most professional developers) the only practical way to gain the equivalent knowledge you'd get with a CS degree, is by getting a CS degree.

I worked for years as a self taught professional developer before going back btw, and I've hired/interviewed many boot camp graduates, self taught programmers, and degree holders.

Like whatshisface said above, quality self-study is rare. As you point out, people will learn what is fun/interesting, but I will also add that they will just learn what they need to get whatever job done.

I have a friend who does webdev (mostly Wordpress, some Drupal) who did not have go through a CS program, though he took a few web dev classes in college. He goes good work, but he has a very loose grasp on fundamentals. He showed me a side project he was doing (a web based clicker game) and after looking at the code, I suggested he try adding some classes to reduce his code reuse. After explaining the basics (and some quick research on how classes work in Javascript), it kind of blew his mind. He never used classes before in his code because he just had no reference point.

We've all seen the utter messes that recent CS graduates have made with classes, unnecessary inheritance and over complicating problems, while being unable to do fundamentally basic logic, you must know the opposite problem is equally true.

CS majors who cannot program applying academic theory without understanding.

I'm old enough to remember graduates rolling their own sorting algos, or building classes 6 levels of inheritance deep. While simultaneously creating massive if/else nesting, with tons of duplicated code, unable to understand how to use basic ideas like functions and recursion, even though I'm sure they probably had a whole one lecture on the subject, mixed in with whole modules on pointless compiler lectures.

Because that's what their CS degree taught them.

How both CS graduates and non-graduates really learn is by seeing what other programmers do in the industry, or by making their own mistakes.

I agree on difficulty of self study by remembering my student days, simply I was asking the lecturer about why we have to study some of uninteresting CS topics. They were quite boring but really got their benefit in the long run.

No, you don't need a degree. All you need is a resolution to learn the things that you're missing. I covered C++ in all its hairy glory, assembly, SIMD, data structures and algorithms (implementing them, not just using them) and concurrent and lock free algorithms and data structures. Some of the data structures I created perform better than anything in the published literature - but I couldn't be bothered to write papers. I might do them as an in depth blog post one day.

I went way beyond what any CS grad does, and it cost me nothing in money and less time than a CS degree. If you're motivated you can beat a university CS education - it's actually really not that high a bar.

I agree with you that most people won't do that. I was home schooled so I have a different attitude about learning than most people - and that's made all the difference. But is fundamentally a problem of motivation and goals, you don't need university for either.

> some of the data structures I created perform better than anything in the published literature - but I couldn't be bothered to write papers.

You can probably imagine why many people wouldn't believe you. "My work is amazing but I am too lazy to publish it" is a peak stereotype for self-educated people. My prior on this being ignorance rather than genius is super high. And if it is true that you are a once in a generation genius who could outpace the research community then your experience is completely useless for others, given that you'd be so much smarter than a typical person who is doing self-education and trying to get a job.

It's not really that hard. For example I made a queue that outperforms the lynx queue. My fundamental instinct after reading that paper was that there's no way faults out perform bounds checks in a modern, speculating out of order CPU. I ran some tests and yes my instinct is correct. Maybe the result wouldn't hold under peer review for some reason, I just tested a few more ideas / criticisms with a colleague and moved on. I don't personally benefit from trying to publish the result and I have enough demands on my time.

I'm not a genius, unless you count an online IQ test I took in my early twenties, but I'm deeply skeptical of those. It's true I'm well above average though, so perhaps my experiences don't generalize. I don't believe that though. I still think it's motivation and goals that count.

The person you replied to is wrong. This is peak stereotype:

> I'm not a genius, unless you count an online IQ test I took in my early twenties, but I'm deeply skeptical of those

You do sound smart though. Just... one of the benefits of a challenging formal education is a large dose of humility.

Haha, well I'm not sure I can honestly deny an accusation of being a genius, at the same time I'm not sure I can affirm it either - and just to talk about it seems to imply a lack of humility. Irrespective, there are lots of kinds of intelligence and I'm blessed with some of the less useful forms of it that happen to test well.

So, in reality, you have no idea if your idea is truly better and it looks like you just ran some specific test cases and assumed it applied. Still paper worthy, but far from thinking that you made anything better than published literature. And the goal isn't to "personally benefit" it's to know that your ideas survive scrutiny and contribute something meaningful to the world.

You're making a lot of assumptions there about which your mistaken. I don't need to defend myself here. If that's what you want to believe, that's fine.

The only assumptions I'm making is what you explicitly stated. And the cardinal rule is, what's stated without evidence can be dismissed without evidence. Either way, if you don't want to defend yourself. That's fine.

I find it odd that you did all this extra work, yet couldn't even be bothered to write a paper about it and still haven't.

I'm not an academic. How do I gain by putting in all that effort?

Because you've claimed that you made substantial strides in algorithms that nobody else has supposedly done. Why not get a free PhD out of the deal? If anything, you can show it to a professor and they should be able to recognize it. After all, you could be advancing the field directly.

Honestly, if you think writing a two to three page paper is "a lot of effort", I doubt you've done what you've claimed.

You overestimate the value of a paper. It's worth approximately $0. But would cost maybe a week of time or about $6000 if you only count what I can sell my time for. Terrible deal.

Yet your ideas could get you millions in publicity, fame, etc. to spend literally one week to advance the field. The fact that you actually argue against this is laughable, not to mention incredibly selfish.

What makes you think the idea is significant enough to get “millions in publicity”, etc.?

He’s not claiming he invented cold fusion, just something that would be an iterative step in improving the state of the art, probably worth one paper in a decent but not super prestigious journal. Where do you get the idea that it’s worth a free Ph.D, fame and fortune, and all that?

What makes you think that they wouldn't? That's why I used the operative word "could".

Because I’m aware enough of the CS world that I just know that an iterative improvement in an obscure data structure is not enough to become rich and famous.

This. It's an iterative improvement on a data structure that in reality isn't useful as used on benchmarks and the benchmark performance is a totally artificial environment with little practical significance. It warrants a blog post more than a paper. Nobody is going to get rich or famous off of it. If someone wants to write it up as a blog post, I'll give them the code.

Why do you assume it is an iterative improvement? You can get a free PhD for a lot less. You can get rich and famous for a lot less. You don't have to make cold fusion viable.

This is absolutely true, however in reality (= in practice) very few non-CS degree devs _will_ reach the same level of knowledge.

When you have to learn all that stuff to get your degree, then you just have to learn it. Period. Also people who are full time students have more time to spend on these topics, but when you are actually working 8h+ per day and your career is mostly around JS frameworks it becomes much harder to invest time into these things.

Obviously this doesn't apply to everyone, but I'd say it applies for most.

I don't disagree with you, but I don't completely agree with your implications either. From my experience, most people with a CS degree will not attain that level as well. Even at the masters level, a number of people will not understand. It's sad. I really feel this is a failure of universities not forcing students to learn, but I know there are a number of politics etc that factor into how hard they can make courses, and what they can teach.

There's a difference between learning specifics, and learning habits of thought.

The two best things a CS degree can do is expose you to ideas you wouldn't otherwise know about, and to force you to work on hard projects that require a combination of multi-level analytical thinking and research.

Both of those are excellent training for at least some aspects of being developer.

But that doesn't mean the details are inherently useful. There are very few situations where you will be expected to write a compiler. So in that sense compiler theory itself is optional - far less useful than the experience of having to handle a complex set of data structures and relationships, which could in theory come from other kinds of projects.

Academic CS also tends to miss out a lot of useful practical skills. It won't teach you much about management (from either side), salary negotiations, office politics and co-worker relationships, or business theory.

It may not even teach you how to write good clean code that's easy to read and maintain.

So IMO the ideal CS degree doesn't exist. The ideal degree would be a good mix of theory with plenty of industry practice - possibly with some standardised requirements that would lead to a Chartered Developer qualification that was better at guaranteeing a working blend of practical skill, theoretical understanding, and analytical talent than current degrees seem to be.

>The two best things a CS degree can do is expose you to ideas you wouldn't otherwise know about, and to force you to work on hard projects that require a combination of multi-level analytical thinking and research.

I agree that should be the case, and sadly enough, I've seen a number of people graduate college with degrees in CS and not have that. There have been a number of times when I'd mention some non-esoteric concept that should have been covered and the response is something like "huh"? I'm not talking about things like "Oh you don't understand how to implement Redux?", it's more things like "Ok, you need to compute the intersection of these two arrays." You are right, they probably have been exposed to these concepts, but they have no idea how to actually do it. More importantly, they grasp so little, they didn't even know where to start. The saddest one I saw was a student that was wicked smart, and the school didn't challenge him enough to struggle through any projects. When he came to intern, he was lost, because he'd never been actually challenged. (He was from a major public university too.)

Don't get me wrong, I disagree, there are a number of great CS programs from both public and private universities, and actually the good ones are exactly like you mention (both theoretical and practical application), but there are a lot that aren't.

> When you have to learn all that stuff to get your degree, then you just have to learn it. Period.

Or you could just do the bare minimum that your class’s TA will let you get away with, which usually means not much at all…

There's a huge difference between taking the easiest path through a degree (mostly Cs, the easiest electives you can take etc...), and someone who pushed themselves while in college. That's why if the degree is a big part of someone's resume, I ask for a transcript.

Are there any well known resources to do just this? I have no idea which books and topics to pick up.

Theoretical and CS fundamentals has never been an issue for me (no degree), because I find them interesting. Probably more interesting than most of my coworkers. I think you'll find this is the case for many people who end up in this industry out of passion rather than educational path. A year unemployed during the .com crash gave me lots of time to work on open source hobby projects, where I wrote my own virtual machine, compiler, etc. That was fun. Wish I could afford to do that again.

Honestly, what I find I'm missing is mostly class status and a piece of paper.

I'm at a point where I don't want to do (web) app development anymore and want to switch to something more interesting (to me)so I'm not stuck doing something I hate for the next x decades. Unfortunately, it seems that what I want to get into (low level embedded stuff, firmware development, etc) seem almost neccessary to have a degree (or even a Masters or PhD). I assume this isn't mostly because of the level of EE knowledge required. Unfortunately going back to school is out of reach now

It actually is because of the theory required. If you go low enough, more happens in your head and less in your tooling. It's why there are low-level and high-level languages.

The lower you go, the more you need to know (and do) yourself. That is where CS degrees do help, because without the benefit of layered architectures of shared libraries, systems and code in general you need to know what those layers did in order to know how to do the work without them. That said, low-level doesn't always mean the same thing. Some people think writing software in C is low-level, but when I think low-level I mostly think of assembly on bare metal with no OS or anything like that.

I have coworkers doing that without a degree. They did however show up with experience.

Personal projects will do. You could work on Open Source software. Obvious choices: qemu, valgrind, FreeRTOS, RTEMS, Linux (kernel), SeaBIOS, gcc, clang, ghidra, binutils, MAME, OpenOCD, gdb, dosemu, dosbox, FreeDOS, Wine, SDCC, dolphin-emu, Xenia, coreboot

Your comment goes to the heart of the debate: does understanding what’s going on behind the scene of your tools help you become better at using them? I think for the vast majority of jobs it does not, but for a few it absolutely does.

For me, understanding how a compiler and cpu/RAM works and is put into machine code and later on a programming language means that I fully understand what programming is.

It allows me to make sharper categorizations whether something is mathematical, architectural, security, programming, framework related or a best practice.

This again gives me a good feeling of whether something will be easy/quick to learn.

If so, though, then a CS degree in general is sort of pointless, isn’t it? But if you can say that about a CS degree, what degree could you really not say it about? I suppose a medical degree is “meaningful” in the sense that you can’t get access to bodies to dissect without attending medical school, but if a CS degree is a waste of time, then pretty much every degree is a waste of time.

It seems like you’re saying it’s nice to know the layers of abstraction but it sounds like you don’t use it in real life.

As a non CS degree developer I can’t really see anything that I’m missing because of not having the degree. I have a successful business, get hired for freelance jobs for a good salary, can build anything I want, ...

Would love to know what one would get out of having the degree versus self study.

The original comment is about engineering competence and having the comprehensive understanding of subject, which is not just limited to running business and getting monthly paycheck to pay the bills.

Some benefits that it will give you:

- It will actually let you move into different positions within tech/it industry when you have wider/deeper understanding of how things works.

- As someone said already in this thread: "allows me to make sharper categorizations whether something is mathematical, architectural, security, programming, framework related or a best practice."

- You'll be better at your job. Maybe not every day you need to know what's happening under the hood, but there are and there will be days when you need to. Even if you only developed JS frontend apps whole your career.

When you actually say "I can build anything I want", then (although I don't know you) I'm pretty sure that you can't. People who get that deeper understanding of things also understand how complex some things are and how complex some things can get.

Self-study verses earning a degree is a red herring. While there are some advantages to studying in an institution, the degree is simply there to tell others that you have studied a particular curriculum. My only concern with self-study is that a lot of resources are the educational equivalent of get-rich-quick schemes, but that says more about the people who create those resources than the learners themselves.

As for knowing the theoretical basis of computer science, that will have value in some parts of industry and very little value in other parts of industry. While someone in your position may have a high degree of success working in the upper layers of abstraction, someone has to develop, advance, and maintain the lower levels of abstraction that you depend upon. None of that is meant to say that you need that theoretical knowledge to be successful, rather it is important for some people to have that theoretical knowledge to ensure the success of the industry.

An engineer with a degree and a contractor can both build you a bridge.

The difference is one will remain standing after an earthquake.

Engineers with degrees work for the contractors. They minimize materials and cost. The result doesn't always remain standing, even without an earthquake:


Building good bridges without an engineering degree is easy. You simply don't minimize materials and cost.

If you had a CS degree, you'd know you can't build anything you want cough halting problem cough. I'm surprised this got down voted since it's 100% true.

I completely agree, Hackernews has really helped me personally. Tons of interesting articles over the years on LLVM or the inner machinations of garbage collections. Picking the brains of clever CS friends also helps a lot too!

You are conflating “having a CS degree” with “learning CS”.

You don’t need a professor to tell you what books to read. You can just read them.

CS isn't really about programming so much as it is about problem solving.

Applications are open for YC Winter 2020

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact