The other day I ran into one of the oldest software engineering tropes in the book: That software engineering should be more like work in a factory, and that developers are best equated to assembly line workers who put together a software product by assembling components to a specification. I wasn’t sure whether I should be amused or irritated. In any case, this nonsensical idea has long been debunked by Peter Naur, before it even took roots in later work by others. In Naur’s words, programming is (best viewed as) theory building, and this gets to the heart of the matter.
Naur’s point was that the challenge in software engineering is to understand the application domain, and then to do so in such a way that it can be formalized, that is to be executed as program on a computer. This correctly acknowledges the difficulties, which are first two-fold (and in a bit, three-fold): First, understanding a domain for which you have not been trained is a challenge: A banker trains before they can become a banker, how is a software engineer to acquire their domain knowledge in a much shorter time? Second, formalizing that knowledge is beyond the original training of a banker, to stay with the example, as the banker may be able resolve issues on the spot, but not necessarily be able to provide a generalized instruction set that covers all cases for execution on a computer.
Beyond the two challenges of having to understand complex domains and having to formalize them as well as possible, software engineering has a third challenge: Not only are we called upon to map the existing world into a software system. We are usually asked to improve on it as well. So we have to help the banker be innovative in their own domain and also translate this into well functioning software. Software engineers have become business partners of equal value as, as one venture capitalist put it, software is eating the world.
Naur settled all this during his heydays in the seventies and eighties last century. His collected essays are available as the book Computing: A Human Activity and I still highly recommend it. These 30-40 year old writings have lost little of their relevance and insight.