From ... Path: archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!cyclone.bc.net!newsfeed.direct.ca!look.ca!newsfeed.icl.net!npeer.kpnqwest.net!nreader1.kpnqwest.net.POSTED!not-for-mail Newsgroups: comp.lang.lisp Subject: Re: [NOT] Re: To Paul Graham: Please put your books online. References: <3b114bf4.748963843@nntp.interaccess.com> Mail-Copies-To: never From: Erik Naggum Message-ID: <3200650588736742@naggum.net> Organization: Naggum Software, Oslo, Norway Lines: 72 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Mon, 04 Jun 2001 13:36:33 GMT X-Complaints-To: newsmaster@Norway.EU.net X-Trace: nreader1.kpnqwest.net 991661793 193.71.66.150 (Mon, 04 Jun 2001 15:36:33 MET DST) NNTP-Posting-Date: Mon, 04 Jun 2001 15:36:33 MET DST Xref: archiver1.google.com comp.lang.lisp:11298 * 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.