Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 5/3/83; site umcp-cs.UUCP Path: utzoo!watmath!clyde!burl!ulysses!harpo!seismo!rlgvax!cvl!umcp-cs!mark From: mark@umcp-cs.UUCP Newsgroups: net.lang.c Subject: Re: Comments on book review Message-ID: <6870@umcp-cs.UUCP> Date: Thu, 3-May-84 01:40:05 EDT Article-I.D.: umcp-cs.6870 Posted: Thu May 3 01:40:05 1984 Date-Received: Fri, 4-May-84 04:36:38 EDT References: cubsvax.219 <2414@ecsvax.UUCP> Organization: Univ. of Maryland, Computer Science Dept. Lines: 28 > Well, I for one subscribe to the notion of "stepwise refinement" or > (more poetically) "creeping elegance." The idea is to write a program that > (1) is small (2) does at least some of what you want the final program to > do, or shoots in that direction (3) works and (4) is easy to modify. That is a wonderful way to program, and I am an advocate of it myself. However, it has an actual name in the computer science literature and it is NOT "stepwise refinement", which means something totally different. You are describing "iterative enhancement". [Basili and Turner. "Iterative Enhancement: a practical technique for software development". IEEE Transactions on Software Engineering. December 1975]. Stepwise refinement is Edgar Dijkstra's programming method, in which each refinement is a "pearl", and all the pearls together form a beautiful string of beads which (a) prove the program correct (b) explain why each refinement was made. The idea is to start with a program which is provably correct but inefficient (or not yet in an actual programming language) and refine it into final form, preserving correctness along the way. (And when Edgar says correctness, he means CORRECTNESS). For what its worth, I think stepwise refinement is only for programs that can fit in a couple of textbook pages, and iterative enhancement is for anything bigger. . -- Spoken: Mark Weiser ARPA: mark@maryland CSNet: mark@umcp-cs UUCP: {seismo,allegra}!umcp-cs!mark