In the ACM Software Engineering Code of Ethics, part 8, “SELF”, refers to one’s ethical duty to oneself. Software developers should ensure they “Further their knowledge of developments in the analysis, specification, design, development, maintenance and testing of software and related documents, together with the management of the development process.”
Recently Tim Bray tweeted “Software engineering needs consensus on Best Practices in terms of tools and architecture”, linking to his blog in response to Steve Yegge’s post on liberalism and conservatism in software engineering.
I respect immensely the work that engineers do in the field. You cannot fault the quality and longevity of Tim’s accomplishments as a software engineer. But as a researcher I do find it incredibly frustrating that there remains this perception that software is not an engineering discipline, or that best practices are not codified. It sounds to me like Tim is calling for a conference of people facing similar software challenges.
The problem is, we’ve already had this discussion. In 1968. And arguably in 2001. And while there is an awful lot of garbage and noise in academic research, we have some really good, empirically justified understanding of what these best practices are.
They aren’t hard to find: you can find excellent case studies and experiments in numerous sources like the book Making Software, IEEE Software magazine, Microsoft’s Empirical SE group, ICSE papers, Crosstalk Journals, Cutter Journals, and of course practitioner blogs. This need for evidence is a big reason for our efforts in the Never Work in Theory blog.