I agree and hence the “maybe” I guess I was being overly generous :-) Just in these last five years I’ve seen a massive increase in new frameworks, application servers, languages, databases and database ORM solutions, scripting languages, build systems and on and on.
The only thing I could imagine anyone learning in college if I had to design a CS program would be a language (Java or C++), patterns (like Enterprise Integration Patterns) and continuous build systems. Maybe throw in a little hardware as background knowledge along with maybe some PM fundamentals and design methodologies (scrum, waterfall, etc).
I think what many fail to understand is software developers are the producers, not the consumers. I view the company I work for as the customer and I produce for them. If I produce a crappy product they show me the door.
The problem with off-shoring was it assumed the producer was the PM or management and 9 out of 10 times they didn’t have a clue what was needed to build and maintain a given system. Instead of listening to the actual producers they went off half cocked and now the chickens are coming home to roost.
This has been the single greatest contributer to my success. :)
I would add to your excellent comments (especially the part about learning patterns) is that the most scarce and treasured skill in technology is people-skills. I am fortunate in that regard. :)