My comment on a question in a www.softwaredioxide.com discussion group
Engineering is reaching goals by design. To be able to reach goals by design,
engineers use communication, knowledge, science and mathematics. If the knowledge
is insufficient to know how a goal can be met by design, experiments are conducted
to acquire this knowledge.
Once the design is done, it can be built (once) or produced (repeatedly). Engineering
skills are also applied to how the building/production can be optimised, by designing
in produciblity, as well as optimising the production process.
All of this holds for all kinds of engineering whether it be engineering bridges,
houses, airports, cars, appliances, or engineering software. Software engineering
reaches goals by design in software. Coding is the building part. At the design
stage you already KNOW that when you will build it, it will reach the goal, by design.
That is engineering and this can be applied to software development very well.
Just like you could just start building a house and design as you go along, you
can try to build software and design as you go along. You may imagine the result.
If you start building a car and design as you go along, you would probably get stuck
when you arrive at the engine. Engines are too complicated to design during building.
If you start building (=coding) software and design as you go along, you will get
stuck soon, because software is too complicated to design during building.
As long as programmers keep building software, designing as they go along, they
will get stuck, blaming 'complexity', which they usually created themselves. We should however not blame software engineering for this, because
what they are doing has nothing to do with software engineering. And if people think
that software cannot be engineered in such a way that we know that the goals will
be met by design even before building it, they simply lack education. The fact that
you do not know how to engineer a house, or a car, does not mean that these cannot
be engineered. The same applies to software.
Niels Malotaux
24 October 2002