REST: everything old is new again?

Jeff Bone
Mon, 27 Aug 2001 16:15:36 -0500

Dave Winer wrote:

> They're just pushing a bunch of sand from one pile to another.

(...he said disdainfully...)

While this is true on some level, consider this:  let's say I want to write a
little program on UNIX that reads my webserver log, finds all entries indicating
a Code Red attempt, and then produces a number that reflects the hourly average
number of hits.  (Or a series reflecting trailing average, or whatever.)

I *could* write a C program to do this which makes a bunch of POSIX calls in
some order.  Or, I could wire together grep, wc --- maybe awk --- and accomplish
the same thing, possibly in a single line.  Now, I'm probably making mostly the
same POSIX calls down in the implementation of those tools, but my task is now
focused on composition of existing pieces rather than stitching together a bunch
of fine-grained interfaces.

But that's apples and oranges, I'll admit.  So let's make the analogy a bit
better.  Let's say that I have a libgrep, libwc, libawk --- whatever.  Now my
choice is:  stitch together those libraries in a C program, or again trivially
wire up a shell pipeline, probably as a throwaway.

Any way you slice it, it's clear:  there are higher-order and lower-order
mechanisms for composing and reusing code.  There's a finite amount of
complexity in the code that makes up any given piece of useful software --- a
fixed amount of sand to distribute...  But the choice of how to distribute it
and how to wire things up makes a VAST amount of difference in the amount and
complexity of the work the programmer must do.

Dave, your argument --- while literally true --- really provides no guidance at
all for anybody who wants to reuse somebody else's stuff.  Your argument by
analogy would disdain using higher-level languages vs. assembly, since that's
another example of "just pushing a bunch of sand from one pile to another."

Moving sand between piles can be important;  you want to make sure that the
piles are *appropriately* distributed for what you want to accomplish.