“Should we Resurrect Software Engineering” : This is the title of a talk I will give soon.
The abstract is as follows:
Software engineering is dead or at least critically ill. Moving from the individual creation of small programs to the collective production of complex and evolutionary software systems was rightly identified as a serious problem more than forty years ago. But the attempts to solve it have recently been quite deceiving. One of the last innovative ideas was the notion of the Smalltalk class browser at the PARC in the early 80’s. There has been limited improvement in the programming productivity and this is becoming serious at a time when the number of necessary applications for professional, individual, social, and other needs is exponentially growing. Hopes created by formal methods have not scaled up in industrial solutions to increasing reliability. Recent efforts have only addressed the most apparent flaws by a more agile organization of working teams, which is probably necessary, but far from sufficient.
Clearly the present situation is not satisfactory and we do not see any forthcoming silver bullet that could help on the horizon. Most proposals are only small incremental deltas to known programming techniques and will not produce the large-scale desired effects. We need to rapidly find a way out of this situation and this can only be achieved by an important epistemological rupture or at least by a significant paradigm shift. It is the collective responsibility of our discipline to find an operational solution. In order to do this, we need to have a critical look at the young history of software engineering in order to propose a radical departure from current practices.
The talk will first propose to completely forget about classical software engineering. It will instead advocate concentrating on the important subject of “engineering” that has changed a lot in the last half-century. We need to realize that computers are now omnipresent and software ubiquitous. Old expressions like “computer-assisted” have lost any discriminant meaning just because most engineering processes are now more or less assisted by computers and software. We need to revisit a lot of beliefs that have been with us in the last decades and start thinking out of the box. The presentation will argue that we should first concentrate on defining some “unifying theory of engineering“. If this is successful, then we may propose to view software engineering as a specialization of this conceptual framework, with several expected benefits.
To make things concrete, we will consider two broad categories of engineering called “support engineering” and “domain engineering“. The first category defines a set of technical spaces like service engineering, system engineering, model engineering, constraint engineering, data engineering, process engineering, language engineering, mathematical engineering, and many more. At the opposite of this solution space, we find the problem space with a lot of domain engineering like electrical, mechanical, civil, health, telecommunication, avionics, biological and many more. There are many commonalities of domain engineering that would gain to be exposed. Starting with the building of models conforming to some ontology, a process usually defines some model validation or verification followed by a manufacturing or production step intended to augment or transform the real world.
The talk will propose an initial cartography of support engineering, insisting on model, service, process, data, and program engineering and their relations to a possible redefinition of software engineering. The talk will also mention many possible benefits of exhibiting similarities and synergies between urban architecture, mechanical, biological, energy or other forms of domain engineering and here again to a possible impact on a possible redefinition of software engineering.