Knowing the common language and use cases for data structures is probably the one I lean on the most. Seeing the general shape and feel of a problem that needs a graph style solution or being aware that looping through a nested array is bad but that there are easy off the shelf solutions built into most languages to that problem is important. How else would I know that at the root objects in js, dicts in Python, maps in Java, C#, and Clojure are all backed by the samething and have similar properties or that those properties shape how you interact effectively and efficiently with those things?
Additionally it opens the world of acidemia to you by teaching you the conventions and tools you need to read and make sense of comp sci papers which let you stay at the cutting edge of your field if you want to, imagine being a machine learning engineer before Google made this huge push in ML, I tried when I first started college to grasp the ML stuff but most of it was beyond stuck in papers behind lots of calculus that I didn't have the time or desire to learn. My CS pushed me through Calc 1 and 2 so if I wanted to I could just brush up on that and push into ML.
It's hard to explain for a lot of people because in reality you can go it alone and do fine but it always be the case that your whole career you didn't get a CS education so you might have holes in your knowledge that you had no idea about. Additionally it lowers barriers to careers and gives you an incredible opportunity to build a social network of interesting people who in general will go on to do big things and you can leverage that social network for even more career gains.
I haven't even touched on the social aspects of college which you can dip into if you want or the fact that it gives you an opportunity to learn how to live on your own all of which are important but directly connected to CS but rather college as a whole.
TL;DR You don't know what you don't know but college helps you get those tools and teaches you s whole bunch of lessons along the way, but you can go it alone of you want.
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.
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.
So please do, then?
> How else would I know that at the root ...
Just read a few books on algorithms and data structures? Is that a problem? Or do you say CS degree course gives you access to books you otherwise cannot get?
I got my first, quite a decent one[1], for my 12th birthday. I slept with it. Like, seriously, kept it next to my pillow. At first, I didn't understand anything. A year later, the book was in a rather tattered shape, but my understanding was quite decent, except for some of the "AI" algorithms (the book was from '95, so what it called AI was rather different from today). About half a year into reading it I finally saved enough money to buy the least expensive version of Visual C++, and I could finally start coding the exercises. Before that, I just imagined what they would look like, how they would work; I borrowed Stroustrup's "The C++ Language", read it and wrote C++ code in my biology notebooks. I sorted playing cards, laying on the carpet in my room, and was overjoyed when they indeed became sorted. It was incredibly exciting. You know what uni was when I entered it years later? Anything but.
> Additionally it opens the world of acidemia to you by teaching you the conventions and tools you need to read and make sense of comp sci papers
By the time I actually needed them, the papers were mostly accessible to anyone, academia or not - but that was many years later.
Before that, though, I learned most of the "tools" from - again - books. There were great books on math in my high school library and my maths teacher was happy to help with things I struggled with, even though they were unrelated to the actual course she taught. My first animated, rotating cube implementation was thanks to her. She told me that what matters is the curiosity to find problems and persistence in attacking them. She never once told me that about having a degree.
> You don't know what you don't know
What? You try to implement something. It doesn't work. Here, that's what you don't know. Now go learn it.
It's really that simple. If you're a person who "tries to implement something" on your own once in a blue moon, then sure, school is good for you. It forces you to try things and helps you accomplish them. If you're not, though, it's just going to slow you down and suck all the pleasure out of learning (because it will force you to try things you don't want or need at that point - instead of an exciting adventure, learning becomes more like a job due to this. It's dreadful. Horrible. And most of all: counterproductive.)
> but you can go it alone of you want.
Well, some of us can, others don't. It's important to know two things: a) which kind of person you are; and b) you don't have to be ashamed of being either. Your post sounded a bit condescending to me, hence the lengthy response - I just wanted to offer a perspective of someone from the other group.
[1] first ed. of https://ksiegarnia.pwn.pl/Algorytmy-struktury-danych-i-techn...
Now imagine you have 5 or 10 great teachers, with expertise in different areas of CS. Wouldn't that also have made it possible for you to learn much faster, or learn more in the same time?
And now imagine, you meet a few like-minded CS students, and 'try to implement something' together instead of on your own. That was what really boosted my learning rate.
Of course, university does not have a monopoly for these experiences. But the good CS programs are designed to provide it to you.
ah, instant nostalgia. I loved that one as much as "Writing Computer viruses" :]
Similarly understanding storage classes for data and indexes, for example when to btree vs lsm trees. If you are using lsm trees when and how it should be optimized.
And ofcourse, in interviews :D.
As far as interviews, the last three jobs I had.
1. We need you to design a fault tolerant system with no single points of failure. Write out your design on the board.
2. What is your 90 day plan to build a software development department to achieve these initiatives.
3. Here are some issues with our AWS infrastructure and challenges we are having delivering features. How can you help solve them.
Yes, I’m supposedly a hands on developer, but at a certain point in your career, you’re not asked to write a merge sort on the board.
And I did read it from a book, when someone from University introduced me to the book and explained it to me in short firstly so I can grasp it more easily on my own.
I'd never pick a book about B trees on my own (booooring, let's learn LatestFramework.js).
My University professors were mostly a complete disaster but at least the materials we had were good enough. Who wanted to learn had access to knowledge, and for motivation -- at least the grades.
I can't see myself on my own even finding a book about theory and then going through it for 4 months, getting into nitty gritty details just for the kick of it.
There's no obvious benefit at the time of learning it. By the time you can see the benefit on your own, it could be too late.