Crosstalk has a good article this month on where are the future software engineers. In part the article is the usual rant against the teaching of Java as a first programming language, but it is more nuanced than that.
The authors point out that the mathematical requirements are shrinking, and the students are not really being taught the basics any more. Sure Java is nice and easy to learn but it is not a suitable preparation for working in embedded and real-time systems.
I’m still pondering how this relates to software craftsmanship, since traditionally many craftsmen have either a comp sci or sw eng background.
Article references ACM Computing Curricula 2005 overview report, which is also an interesting read.