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.