[comp.software-eng] Designing to specs

UH2@PSUVM.BITNET (Lee Sailer) (10/19/89)

I thought of another wrinkle on the question of the difference between
the "design" of software and the "engineering" of other stuff.  Much
of the debate concerns how in some fields, such as civil engineering,
many standards already exist can be followed, while in software few
such standards or handbooks are regularly used by practitioners.

But there is a second related issue.  In hard engineering, I think there is
sometimes an additional legal or bureaucratic layer of society that
tries to keep users from abusing the thing beyond its specs.  For example
a fire marshall might clear a theater if too many people occupy the balcony,
or trucks above a certain weight might be prohibited from using a roadway.

Right off hand, it is hard to think of software situations where some
quasi-judicial body steps in and says, "Your corporation cannot put
that many employee records in that database," or "Sorry, that problem
is to big for that spreadsheet."

Oh, wait.  I just thought of one.  Years ago, a friend of mine who was
engaged in high-powered cancer research needed a simple t-test to
test significance, so he wrote a basic program on his Apple, a program
that I am sure any of us could write blindfolded.  Science magazine
rejected his article until he computed the t-statistic using one of the
approved stat packages, which included SPSS, BMDP, and SAS, as I recall.

tada@athena.mit.edu (Michael J Zehr) (10/19/89)

In article <89291.134836UH2@PSUVM.BITNET> UH2@PSUVM.BITNET (Lee Sailer) writes:
>I thought of another wrinkle on the question of the difference between
>the "design" of software and the "engineering" of other stuff.  
>[legal controls like max people per building or max vehicle weight per
>bridge, etc.]
 
There's another difference i've thought of.  "Real" structures are much
less likely to be used for a purpose other than intended.  on the
humorous side, bridges are very rarely picked up and moved somewhere
else to be used for a different reason.  :-)  

(there are of course times when buildings are renovated, but that often
costs close to (or more!) than the cost of building it in the first
place, so it's treated as a serious project.  too often software is
supposed to be reused and it's expected to take no time to tailor
something for a different environment.)

here's a concrete example of something i found in a production system i
was maintaining once upon a time: there was a sort procedure which was
copied (almost) verbatim from K&R (or so a comment said -- i didn't
check it for accuracy) that was o(n^2) in time-execution and was being
used to sort arrays that were 7000 elements long.  i told someone to
replace all calls to it with a call to a library sort routine,
drastically speeding up all the operations which required that sort.

there was a mistake here in taking a "toy" sorting program that was
designed for maybe 50 elements and scaling it up by a factor of 100.
and that mistake shouldn't be overlooked... but such mistakes are made
because they're *possible* in software-enginerring.  you simply can't
arbitrarily copy something and scale it to whatever size you want in
"hard" engineering disciplines.

and though it's this characteristic of software-enginerring which allows
for major mistakes, it also allows for major successes.  (can you
imagine a contractor saying "well, we built a similar
highway/bridge/bypass system for another city, so we can do one for you
in 1/10 the time and 1/4 the cost." ???  this is the sort of thing that
can be done and is being done in software-enginerring today.)

-michael j zehr