As far as computer science, there's a difference between "programming" and "software engineering" that largely has to do with design. A well designed software product, particularly if it is large, is much easier to maintain than one with poor or little or no design. "All those proper structures" shouldn't go right out the window of a well designed piece of software even when there are significant changes down the road. That's the whole point. Designing easy to maintain software is notoriously difficult but usually worth it, at least for large projects.
While some employers might be looking for programmers pre-college, they are probably also looking to pay them less. And MOST employers still want a college degree for programmers or for anyone else looking to get into a technical career. I can't speak to electrical engineering in particular but I don't understand why they would be teaching you wrong electrical theory.
It's also important to keep in mind that tuition prices vary wildly. In the U.S. at least, an in-state public school is far, far cheaper than a private school or an out of state school and hence typically a much better value. Quality varies wildly too so it's important to do your research.
At the end of the day, someone with no work experience and a degree is going to have an easier time finding a better paying job than someone with no work experience and no degree, even in most non-STEM areas. You want to be a teacher? Still better off with a degree. Want to be a lawyer? Still better off with a degree. Etc.
Lets look at a typical design: model-view-controller. A lovely idea, that doesn't work, doesn't apply at all to modern computers. It would be really nice to separate each of these into their own little compartments, but when you actually try to code it, you find that each piece needs access into the other pieces to be anywhere near efficient. So, unless it is a small widget with a small data set, MVC just doesn't work.
And there are many more inside OOP where the facts on the ground do not match the ivory tower view.
And I do not say that there are companies that want cheaper labor, they actually want a person who is NOT tainted by the CS department. They are putting in great effort to get them before getting to college.
I have been to a lot of colleges. In total, the best education I got at community colleges. The state college was shit in comparison.
Now, comparing useless degrees: a degree helps you get that first job... sometimes. But after that, there are only a few places that require a degree. Ten years of experience and they really do not care if you got a degree. So, with the ever inflating price of education, I would suggest learning on the job instead of getting a huge student loan, and then learning on the job.
Now, on private schools. Which would you rather spend your money on?
$50,000 with no opportunities for employment after or
$200,000 with employers waiting at the door to hire you out of college?
This is not wishful thinking, this is the usual stories I hear from private colleges students and professors.
Your examples are actually two pet peeves. Sorry if this comes off harsh.
If you graduate high school and actually know your stuff, then you are more than qualified for teaching kids up to 8th grade. And, my personal views is that govern-cement K-12 prison system is so bad that anyone that goes through it should be kept away from children until they have been deprogrammed.
Lawyer is a very special case. You do not need law school at all. You need to pass the bar.
Law school teaches law in the first two years, and then the next two they teach you how to lie. And then, you swear fealty to the bar. Meaning you give up your sovereignty and become a citizen of the crown. Woe unto yee Lawyers is a good book to read to know just how bad it really is.
And everything I learned in college (especially science) I have later learned was wrong.
So, I have quite a hate for the school system.
MVC is a design pattern and isn't directly related to OOP (though it uses some of those concepts). Design patterns are just useful shortcuts for things if you happen to be doing something that fits that pattern. If you aren't, then you shouldn't use it. You aren't supposed to force what you are doing into that pattern. It has little to do with the value of OOP as a whole. The whole point is that you can create your own objects and patterns as best fits what you are doing. The problem with OOP is that you can't just helter skelter throw crap together on the fly. You have to spend serious time and effort on design. This pays off on the back end in terms of maintainability. My previous employer paid for my masters degree in this stuff. They are not unique. If they aren't looking for it then why are they paying for it? If you are just developing iPhone, Android or Web Apps then it becomes less important.
I'm not sure which employers are looking for people who have NOT gone to college but I can tell you in my experience looking for jobs, they ALL put down college as a requirement (there may be an "or 10 years experience" but getting that experience without the degree can be a bitch. Where do you get experience if everyone requires a degree for those without experience?) Employers don't necessarily expect that a college teaches you everything you need to know about programming, they expect that if you successfully make it through that then you are capable of learning everything you need to know and have some minimum competency level. I have never found a college degree a detriment to getting a job.
Regardless if you pass the bar or not, if you want to be hired by a law firm you also need a degree. Yes, technically you don't have to have one to practice law but it helps...a lot. And the same is true for many other career choices. I don't like how the whole bar system works either and have never had a desire to be a lawyer. But if I did, I sure as hell wouldn't skip college and expect success. That's just not reality.
Knowing your stuff isn't sufficient to make you a good teacher. You can be extremely knowledgeable about math and be a terrible math teacher. Though I agree that government shouldn't be setting the standards, that doesn't mean there isn't stuff you can learn to make you a better teacher or that you aren't taught some of those things when you get a higher level education in teaching. Besides, there's a difference between how you or I think it SHOULD work vs. how it DOES work. If you really want to be a teacher, whether in public or in private schools, then a degree is a big help if not an absolute requirement in getting such a job. This is true of many other jobs as well.
As far as the quality of K-12 education it depends hugely on where you are. I live in Florida where schools are generally crap. Having said that, I live in a county where they are generally pretty good and while my kids attend public schools they are school's of choice and also happen to be excellent schools.
But yes, the school system as a whole would improve drastically if the government got out of it.
I think you present somewhat of a false dichotomy above. You can spend <$50,000 and have much better employment prospects than not spending anything (not going to college). Many career choices require a college degree if you expect to get hired. But if spending $200k will land you a $100k/year job then go for it. To me, in most cases the decision isn't really about whether or not you should attend college because in many cases it is impractical not too if you want to have the career of your choice. The decision is what degree you pursue and whether that Ivy League, private or other "prestigious" out of state school is going to be worth the 10x or more cost. In some cases yes, in most cases no. Good grades in high school also tends to lead to scholarships which can significantly reduce your costs. Poor grades might mean college isn't right for you anyway.