The mis-education of software developers
When Bjarne Stroustrup talks, we listen — and when Bjarne decries the training of software developers in our colleges and universities, we need to do something about it.
Bjarne, of course, is the designer of C++. After working for 24 years at Bell Labs, he became a professor of computer science at Texas A&M University in 2002. Bjarne was interviewed earlier this week by James Maguire for Datamation, on the topic of computer science education. (You can read the entire story here.)
In the interview, Bjarne describes some of the problems:
Take a simple example: A friend of mine looked at the final projects of a class of third-year CS students from a famous university. Essentially all had their code littered with “magic constants.” They had never been taught that was bad style — in fact they had never been taught about programming style because the department “taught computer science; not programming.” That is, programming was seen as a lowly skill that students either did not need or could easily pick up on their own.
I have seen the result of that attitude in new graduate students: It is rare that anyone thinks about the structure of their code or the implications for scaling and maintenance — those are not academic subjects. Students are taught good practical and essential topics, such as algorithms, data structures, machine architecture, programming languages, and “systems,” but only rarely do they “connect the dots” to see how it all fits together in a maintainable program.
Bjarne believes that, “few students see code as anything but a disposable entity needed to complete the next project and get good grades. Much of the emphasis in teaching encourages that view.” Ouch!
He advises students,
Programming is part of software development. It doesn’t matter how fancy your code is unless it solves the right problem and you can explain it to others. So, brush up on your communication skills. Learn to listen, to ask good questions, to write clearly, and to present clearly. Serious programming is a team sport, brush up on your social skills. The sloppy fat geek computer genius semi-buried in a pile of pizza boxes and cola cans is a mythical creature, best buried deep, never to be seen again.
Do you think computer science departments do a good job of teaching software development?