I almost feel as if we need a return to a semi-apprentice model - for high schoolers, at least:
For some of the day, you take classes teaching you theories, history, and so forth. For the rest of the day, you work an apprenticeship at a company. You don't get paid for it; the employer doesn't get that much work out of you; but you apply concepts that you're learning in your classes to what you're doing at your apprenticeship.
Don't like your apprenticeship (the line of work, the subjects, et cetera), change it. But your classes stay largely the same. If you stay at the same apprenticeship throughout school, you likely have a paid position (or, part-way through, a part-time paid position) as soon as you graduate. The employer could decide to subsidize your higher education, if you need it. But this model should work well enough that most of what you need to be entry level at that position is taught to you by the time you graduate. The rest just rounds you out.
It worked well enough for the "makers" of the 17th century: why would it not work well for the "makers" of the 21st? Not only computer programming, but numerical analysis, musicianship, and so on and so forth would work fine for this. Some professions that absolutely require a higher degree (nuclear engineer; architect - though that's arguable, and already uses an apprenticeship system; structural engineer (doubt you could learn all that math in high school); etc). Even such a thing as research assistant would work well as an apprenticeship.
Note, of course, that there's no geographical limit on what a student could take an apprenticeship on, with todays communications advances.
A lot of people do this already. It's called tech school (and optionally, if offered, there are co-op programs).
I did both, but was constantly bothered by the perception that tech school is for people who are, basically, to stupid to go to college. You go there to learn a trade. That's fine, since the "trade" I learned was configuring wide-area networks via the CCNA Academy.
I think it was really valuable for a lot of reasons outside of the good, practical training I got: it got me around kids from other schools since it was a tech school for the whole county; I had access to the co-op program to get some real work experience (which I took advantage of); I was being taught by someone who was actually doing what I was learning.
All in all I'd recommend the experience for many of the reasons you cite here.
I'm just saying that it should start much sooner. For a lot of people, a part-time job in high school is just for extra cash to see movies. For a lot of the same people, if the school had been a little more involved and had relationships with a lot of local small businesses, they could have apprenticed at accounting, lab/research assistant (at a very basic level, mainly observing) at a local university, etc.
It's a serious shame that tech/trade schools have the stigma they do.
It's also a serious shame that said tech/trade schools typically treat their students as older high school students instead of valuable members of the current/future workforce.
I almost feel as if we need a return to a semi-apprentice model - for high schoolers, at least:
For some of the day, you take classes teaching you theories, history, and so forth. For the rest of the day, you work an apprenticeship at a company. You don't get paid for it; the employer doesn't get that much work out of you; but you apply concepts that you're learning in your classes to what you're doing at your apprenticeship.
Don't like your apprenticeship (the line of work, the subjects, et cetera), change it. But your classes stay largely the same. If you stay at the same apprenticeship throughout school, you likely have a paid position (or, part-way through, a part-time paid position) as soon as you graduate. The employer could decide to subsidize your higher education, if you need it. But this model should work well enough that most of what you need to be entry level at that position is taught to you by the time you graduate. The rest just rounds you out.
It worked well enough for the "makers" of the 17th century: why would it not work well for the "makers" of the 21st? Not only computer programming, but numerical analysis, musicianship, and so on and so forth would work fine for this. Some professions that absolutely require a higher degree (nuclear engineer; architect - though that's arguable, and already uses an apprenticeship system; structural engineer (doubt you could learn all that math in high school); etc). Even such a thing as research assistant would work well as an apprenticeship.
Note, of course, that there's no geographical limit on what a student could take an apprenticeship on, with todays communications advances.