Software construction involves the main following tasks:
An essential Task:
The fashioning of the complex conceptual structures that compose the abstract software entity.
The essence of a software entity is a construct of interlocking concepts: “Data sets, relationships among data items, algorithms, and invocations of functions”.
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct,
We still make syntax errors, to be sure; but they are fuzz compared to the conceptual errors in most systems.
Accidental Task:
The representation of these abstract entities in programming languages and the mapping of these onto machine languages within space and speed constraints.
Examples of the accidental task:
- Hardware constraints
- Awkward programming languages
- lack of machine time
Tips to address the essential part of the software task:
- Exploiting the mass market to avoid constructing what can be bought.
- Using rapid prototyping as part of a planned iteration in establishing software requirements.
- Growing software Organically, adding more and more function to system as they are run, used and tested.
- Identify and developing the great conceptual designers of the rising generation.
The inherent properties of the essence of modern software
- Complexity
- Conformity
- Changeability
- Invisibility