For me, this is important because as a practitioner of the trade I have a historical responsibility to layout the best possible base for future practitioners and for the future of the profession.
It seems that software engineering is correctly a branch of engineering discipline, because many take it for granted, even many respected authorities.Nevertheless, as Carl Sagan and others have said, it is healthy to challenge the veracity of the evidence that comes from the authority.If we took as premise that all engineering is applied factual science (unlike formal sciences -of which there are no applications for the very reason they are formal), and the sine qua non attribute for a science to exist is that it is made of theories; and each theory is a system of laws; and each law is a general, necessary and constant relationship between phenomena (observed facts); and the observed facts can be perceived with the senses and repeatable...I am wondering...Where are the laws for the science of software?If there are no such laws –as postulates, axioms or at least theorems, then there is no science of software.If there is no science of software, how can possibly be a software engineering?Is truly the software engineering a branch of engineering? What is then? Craftsmanship? Why not? Which are the implications to the profession of making programs for digital computers?I found the following article very interesting:Computer Science is Really a Social Science
At macro level it may be termed something other than engineering....
This is a well-made analysis of the question, which is commendable when so few others are as careful. I think I can answer in reasonable way.
Looking one step further, we may ask: what is it that enables scientific laws to be formed? It is a basic material that is substantially determinate -- that behaves sufficiently 'regularly' as to be amenable to logical, mathematical models being made of it.
Does software have such a material? Yes. Looking at the very lowest level, there is the bit with its properties of identity and mutability. It is necessarily entirely determinate -- it is in a sense made of the same stuff as a model itself. Now, although this medium is clearly adequate for laws, does it have any? Algorithmic complexity results must count -- e.g. comparison sorts having minimum O(n log n). They are substantial, useful, and measurable. Yet there still seems a lack of such solid laws generally.
So software certainly has a core of the type of an engineering, it has the potential, but it has not been fully realised. Software seems best described as an immature engineering -- something often felt, but the above gives a rational account of why.
For more, see: