An article called Computer Science Education: Where Are the Software Engineers of Tomorrow in STSC Crosstalk discusses the declining competence of tomorrow’s software engineers. If you read the article fast (as most journalists seems to do…), you might get the impression that Java as a language is to blame for this. But reading the article more carefully reveals that the authors are actually attacking the fact that most CS studies are based on Java only.
I agree with the authors that students should learn programming rather than a programming language. And that is best achieved by using several languages in the education. All languages has its purpose (even C# 🙂 ), and should be used to whatever it is designed for.
What I do not agree with are the reasons the authors means Java matters (concurrency and reflection). They seem to miss that Java is one of the simplest and easiest all-purpose object oriented languages. When teaching fundamental concepts of OO, I would definitely go for Java rather than C++. The Smalltalk guys would probably object to this, but since I have no experience of Smalltalk, Java is my OO language of choice.