One big problem with equating CS with "coding" is the fact that low-skill and high-skill jobs get lumped into the same bucket. Same thing in my side (IT) where systems architects and help desk guys get painted with the same brush. If you teach a student to just "code" then all they're going to know is a few web front end tricks and they'll be difficult to train for the next thing. The students coming into the profession now need to have a science background, not just a 9-week coder bootcamp. Remember MCSE bootcamps from the late 90s/early 2000s? We in IT are _still_ working with some of the products of these.
If anyone is serious about fixing the skills problem, the following needs to happen:
- Salaries need to be stabilized at a level that will attract new entrants to the field. No one is going to waste time and money studying something that doesn't pay off later on. Look at all the little private colleges that are going out of business after burning through their endowments. Lots of students know that they can no longer expect a job after graduating studying just anything.at any college. (I was one of the last graduation years where that was true.) Unfortunately, college is a trade school now for most people.
- Jobs need to be available. Companies can't cry "skill shortage" while outsourcing their IT department to the lowest bidder or throwing people away when they turn 40. I think a technical career provides a very fulfilling job if you're lucky and choose your employers well. But, if I were faced with a choice of what to study, and saw stagnant wages, mass layoffs, and a career that can end at 40, I would probably pick something else.
- A career progression needs to exist. My career progression was help desk monkey --> desktop support monkey --> data center guy --> system administrator --> the strange hybrid admin/designer/architect/integration combo I do now. Now, it doesn't exist to the same degree. Help desk is in India, desktop support is significantly reduced and the pay is much lower than it was, data center monkey jobs now consist of replacing parts in Google or Amazon or Microsoft data centers, and so on. Where are the next generation of IT people and software developers going to be trained? On the dev side, the QA and maintenance coder jobs are increasingly in India or automated. Getting rid of low level jobs means that new entrants can't grow into the better jobs.
I'm an advocate of taking the different tasks in IT and dev, and splitting them into "technician" and "licensed engineer" tracks. Licensing the top tiers of the job field might mean higher quality of systems and software, fewer major security hacks, etc. The technician track would allow people to grow into these jobs, steadily gaining responsibility and salary over time. The thing we would have to avoid is what lawyers are going through now...the Bar Association threw open the doors to the profession a while back, opened tons of law schools, and allowed the offshoring of routine legal work. Now, look online sometime -- lawyers who spent $250K on school and passed the bar exam can't find work. The only way to make money as a lawyer now is if you manage to graduate at the top of your class at Harvard, Yale or Stanford -- otherwise, don't even bother.
So yes, definitely find ways to keep students interested in STEM -- but don't be shocked if no one signs on for the long haul when they see what's coming at the end...