The January 2010 edition of Communications of ACM contains an interesting article by Bjarne Stroustrup, named “What Should We Teach New Software Developers? Why?”
Many professors will object: "I don’t have the time to program!" However, I think that professors who teach students who want to become software professionals will have to make time and their institutions must find ways to reward them for programming. The ultimate goal of CS is to help produce better systems. Would you trust someone who had not seen a patient for years to teach surgery? What would you think of a piano teacher who never touched the keyboard? A CS education must bring a student beyond the necessary book learning to a mastery of its application in complete systems and an appreciation of aesthetics in code.
Recommended reading for this holiday season.
P.S.: Another related articleby Bjarne Stroustrup: Programming in an undergraduate CS curriculum, WCCCE’09, May 2009
This leads to the question of what to teach ﬁrst: the theoretical basis or the craft? Since there is no way a student can appreciate the problems of writing correct software or maintaining large code bases without having programming experience, we have to start by writing code. Only through trying to write code and debugging it do people get to appreciate the magnitude of difﬁculty in producing correct software. Furthermore, only by facing the problems of evolving an existing code base do people appreciate the value of clean design, supporting tools, and testing. Long lectures on software engineering to people with a weak software background are at best ineffective and at worst instill a dislike for programming as a low-level activity unworthy of serious attention (“a mere implementation detail”) …