From: J. Andrew Rogers (andrew@ceruleansystems.com)
Date: Sat Sep 24 2005 - 10:21:57 MDT
On 9/24/05 8:03 AM, "Rik van Riel" <riel@surriel.com> wrote:
> In my work as a software engineer, I've become convinced
> there really isn't such a thing as software engineering.
>
> That is, in normal engineering we know exactly how the
> different components are supposed to fit together, but
> when building software we always need to invent ways of
> putting things together and cannot often rely on known
> methods.
Software engineering has the same tools in implementation with its broad
collection of idioms and algorithms. There is a very important difference
between how software designs are implemented and other types of engineering
are implemented, but you missed the mark.
All other types of engineering have this concept in implementation called
"fudge factor", while software implementation does not. An engineering
implementation that functions with no more than a 10% deviation from the
design expectation is considered essentially perfect. To make sure that a
design performs within its envelope, you can "over-engineer" conventional
engineering designs for an extra margin of safety.
In software implementation, everything can be and must be flawless in
implementation or the implementation is broken. There are aspects of
software design that are probabilistic, such as transaction models, but even
those must be reduce the failure rate to the minimum level reasonably
possible given conventionally designed hardware. In normal engineering,
multiple point failures do not cause catastrophic failures and frequently
degrade gracefully. In software engineering a single bit-flip error in a
million lines of code can crash the system.
Conventional software is axiomatic in construction, while conventional
engineering is non-axiomatic. That is why software is brittle and normal
engineering is robust under adverse circumstances.
J. Andrew Rogers
This archive was generated by hypermail 2.1.5 : Wed Jul 17 2013 - 04:00:52 MDT