Many moons ago when I graduated from the University of Colorado with a degree in "Computer Science Applications" (the University's attempt at hybridizing Computer Science with a School of Arts theme (Political Science for me); think "double major"), two things were obvious: software engineers were making bank, and software was going to be the foundation for the new economy. Sounded good to me.
It sounded good to a lot of others at the time too. By the year 2000 "newly declared CS majors" peaked at an all-time high. As with any trend, everyone was late to the party; that was also when the bubble popped. As with any trend, everyone left CS degrees in the dirt. By the fall of 2006, the pursuit of CS degrees had literally dropped by half. Unfortunately, we've been wallowing around ever since then. Industry has been trying to figure out how to economically recover. Smart humans (particularly "knowledge workers") have been trying to figure out how/where to apply their brains. Given the tremendous plummet in demand, as you'd expect, secondary level education around building software has not innovated or kept up with industry's demand for talent. Secondary, even primary (though I'd argue pre-University has always lacked), software education still has 1995 as its base from which it attempts to prepare humans for a 2012 industry.
The Perfect Storm
Now that the software industry is healthy again, it's in a lurch. There is a dearth of labor that understands, and can solve, the "hard" software challenges. The talent wars over the past couple of years are truly frightening. We're fighting over a dwindling resource.
If the macro system was working, the education system would meet this industry demand by churning out the right brain power, at roughly the right volume. Unfortunately that's not even close to happening. While CS degree pursuit is increasing, it's still not where it needs to be in terms of volume, nor in terms of relevance. Today's software construction environment is radically different than the last wave. The broad adoption of Agile, TDD, and XP methodologies have turned everything on its head (not to mention the advancement of the underlying technologies and programming languages themselves). The education system hasn't adapted or embraced these changes.
Years ago the large software firms defined the curriculum. They did so in Waterfall environments with armies of standardized engineers in homogeneous hardware and software stack environments while making massive platform plays themselves. It is a different world today, and we need different education solutions. I'd love nothing more than our existing public education infrastructure to solve these issues. After putting my eggs in that basket for the past four years, I've have to take them out however; it's not working.
I'm looking forward to the changes that industry is going to force on the system. It will be far from perfect for awhile, but initiatives like The Academy For Software Engineering and Code Academy (two name only two out of certainly dozens) are exemplary of industry solving this challenge on its own. A handful of us are cooking up some solutions in Boulder as well. One of the cool things about this challenge is that we're at the beginning of a sea-change. Those things always yield a good time!
It goes without saying that even in tumultuous times amazing people pop out of sub-par conditions everyday. Even poor education conditions can't hold back true talent.