Subject: Re: [NOT] Re: To Paul Graham: Please put your books online.
From: Erik Naggum <erik@naggum.net>
Date: Mon, 04 Jun 2001 13:36:33 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3200650588736742@naggum.net>
* Robert Lehr
> I was taught that it can't hurt to ask. Is it possible that this is
> an instance where it _can_ hurt to ask?
Have you stopped beating your wife?
> I think that I should sue my parents for misdirection.
Every question contains a set of assumptions that an answer may confirm,
deny, or simply fail to question, in which case the answer may turn bad.
Most people consider only the surface assumption, without even thinking
about the underlying assumptions or even the purpose of asking. This is
actually reflected in their programming. If you are generally unaware of
your assumptions in daily life, chances are you will bring that lack of
training in mental skills into your programming. This is the reason I
expect programmers to be more aware of their assumptions than most people
and consequently more to blame for their assumptions, which I expect to
be more conscious than for the general population. (I realize that this
puts the programmers I talk about into the "well-educated" segment of the
population and that this is increasingly a faulty assumption, progressing
towards counter-productive.)
Suppose you are about to write a function that produces an identification
string that contains a sequence number. You believe that format is too
expensive and decide to print to a string stream. Where you would have
requested decimal with ~D in format, you just use write. This works most
of the time, until someone decides to bind *print-base* to 8, say, for
some unrelated use, and your function prints the sequence number in the
wrong base. This may be disastrous. Suppose you remember the base and
use (write x :base 10), instead. This works for a long time, then stops
working because you were unaware of the variable *print-radix* and failed
to use (write x :base 10 :radix nil). Now, it is generally wrong to use
a base and a radix marker different from what the user of the value has
requested, but there are several users of the print engine, so there are
several ways to deal with this and the Lisp way of binding global control
variables must be understood and its assumptions made explicit to make
this work _all_ the time. (I use write in this example because it lists
all the printer control variables as keyword arguments, very much unlike
the knowledge you otherwise have to have about printer control variables.)
The exact same problem occurs when programmers who have active disdain
for the internal upper-case symbol names forget to bind *print-case* or
specify :case or ascertain that readtable-case has the expected value,
because in their Common Lisp images, these all have their favorite values.
Most software bugs are related to unchecked assumptions, especially the
kind of assumption that restrict the set of possible answers to questions
that have far more possible answers. These are the questions programmers
fail to ask, or the result of asking the wrong questions, which as I hope
I have demonstrated _can_ hurt you. (And that this issue is not a joke,
unfortunately. Software quality is directly related to willingness and
ability of its programmers to ask the _right_ questions, which is a much
more valuable skill than to answer the wrong questions correctly, which
is what, e.g., Perl and HTML is all about.)
I think your parents should sue you for believing everything they said,
if anyone is to be sued over this, because they taught you that it cannot
hurt to question their advice, but you failed to do that and still depend
on them to tell you what is right. Growing up means finding out why what
your parents told you was right for them and their time, figuring out if
it is right for you and your time, and if not, what else might be right.
For instance, it worked well to repeat one's parents' advice when the
world changed very little from generation to generation, but that it has
worked in the past is precisely the reason it will not continue to work.
On the other hand, if you really had parents who were able to answer any
insane question rationally so that it did in fact never hurt to ask, it
is very important to learn how to answer questions so that it does cannot
hurt to ask... Actually, that might be a very, very valuable skill.
#:Erik
--
Travel is a meat thing.