December 01, 2020
The juxtaposition of the term “software engineer” against other engineering disciplines strikes me as particularly awkward, in the same manner that “domestic engineer” seems like inaccurate terminology. There’s not much engineering going on in either case, in the sense that engineering is the job of building new products in a reliable manner within the context of strict definitions and regulations.
My sense is that software development is more of a craft than an engineering or science study — despite my bachelors and masters degrees in Computer Science, there was almost no actual scientific work done in those degrees (for what it’s worth, I did do some actual science, particularly in my masters: a replication study). Relatively speaking, the amount of actual engineering or science in the average developer job is negligible. You’re almost always utilizing existing tools, with existing solved solutions, putting them together in some new configuration. That’s not to say it’s an easy job, but it’s not engineering, and it’s definitely not science.
I generally think Uncle Bob Martin’s terminology on this is more accurate: software development is a craft. A lot of the work is mostly about perfecting the same concepts over and over, becoming intimately familiar with your tools and learning how to use new tools as they become available. Being able to deal with those outside of the discipline is very important. Skills generally taper off quickly, but experience is valuable from the perspective of having seen similar problems before, similar to an experienced carpenter who might not be physically more skilled than a young carpenter, but knows the tricks and pitfalls that are likely coming up in a given project.
With this in mind, I propose three things:
The fact that computer programming is relatively new seems to have escaped the impact of what people are programming. This is despite the fact that many programming jobs have arguably even more impact than many other disciplines with very high bars (law, pharma, structural engineering, etc). This doesn’t even start to touch the issue of ethics in programming, which also needs to be figured out sooner rather than later.