Educating Software Developers
My brother recently shared with me an interview with C++ designer Bjarne Stroutstrup, speaking about educating software developers. Stroustrup recently entered the world of teaching after decades as a Bell Labs researcher. As you can imagine, Stroustrup had lots of good things to say.
The highlights for me tended to relate to my own career trajectory, as well as places where I see a reflection of my deficiencies. Stroustrup’s thoughts on the dissatisfaction corporations have with the current crop of computer science students:
Robert Dewar made an essential point. The companies are complaining because they are hurting. They can’t produce quality products as cheaply, as reliably, and as quickly as they would like. They correctly see a shortage of good developers as a part of the problem. What they generally don’t see is that inserting a good developer into a culture designed to constrain semi-skilled programmers from doing harm is pointless because the rules/culture will constrain the new developer from doing anything significantly new and better.
Lowest-common-denominator developer management is both lazy and antithetical to creativity. I’ve experienced this, as I’m sure most reading this have. Providing a hospitable environment for quality developers would lead to less cost for greater productivity, as a result of having fewer, better developers.
On a vital missing piece in most CS programs:
The aim is to instill a degree of professionalism; to get to the point where the students can write software suitable for the use by others than themselves.
This one, simple concept was missing from my CS education. Other than the occasional pair project, there was never any real consideration for maintainability and readability of code.
On what high school education is best to prepare the future developer:
What should high schools do to prepare students for university-level software development? When I entered a Math course as a 1st year student, the department head said something like this in his welcoming lecture: “I don’t care if you know math – we’ll teach you that from scratch – but I hope you know how to work hard and to read & write English, because you’ll need that to keep up.” I think he had an important point: current freshmen appear to have been spoon fed and many find it hard to adjust to independent work and to shake the impression that you work only to improve your grades.
With only anecdotal evidence, I can’t imagine the latest crop of high school students experiencing a renaissance of advanced communication skills. At the very best, I’d guess they are at the same, deficient level as I was exciting high school. While I won’t go so far as to suggest all high school students should complete speech and/or debate coursework, it’s pretty clear to me that any college-bound kids should be sent down that route. And this is coming from someone who works in an environment that uses 99.9% written communication.
On teaching the art of programming, as opposed to the craft:
I think aesthetics can be taught to many. Mostly it is a case of repeatedly showing students good examples and explaining why those examples are good. This takes time, years. I would like for programmers to present portfolios of their work, much in the way artist (including architects) have to. I don’t think everyone is cut out to be a programmer, just as not everybody is cut out to be a musician. Thus, we should not claim that program aesthetics is teachable to everybody. Drawing from the experience of crafts and arts, we should consider instituting a system of apprenticeships.
It will be interesting to see if all of this CS “apprenticeship” discussion coming from the thought leaders in our industry ever comes to fruition in the next decade. I personally find the concept to be intriguiing and I’d love to see a more in-depth description on how such a program would be built.
Stroustrup also talks about the much maligned “Java universities” and how their high-level teaching method is spitting out subpar developers. This is where I wince a bit. While my education was definitely skewed to the low-level, I have not even skimmed an entire data structures and algorithms book since graduation. Bad developer!
What do you take away from Stroustrup’s interview? Does it cause a lot of self-inspection, or do you think more about the changing CS education landscape?