My opinion / experience, for what it's worth, is that the style of education can only do so much to turn out a good programmer. The smart, motivated students will be stuffing themselves to the gills with everything they can get their hands on. The resources online are incredibly abundant. There is MIT opencourseware, tons of books are made available by their authors free online, pretty much every other book is available via torrents. Not to mention hundreds of programming blogs, and sites like this. Even more importantly, the FOSS movement has triumphed in making so many programming tools available for free. Someone trying to learn a new mainstream language can expect to start by downloading a good, free IDE.
In short, I think that the good students have the resources available to make themselves into great programmers. The students that see computer science as a gravy train, and just want to scrape by with the minimum necessary to pass each class are never going to be great programmers. No matter how much the curriculum prods them towards greatness, as soon as they don't have a grade on the line they will stop working. I met way too many of these second class of student in my undergraduate career, and precious few of the first.
In Electrical Engineering, it is accepted that many of the graduates are going to be second class. The career path for these individuals is sales, technical management, and marketing/application engineers. Maybe it would be helpful to have a similar tacit understanding in Computer Science. Only the top 10% or so are actually going to be programmers, the rest should go into sales, management, IT, etc.