Browse the web for long enough and you'll find out about this thing called imposter syndrome. It seems to strike numerous software developers, many of them women, and especially those who do not have a Computer Science degree. There's even a book written about it. Browse the job ads, and job after job requires a CS degree. If you start your career without a CS degree, and are surrounded by coworkers who have them, you may very well feel like you're inferior to the developers you work with.
And yet the state of CS education has never been viewed more harshly. The perception is that universities churn out people who cannot program, not even a little bit. This isn't new. When I graduated from college 20 years ago, I fought the same perception on the job market, that college grads didn't know a thing and had to be taught "real world" development skills. This has led to every university trying to advertise just how practical their education is, even removing more academic courses in favor of more "in demand" skills. Somehow, despite universities' best efforts, the perception persists, quite possibly aided by the fact that several famous tech CEOs are college drop outs.
So, how can this be? Is a degree required, or not worth the paper it's printed on?
CS In Academia
Let's take a look at one of the most famous CS academics, Edsger W. Dijkstra. If you know the name, it's probably from "Dijkstra's algorithm," which is for finding the shortest paths between two nodes in a graph. He did this in 1956 while demonstrating the capabilities of the ARMAC computer, and published it three years later. CS students study this in part because they study graphs a lot. It's exactly the kind of overly theoretical subject that students and employers complain about.
And yet, while we are often told that our field changes too fast to keep up with, variants of this algorithm are still in use today, and not just in old software. The A* algorithm is a variant of Dijkstra's, and is frequently used in video games and sometimes mapping software to find the best path between two points. In other words, a non-practical algorithm developed on an out-of-date computer by an ivory tower academic ended up in practical use for 60+ years. Perhaps universities are more practical than we credit them for?
After all, I can list numerous academics whose impact is still felt today. Grace Hopper's Ph.D. came in math, 20 years later she helped define COBOL, maybe the most "practical" language ever. Alan Kay invented the term "object-oriented programming." Bjarne Stoustrop invented C++. Heck, Alan Turing helped win WWII. In all of these cases, academics took things that are impractical, such as inventing a programming language, and then turned around and changed the way we do practical work every single day.
Programming As A Trade
Then again, most of the time I'm not writing Dijkstra's algorithm, and neither are you. Most of the time, I'm writing CRUD apps with business rules with occasionally fancy UIs. I spend a lot of time writing unit tests, cleaning code and refactoring, and I didn't learn any of those skills at school. In all likelihood, I write more code in a week than a typical academic would write in a year. When it comes to programming, I'm not a "scientist" like my degree says; most of the time I'm a tradesman, and there is nothing wrong with that.
When I think of a skilled trade, I tend to think of electricians, perhaps because for one summer in college I was an electrician's apprentice and I was horrible at it. In fact, I'm convinced that the electrician unions still tell stories about the incompetent apprentice who could barely be trusted to hold a bucket. Electricians, and many other people in the skilled trades, do not require a college degree. What they require instead is a 4-5 year paid apprenticeship. This is sometimes augmented with a vocational or trade school. Trade schools are set up differently than universities because their ultimate goal is to get you a job quickly. You might say "but that's why I went to college," and that's probably true, but the structure of a university is very different. Even though universities are increasingly trying to provide a practical education, they are ultimately structured to create academics. The elite students are meant to eventually become professors, which might be why some of the most famous modern programmers are college dropouts. People like John Carmack, Bill Gates, and Mark Zuckerberg got what they needed out of college, and left.
Ultimately, IMNSHO, I think day-to-day computer programming is more closely related to trade than an academic pursuit. Think of it like the difference between an electrician and somebody with a Ph.D. in physics. While the Ph.D. might make advances that change the way electricity is used for a hundred years, I probably want the electrician to fix the wiring in my house.
So Do You Need A Degree?
Let's ignore, for the time being, the liberal arts and sciences part of secondary education. Those aspects are extremely valuable, and aren't typically provided by a boot camp due to time constraints. Do you need the CS classes in a CS degree to be an excellent programmer?
The answer, rather provably, is no.
Does that mean the degree is worthless? Of course not. The current state of higher education has a lot of issues, especially when you factor in cost, but for many people a Bachelor's degree in CS was the ideal way to begin a programming career. It was for me, it might not have been for you; and if tomorrow we need to work together on some seemingly super-advanced, cutting-edge technology then we are both going to look up everything we need to know to get started.
We'll find it in an academic paper from the seventies.