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
in order 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. 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.
24 October 2002