I think the difference between craft and engineering is whether the knowledge is systematized (not binary, but on a continuum).
Can decisions be motivated by clear objectives and rigorous deductive reasoning, which are useful to validate the design process and also to clearly communicate what is being done and why?
A lot of conventional software “knowledge” is too hand-wavy & wooly (not to mention fad-driven) to pass that threshold, imho. A lot of software platforms/infrastructure we use is the way it is for fairly arbitrary historical reasons, quite apart from the fact that many domains where software is applied are quite hard to parametrize rigorously. There are islands however, where the design is fairly rigorous and could be considered closer to the spirit of “engineering”. But the most important input for a craft to mature into engineering is time and rigorous effort.
Either ways, I don’t see this question mattering too much in immediate practice.
Can decisions be motivated by clear objectives and rigorous deductive reasoning, which are useful to validate the design process and also to clearly communicate what is being done and why?
A lot of conventional software “knowledge” is too hand-wavy & wooly (not to mention fad-driven) to pass that threshold, imho. A lot of software platforms/infrastructure we use is the way it is for fairly arbitrary historical reasons, quite apart from the fact that many domains where software is applied are quite hard to parametrize rigorously. There are islands however, where the design is fairly rigorous and could be considered closer to the spirit of “engineering”. But the most important input for a craft to mature into engineering is time and rigorous effort.
Either ways, I don’t see this question mattering too much in immediate practice.