Software engineering is definitely a thing. But it's hard to define because, unlike a physical thing like a building which sits on a patch of ground which won't change much and which will sit there in atmospheric conditions which are unlikely to vary outside a known range, a piece of software is extremely sensitive to its environment. Pass in a single bad input (perhaps "unexpected" would be a better term) and an otherwise perfectly functional piece of code could bring civilisation to its knees. It's hard to rigorously prove your way out of that scenario.
Nevertheless, an engineering discipline would seek to identify all sources of unpredictability and tame them.
Engineering is "the elimination of guesswork". Let's see how some typical activities might be classified under this broad definition.
- Installing a package from Npm and invoking some functions from it: Not Engineering.
- Writing a function definition with a specified contract, a test suite to verify the contract is satisfied, documentation for users of the function, a characterised performance envelope, etc. : Engineering.
- Downloading the source code for a function from Github and verifying that it satisfies the same function contract, passes the same test suite and offers satisfactory performance characteristics: Engineering.
But there's more to it than "just" this. The engineering discipline also encourages adherence to a code of ethics. Such as this one:
This code transcends managerial demands for shortcuts in the name of budget constraints or deadlines. Or it should do; professional engineers who are certified as such know that they can stand their ground and be given the full backup of a national organisation. An organisation which can fight a court case if necessary or blacklist an offending employer and cause other engineers to avoid working there. Whereas even the best software developers will be simply fired for any kind of professional pushback:
Nevertheless, an engineering discipline would seek to identify all sources of unpredictability and tame them.
Engineering is "the elimination of guesswork". Let's see how some typical activities might be classified under this broad definition.
But there's more to it than "just" this. The engineering discipline also encourages adherence to a code of ethics. Such as this one:https://ethics.acm.org/code-of-ethics/software-engineering-c...
This code transcends managerial demands for shortcuts in the name of budget constraints or deadlines. Or it should do; professional engineers who are certified as such know that they can stand their ground and be given the full backup of a national organisation. An organisation which can fight a court case if necessary or blacklist an offending employer and cause other engineers to avoid working there. Whereas even the best software developers will be simply fired for any kind of professional pushback:
https://www.theguardian.com/technology/2020/dec/16/google-ti...