Some people can learn a lot about a complicated field on their own, but there are still plenty of people who would benefit from some pedagogical help.
If you think that being a plumber or an electrician or a mechanic never requires creativity and deep knowledge, then I think you are looking down on those professions a bit too much. Much like programming, most of what those fields involve is routine grunt work. But from time to time, the usual ready-made solutions don't work and you'll have some tricky problem to solve.
This is also true for many other skilled trades.
More importantly we need people in our industry who have interests beyond just tinkering with things all days. We need balanced individuals who have skills beyond just code, who can look at problems from a wide array of viewpoints. If we only hire hackers who have been coding since they were young we're hiring an incredibly narrow set of people while trying to solve problems for billions of people around the world. That's not efficient! It's good for our ability to solve problems that we expand the tech community to include diverse individuals, including folk who didn't code as kids.
Like seriously, a $200 chromebook that you earn by working a local minimum wage job, a household that feeds and clothes you and your local public library wifi is what you would mostly need. The requirements for college far exceeds that by a mile.
Now, 14 years later and tons of industry experience, I realize how trivial the material in my CS bachelors was and really the big problem is that most students don't really work that hard. Now my work ethic is much, much better, and I've been learning far more advanced material, far faster than I ever did before, because I come home in the evenings and actually study (using online options) and practice.
When I look back at college level CS, it's a joke. Also, the online resources are built to actually be taught well, when I was in school, there was no Khan Academy, Pluralsight, Coursera, Udemy, etc. Most college professors are research oriented at heart and are uniformly terrible teachers. The online moocs and so on are focused on actually making things easy to learn, which gives modern learners a massive advantage.
As someone who dropped out, worked in industry for a few years, and is now back as an undergrad(though in math, not CS), one thing that I feel is neglected in these discussions is the time-sucking effect of homework.
When I was self-teaching as a dev, I could learn something, play around with it until I felt I had a good grasp, and move on. A college course ties a lot of work to each concept. I have solved way too many matrices by hand in the last few weeks, for instance.
There's not even that much cs in a cs degree. Half the classes are gened. There's a lot of irrelevant math.
On the other hand, I question the utility of most university CS curriculums. There are usually only one or two classes covering the core "algorithms" knowledge that autodidacts might not have, given how many people squeak through these classes by copying HW, I'm not convinced that anything really sticks.
In fact, I think I could take any random person off the street, and provided they're motivated, teach them algorithms and data structures to BSc level within 3 months. It's not rocket science and any engineer who makes it out to be like "way hard" is just being a bit insecure over their knowledge.
Out of the remaining 40%, the level of overlap and repetition was just absurd. It seemed like each class spent the first half of the semester re-covering things that were covered in prerequisite classes. So maybe 30% of your actual class time is spent on new concepts, skills, etc.
Of those, probably 1/3 involve very basic things, like bubble sorts and the like, which help you build basic problem solving skills and language familiarity, but not much else. Then you get another 1/3 of CS related stuff, like architectures, patterns, SDLC, etc, which is probably the stuff that separates the degree holders from the self-taught in most cases. Then, if you're lucky, you get a couple of classes that are elective and teach something moderately interesting or useful. As I recall, the only classes I had in that category were a class on Computer Graphics (which ended up just being a bit of Java Swing and a bit of math to explain some of it), Web App Engineering (neat class using ASP.NET MVC), and an AI class that really just covered some solvers and search algos, topping out with Genetic Algorithms and Simulated Annealing.
Point being, I could definitely see someone being able to learn all the same CS stuff in a year, if they were self-motivated enough. A few good programming books, a few good CS concepts books, and you'd be covered. Honestly, you could probably cover CS with both more depth and breadth in a year than I got in my degree, if you put a full-time effort into it.
And all that is ignoring the fact that half my class graduated with virtually no ability to actually sit and write code of their own beyond just copy-pasting snippets from online examples until they had something that worked well enough to pass. The only real value of a CS degree, as far as I can tell, is to signal to employers that you can show up and put in at least a minimal effort at something for years without giving up. I guess that makes for a useful enough filter to keep employers using it and keep colleges in business.
Sorry, but what they are teaching themselves is not Computer Science, it is programming, which is a tiny subset of computer science or even slightly outside it but intersecting. To get a well rounded knowledge of fundamental things, such a program and data structures, memory management, analysis and design, architectures, how OSs work, cryptography, machine learning, networking and functional programming etc, takes a degree course and possibly a masters or even PhD.
[1]I know, I know, CS is not about "coding". But trust me, these people were not making up for it with advanced theoretical work or even like, HCI.
Since everybody and their mother currently needs developers, they’ll still be hired somewhere.
these people generally do not learn computer science on their own, they learn programming instead. This is useful, but it is not computer science and there is no way that (most, modulo some exceptional edge cases) non college graduates will have the same skills or abilities as someone who has studied maths and computer science at university, as well as software engineering. there is some truth that the core (80%) of the software engineering profession will always be formed of programmers/developers/software engineers who do not need computer science skills, and simply need to be able to write code according to a specification i suppose. but the profession will be advanced by the (20%) rest who have the skills and knowledge of the underlying science...
This doesn't preclude getting CS degrees--that is often a part of that passion as well. But I agree that the best programmers would get there with or without it. And people who start programming in college are extremely unlikely to ever really get very good at it (in my experience).
I go to the university and get severely disappointed, and after 3 semester all the passion get sucked and I left.
However, I WISH that college/university were way better. Be on a class with others help a lot, and despite I'm not very social at all, be along others with the same interests? that is so rare that is a prize on itself.
How make things better and why I get disappointed is other matter that have been discussed on HN a lot, so instead I wanna point that having a good experience in an education setting (that I have in a tech course!) not only is good for the people that like to walk the common path, but also the self-taught!
How lovely If I could get into some very rewarding clases, not matter if in a university or in a backyard....
I really can't imagine a scenario where getting a formal education would make you a worse programmer. Having a degree does not necessarily mean you are a great programmer, but your self taught friends would still most likely be able to benefit from experienced and knowledgeable professors.
If your starting point is "didn't go to college", then why comment on an article specifically about college students trying to enroll in a class?
Would you suggest that in addition to a full course load + tuition, students should set time aside to learn on their own? When they already go to a school with a highly regarded CS program?
The best programmers I know are self-taught, because they have a passion for it. I know people working at minimum wage, never enrolled in college, who got decent programming jobs after a year or two learning CS on their own.
These people will always (I hope) form the core of the profession.