I'd be interested in a few real world examples of these cases where you are able to apply the CS knowledge in your day job. Would you mind sharing one or two?
I would argue it is not about the little facts, such as specific sorting algorithms, but its more about learning how to approach a CS task, how to abstract and how to reason about code. The colleagues I know that were not as lucky and could not study CS, often they just hit a "wall" when they would have to argue about a certain SW architecture for example or when they were presented with an abstract problem, such as implementing some generic behaviour. And learning how to do this is a process that continues after the study, but it is important to get a basis. It is hard to really be specific here but if you do not have a good foundation of knowledge in a field, you will sooner or later (if you are not self-delusional of your abilities) regret it.
We were storing HTML blobs in a database, and we needed to run through all of them and manipulate some tags. A coworker argued that we should use regex. I was able to turn that into a teaching moment about the Chomsky hierarchy, and how (simple) regex can't be used to parse languages which feature arbitrary levels of nesting.
I can contribute some. Mostly it comes when you attack problems and conceptualize your solution to that problem, it does not come when looking for a library or digging through the API. Almost all of the problems you will encounter in your day to day work will be something with an already known solution or use a well known and researched pattern.
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 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.
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.
Imagine you would have had to go your path with just books, without the great math teacher you mention. It would have been possible, but much harder.
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.
This may well be locale-dependent, but the great things you describe - I can indeed only imagine.
I did my best to search for like-minded CS students, did my best to seek great teachers. I tried for nearly 2 years - and failed miserably. The handful of students - out of 150 on the year - I could talk and maybe team up with were disappearing one after another, hired by this or that company. The professors were all old, which in this country meant that they were all re-trained into CS after 40 years of career in something else. There was simply no computing here to speak of before the late 80s, it couldn't be any other way. Younger people never even considered becoming academics - the money was simply not there. Without said 40 years of tenure, they would work for something like one-sixth of what industry - the Western companies rapidly expanding into the country - offered. And I don't even want to talk about other students, their expectations and attitudes - it's way too sad.
You know, I actually dreamt of a place where my passion would be shared by others. At every stage of my education, I was told that the next one will be that place and I will be able to finally learn what interests me there. It was all bullshit. There was literally no place in this country where I could learn what interested me, and I couldn't really go anywhere else due to health issues, even after it became possible without passports.
Meanwhile (or actually a bit before that), my English became good enough - much better than that of my profs, who were instead all speaking Russian very well - and the Internet opened to me. I found great teachers there. I found many people sharing my passion - people, with whom I tried implementing stuff, failed, learnt and sometimes succeeded. I've never said I did it all alone - just that it was all 100% outside of college - and mostly outside of this country.
So, you should consider yourself lucky, and I'm really jealous of you. I wonder, how much of my "I did it all myself" attitude is by preference, and how much of it is just trying to cope with all the shattered dreams the educational institutions here had given me. "The good CS programs are designed to provide it to you" - indeed.
Well, that's one part of it, but the other side still stands: I started learning programming at 9 and kept at it by myself for the next decade. I believe learning is a great example of compound interests - the more you learn, the faster you can learn more. By 19 I actually had a good grasp of the basics, and my learning rate was much higher than virtually any other student (except those similar to me). I don't think it would have been easy, even for the "good" programs, schools, and teachers - to teach me, without causing me endless grief and frustration. That's the nature of education systems (I was told, again and again). The fact that mine was anything but "good" multiplied that frustration tenfold.
I really wish I could experience a dream-like environment you talk about. I might have dropped out and gone my own way anyway - but I might not, and might have been that much better off thanks to it. I won't ever know.
Thanks for sharing your experience. I also don't want to paint a fairy land of learning, because it wasn't that for me either. I had a fair share of useless professors as well, and mandatory courses I hated. As always, the truth is somewhere in the middle.
Learning about b-trees, storage layers of databases comes in hand when you have to push your database to its optimum performance.
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 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.
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.
If you had to depend on a teacher to expose you to the books you should read, what about the rest of your career?
I'd never pick a book about B trees on my own (booooring, let's learn LatestFramework.js).
No, but if I needed to know about how to optimize MySQL, I would do research on - how to optimize MySQL.
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 doubt that there is a dirth of knowledge between the free information you can get and paid courses online.
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.
There was no obvious benefit from me learning 65C02 assembly language and BASIC in the 6th grade. But I did it anyway. There was no benefit from me spending hours on the comp.lang Usenet groups in college. For any software developer though, there is an obvious benefit from having a deep understanding in marketable technologies - competitiveness in the job market.
> If you had to depend on a teacher to expose you to the books you should read, what about the rest of your career?
It's a kick start. You depend on the school to teach you other basic skills too: letters, numbers. You learn a lot of words from classes, but it doesn't mean you'll stop learning words once you're done with elementary school. You can go on your own after that.
My personal experience with school and university is exposure to a lot of different things. I wasn't forced to learn everything -- I spent more time on things I liked and less time on things I just wanted to get a good grade on.
The system is far from perfect and is flawed in many ways, especially where I live. But I don't think that the idea of formal education itself should suffer because of some flaws; I's rather improve it over ditching it.
It's a kick start. You depend on the school to teach you other basic skills too: letters, numbers. You learn a lot of words from classes, but it doesn't mean you'll stop learning words once you're done with elementary school. You can go on your own after that.
Since the discussion was about the difference between learning in your bedroom vs a CS degree, I learned in my bedroom when I was in 6th grade, I already had the kickstart.
The rest of my career I got my kickstart from Usenet, podcasts, blogs, Hacker News, coworkers, and necessity.