The most brilliant and successful engineers I know don't have degrees, and they accumulated their vast CS knowledge on their own. They all dropped out of college within the first two years and started working at 19-20. Two of them now run their own software consulting businesses, one is a lead at Netflix, and one is a lead at Google. They're all a bit older than me, in their early 30s now. The younger ones -- one just started at FB with a 240k+ base (he's only 23), and the last one is at Dropbox.
The main factors I think people should take into account for whether or not a CS degree is worth it:
Do you believe that you absolutely need the degree to break in to a programming career, if you're someone who just wants a good job and doesn't know where to start (like I once was, and like many of my friends who are just starting off with learning are now)? Or are you interested in a specific programming field that has a hard CS/Math degree/knowledge requirement?
Is the combination of tuition/fees and opportunity cost significant to you? If you are responsible for paying your own way and taking out loans, compare spending ~4 years in college and having -$40k and no work experience, vs. working for ~4 years, having $40k+ in the bank (possibly much more), accumulated possessions/assets, credit history, etc. This is not nearly as significant if your finances are being handled by someone else, and/or you don't have to worry about money at all because you have access to wealth anyways (mainly through trusts, planned inheritance, a partner, or your family).
Do you believe that you need to the environment, structure, and pace provided by college/university to actually learn CS, and that you're incapable of doing so on your own? I want to note that there's nothing wrong with feeling that way. It's just something to take into consideration. If you need to be completely immersed in it to actually retain the knowledge, then it's the right choice. If not, and you're someone who can learn everything on their own, then consider if being in a CS program would actually hamper your rate of learning, as you're forced to match the slower pace of others.
> Do you believe that you need to the environment, structure, and pace provided by college/university to actually learn CS, and that you're incapable of doing so on your own?
For me, it was not a case of not being able to do it on my own, it was not knowing what I should know.
You could probably spend years becoming an expert on C# or Java or C++ or Go or whatever just by coding in it at your own pace (or at a job) and slowly learning by osmosis/experience/mistakes along the way etc. That's fine. But would you learn the useful theory along the way as well? And if you did, would you bother if someone hadn't created a nice structured syllabus for you? I know that I almost certainly would not had I just stuck to churning out fairly clunky (as I know it was now) code without the formal education in it.
As you said, I am sure some people dont need this though, and somehow just have limitless time or already somehow know exactly what they should learn next, when, and in what order and never need to ask any experienced people any questions to clear up misunderstandings or have their knowledge checked. Lucky them.
Every single book I've read listed the things you should know before reading it in the introduction. If there's something you don't know about, you go back to the library or bookstore. Rinse and repeat, then start from the bottom and climb back up until you reach the first book. It's easy.
> and never need to ask any experienced people
There were so many experienced people on the Internet even back when I was a kid that you didn't have any problem with finding and asking them. They were incredibly helpful, especially in suggesting which books on a given topic to read. Assuming that you can get access to such people only in college is kind of elitist.
> to clear up misunderstandings
As I said, smart people are everywhere (on the Internet), just reach out and they'll help you. Well, maybe it was easier in the 90s - or maybe not, I don't know - but I'm 100% sure that not all the smart people of the world are in colleges right now.
> or have their knowledge checked
Your programs are self-evaluating proofs of your understanding. Cross-checks by others are nice, but hardly essential.
>As I said, smart people are everywhere (on the Internet), just reach out and they'll help you. Well, maybe it was easier in the 90s - or maybe not, I don't know - but I'm 100% sure that not all the smart people of the world are in colleges right now.
>As you said, I am sure some people dont need this though, and somehow just have limitless time or already somehow know exactly what they should learn next, when, and in what order and never need to ask any experienced people any questions to clear up misunderstandings or have their knowledge checked. Lucky them.
Here's what you're missing -- you still get to rub shoulders with experienced people as you work alongside them in a professional context. If they have a CS background, you get to fill in any missing gaps, whether it's hard knowledge or simply learning what you still need to learn on your own, so long as you're willing to ask and they're willing to share.
You also have the alternative of learning from experienced people without needing to be employed. Online communities containing working professionals, open source, local meetups. The latter isn't an option for everyone based on location.
If your first job doesn't have an opportunity for mentorship because you're the only dev, or the other devs are overloaded, you can still reach out to countless people who will help you for free and with no expectation of anything in return.
Open source is extremely intimidating to get into as a beginner. I'll admit I was never able to do it, and even now I feel intimidated despite having spent 3 years working professionally.
But the fact is that the option is there for anyone who wants to access it. Any person can get things like code reviews and career guidance from very smart and very experienced people if they're willing to seek it out, without having to pay them anything. You have open access to the CS knowledge that is passed down in university programs, and to people with that knowledge for when you need help.
I don't know how much longer this will be the case, but I think the trade-off in value between getting a CS degree and getting into the industry as soon as possible (and picking good work environments) is only continuing to grow, especially since employers are caring less and less about a CS degree as a hiring criteria with each passing year.
The main factors I think people should take into account for whether or not a CS degree is worth it:
Do you believe that you absolutely need the degree to break in to a programming career, if you're someone who just wants a good job and doesn't know where to start (like I once was, and like many of my friends who are just starting off with learning are now)? Or are you interested in a specific programming field that has a hard CS/Math degree/knowledge requirement?
Is the combination of tuition/fees and opportunity cost significant to you? If you are responsible for paying your own way and taking out loans, compare spending ~4 years in college and having -$40k and no work experience, vs. working for ~4 years, having $40k+ in the bank (possibly much more), accumulated possessions/assets, credit history, etc. This is not nearly as significant if your finances are being handled by someone else, and/or you don't have to worry about money at all because you have access to wealth anyways (mainly through trusts, planned inheritance, a partner, or your family).
Do you believe that you need to the environment, structure, and pace provided by college/university to actually learn CS, and that you're incapable of doing so on your own? I want to note that there's nothing wrong with feeling that way. It's just something to take into consideration. If you need to be completely immersed in it to actually retain the knowledge, then it's the right choice. If not, and you're someone who can learn everything on their own, then consider if being in a CS program would actually hamper your rate of learning, as you're forced to match the slower pace of others.