A rigorous computer science education is certainly beneficial to programmers. It provides you with the ability to see the bigger picture, and a more in-depth understanding of many topics that will ultimately make you a better developer.
I would argue however that it is far from actually being necessity. For many programming jobs, a computer science education is akin to having a mechanical engineering degree when working as an auto mechanic. You’ll certainly have a great understanding of the job you are doing, but a good deal of what you learned academically will fail to resonate with what you do in your day job at the body shop.
What the programming world needs is good, reputable vocations schools. Such institutions should take an extremely hands-on approach, be taught by veterans in the field, and prepare students for how to actually program in the real world from day one.
Focus on SVN and Git, rather than on Petri nets. Teach students how to name identifiers in their code, how to organize code, how to test, how to work with Unicode, how to develop desktop, web, and mobile applications, how to write secure code, how to sell software, how to bill clients, and other software engineering best practices. Give priority to practical topics aided by plenty of exercises and useful projects that represent the kind of work students will one day find themselves doing for an employer.
This type of school may not give us a modern day Turing, but it would definitely help establish a new generation of competent craftspeople who can begin building useful products in the real world before they’ve even donned their mortarboards. And it could easily be a 2 year crash course, rather than 4 years.
I think such an approach would be a huge improvement over the status quo of far too many Computer Science graduates who can’t write a decent program after four years of theory based education (not to mention that they are still indebted years after their graduation).
Assuming that the instructors and material were both great and not your typical “Java school” curriculum, I would recommend this route to most of the people I know who are considering getting into this field.
What do you think?