[comp.software-eng] The nature of software

bertrand@eiffel.UUCP (Bertrand Meyer) (09/05/90)

From  <5524@stpstn.UUCP> by cox@stpstn.UUCP (Brad Cox):

> (...) 
> Software engineers work with software, an abstract/concrete hybrid; a swamp
> that's too thick to drink and too thin to plow. By hybrid, I mean that we get
> some of the best and some of the worst of both worlds.
 (...)

> The problem is the intangible, swampy nature of software itself that causes
> people to deal with it as a matter of abstract belief rather than concrete 
> tangible fact. Thus direct manulation user interfaces, personal computing,
> OO technologies, etc, etc as the low-level technologies in the massive
> paradigm shift that I'm calling the Software Industrial Revolution.


	Abstract/concrete hybrid. Absolutely. (As long as you don't infer this
to be a rationale for hybrid *languages* :-) ...)

	To be more precise: although some will disagree, the abstract
part in software is mathematics, pure mathematics - most of the time
not very deep, but of a more exacting nature than most of the mathematics
practiced by mathematicians.

	To Dr. Cox's list of ``technologies'' one should add the technology
of formal specification, which seems at long last to attract some attention
in practitioners's circles. Perhaps this is wishful thinking; but the
last issue of IEEE Software appears to be an encouraging sign of
recognition after all these years in the desert. 

	What makes software engineering difficult (but also fascinating)
is the need to reconcile those mathematical techniques with the
``concrete'' part - the hardware. The best formal specifications won't
help unless you can execute the result on your machine (and preferably
fast). Software construction is a constant tradeoff between the angel
and the beast in each of us - the mathematician and the mechanic.
(The latter in the same sense as in ``car mechanic''.)

	It is hardly deniable, however, that in the current state of the
computer profession and of computer sience education there is too much
of the mechanic and not enough of the mathematician. By the way,
CS departments do teach some mathematics, but is it the right one?
With all the respect justly due to Graham, Knuth and Patashnik's
``concrete mathematics'', couldn't we do with a little less of
Stirling numbers and a little more of predicate calculus?

	The software developer: the illegitimate child of David Hilbert and 
Enzo Ferrari.

-- Bertrand Meyer
bertrand@eiffel.com