Recently an article by Dr. R.B.K Dewar and Dr. E. Schonberg called "Computer Science Education: Where Are the Software Engineers of Tomorrow?" really got some discussion going. The authors brought up a lot of what they see as problems in computer science education and they placed a good bit of the blame on using Java as a first programming language.
There was a lot of discussion on the Advanced Placement Computer Science mailing list, a lot of professional developers I know also sent it around, and of course there has been discussion of it in various blogs. I highly recommend the response by Michael Kölling, Senior Lecturer at the Computing Laboratory, University of Kent. Michael and I have had our disagreements in the past but his discussion of this article is pretty much spot on.
The complaints that Dewar & Schonberg make against Java are just as valid (or not) against the .NET languages like Visual Basic and C# BTW. But the real problem is not the first language but the overall curriculum (which is one of Michael's points.) The problem is not the tool but how it is used.
As I see it the university curriculum has gotten too big and complicated. No one wants to leave things out but there is limited time in a four year degree. Some have talked about making more CS programs five years long. That has some problems. The answer I see it to move more computer science into the high school grades.
Think about what it would be like for a math major if his first exposure to algebra, trigonometry and geometry was in the freshmen year in college. Unthinkable isn't it? And yet for many students that is essentially what we do with computer science. We have computer science majors who never took a programming or other real computer science course in high school. Or perhaps they took one course - maybe APCS or perhaps a BASIC programming course. Is it any wonder that CS 1 is a very basic sort of course? Is it any wonder that retention is such a problem?
High school students should have the opportunities to do more. I know that they can do more. I have had many students over the years who took two full years of computer science, learned several programming languages, and were well prepared to jump in at a higher level than many of their peers when they got to college. I know many other teachers who have had the same experience.
Wouldn't things be a lot better in college if students arrived knowing how to program and program well? Wouldn't it be better if the first CS course majors took is something that sophomores (or second year students) took today? I think so.
Of course there are difficulties. There is a real shortage of well-trained CS teachers in high schools. And of course there is a lack of standards that allow students to get graduation credit for computer science courses. So this is not an easy situation. But I do think that we have to start thinking of computer science as a liberal art and find ways to teach it more and better in high schools.
I would love to see AP CS use C or C++ by the way. Great stuff. Pointers is important for example. But as a first language C++ is not a good idea. The first language has to be able to build interest and cover the simpler more basic concepts. Moving the AP CS program to C++ (again - I taught C++ as an AP language in the past) would not be a good idea without previous course requirements using a better first language. Just my opinion - I'd love to hear others.