Here's what seems to be happening.

First, hyperspecialization. Instead of a "programming" career we have back-end, front-end, embedded, machine learning/data science, and many other silos to the career, and people are expected to be "at level" (i.e. as good as a typical person of their age and experience) in the specific silo for which they're applying. We have a zillion active languages and database technologies and web frameworks. People who choose the right specialty are in high demand. People who don't, or who fail to specialize, are more likely to lose out. When you see a two-sided scarcity problem, that's usually what's happening: a mismatch between sought skills and what is available on the market.

This is good and bad. Divergence is when exploration happens (people move away from Java and C++ to Python, Ocaml, Scala, Ruby, Haskell... and find out what works well and what doesn't) and convergence is when they move back, hopefully to better mainstays (in PL, Scala and Clojure are the front-runners; it's obvious that dysfunctional programming in the style of Java-esque AbstractVisitorHandlerFactoryFactory patterns is over) than those that were in the mainstream before. People do eventually get sick of having to change tech stacks every time they take a new job. Convergence sets in at some point, and it will, soon. We're late in a divergent phase. Both divergent and convergent phases are necessary and healthy. When we move into a convergent phase, it's going to be easier for typical programmers to find matching jobs (a reduced "curse of dimensionality" as there are fewer dimensions of variation) but some specialties are going to dry up.

Second, short job tenures. Another factor for which both sides are to blame. There are "job hoppers" out there who seek a new environment and a pay raise every 9 months, and there are companies that fire rashly, or that do such a bad job of mentoring their employees that anyone sane will leave in 6 months. Job fluidity is good to a point, but it's passed the optimal point. Now it's in a vicious cycle: an environment of short job tenures discourages companies from investing in their people, which leads to high turnover. Some startups welcome turnover with the self-satisfied and cultish belief that those who leave "weren't good enough" but that just shows a lack of introspection to a degree that's irresponsible. Extremely high turnover is just bad.

Third and most importantly, we need to handle the education problem. We will see technological convergence and increasing job tenures for macroeconomic reasons... to a point. However, technological change is going to remain rapid and continuing education is going to stop being a luxury (for programmers and in general) in no more than 10 years. People will need to access educational resources continually in order to direct their career growth, and they'll need some way to prove they've mastered skills necessary for the transitions they need to make.

The best solution for this problem, for a forward-thinking company, is to drop to 3-4 days of metered work (for most jobs) and require people to pursue some kind of education in the other 1-2 days/week. That reduces unemployment of the "not enough work to go around" sort, and it reduces the friction caused by mismatches in experience. That said, I've seen "20% time" type programs, as wonderful as they are in intention, fail more often than they succeed. Google's 20%T is only used by about 10% of engineers because there's absolutely no anti-retaliation insurance (i.e. managers can punish employees in performance reviews for taking 20%T and employees have no recourse, which means, in effect, that employees only really have it if the manager wants them to have it). Building a robust 20%T program is really not easy.

Tuition reimbursement is a good policy, but people rarely use it because it requires them to plan in ways that most professionals simply can't. How many people can predict that they won't face a badly-timed drop-everything production crisis or other hourage spike over a 15-week semester? Very few. The solution is going to have to be more asynchronous than the typical university schooling model, but also more open and self-directed than most in-house corporate training.