Jerry said:
[ ... ]
Nobody knows how to build earthquake-immune buildings, yet
engineers give certain guarantees. When those are failed to be met,
(s)he is held liable. Maybe it's about time some "software
engineers" were held liable for their unreliable code in the same
way.
Unfortunately, I'm afraid you're mostly wrong. If a building falls
down, grounds for a lawsuit would be that the engineer(s) involved in
the design were "negligent". In this case, "negligent" is generally
defined to mean that the care with which they did this particular job
was substantially less than would be expected of most others in the
same profession.
To put it somewhat differently, to win such a case, you need to show
that (in essence) if virtually and of their direct competitors had
done the job instead, you'd have a reasonable assurance that you
would have received a result of substantially better quality.
In the case of software, showing such a thing would be next to
impossible. Software disasters of truly epic proportions are
commonplace, well known and easy to cite. Offhand, I'd be hard put to
think of even one "good practice" that's sufficiently widespread that
I could testify that it was at all surprising when it wasn't
followed!
All of which is true, and all of which defines the problem. Acquisition
of quality software is hit and miss, and employment or contracting of
quality software developers is hit and miss. Mostly miss in both cases.
Peter Seebach has made a point that why worry about certifications and
warranties and so forth. He states that there exist individuals who
follow best practices - which is true - and that they don't need a
label. Furthermore, he's made a related statement that the widespread
availability of free software is very beneficial (it may or may not be,
IMHO), and that warranties and liability would be detrimental to this
process.
My take on it is, and I've said it before, certifications and warranties
and so forth are about lifting the bar. Without them purchasers and
employers need to spend a great deal more time and money to establish
what and who is quality, and what and who is not (because most of the
products and prospective employees are _not_ quality). Having
certifications/education/professional development/discipline etc which
are associated with a true profession helps provide an assurance that
*any* certified software developer you intend to hire is going to be
somewhat competent. And having guarantees on a program helps provide an
assurance that the program is suitable for a stated purpose.
The issue is that we are all craftsmen, and our "profession" is in a
pre-Industrial Era stage of craftsmanship. Except that we're missing
even a formal classification of craftsmen (apprentices, journeymen,
masters), so employers have to sort through the inflated self-labelling
so common in our field. Arguments are constantly made that software
development is somehow not amenable to being qualified and quantified,
that it's an art (and a craft), that it's impossible to create reliable
software, and so forth. These are precisely the kinds of arguments that
craftsmen made back in the day, and they don't hold any water.
We will eventually lift ourselves, or be lifted, into the status of a
profession. I'd rather do the lifting than be lifted.
AHS