I recently read an article in The Atlantic which argues that the iterative process of software development commonly used for, and particularly suited to, Internet based distribution, are not compatible with the rigour and discipline required for its practitioners to be considered “engineers”.
As the article explains, software engineering was invented as an aspirational and not descriptive title. Programming is one activity in the creation and production of software, but even this one small aspect of the activities that may be undertaken by someone with the job title of software developer or engineer can range from largely mechanical to highly creative. The article attempts to address this creative side of software by comparing it to a more colloquial definition of to engineer, meaning “skilfully, artfully, or even deviously contriving an outcome.” and then dismisses it as something no reasonable person would want when building software. Yet the best code if often sincerely described as a work of art, and this is why many people would rather have one good programmer on their team than even three or four mediocre ones.
However a beautiful building must also be functional and not fall down. It is the engineering that ensures that. Similarly while software development can be incredibly creative and fun, it also requires a large number of less exciting activities such as checking the functionality matches what the customer requested or expected and ensuring the product is free of bugs and security flaws. When working on larger projects which require multiple teams it is also necessary to have processes to detect and prevent unwanted functionality, for example malicious back doors and inappropriate hidden “easter eggs” containing adult material. This latter aspect of the job is something that demands the professionalism of a true engineer.
Whether many self-described software engineers are worthy of the title is debatable but what the author fails to realise is that the iterative software methodology he describes as a move away from software engineering is in fact the opposite—it intrinsically requires a high degree of discipline and rigour to execute well—the very thing that he says is lacking. Perhaps as an industry we are on the right path to realise our aspirations after all.