🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sw.components
Article #72

Re: Reasons for low reuse

#72
From: Scott Henninger
Date: Thu, 07 Sep 1989 18:29
85 lines
5143 bytes
|>From: billwolf%hazel.cs.clemson.edu@hubcap.clemson.edu (William Thomas Wolfe, 2847 )
|
|   The first problem that has to be overcome is the Not Invented
|   Here syndrome; we must have programmers who want to use components.
|   This can be addressed by training (at the university level), and
|   also by appeal to management (in the "real world").  

To say this is to say that current reuse environments are adequate.  They
are not.  The fact of the matter is that it is easier and takes less time
to code it yourself than reuse existing code with current technology. 
Besides, and I repeat, *people are not aware of what reusable components
exist*.  This is primarily a tools problem, not a training problem. 
Training can only get you so far.  Supporting tools must exist before
people will practice what they are preached.

It should also be noted that the NIH syndrome exists in any design
discipline.  To paraphrase Herbert Simon: "when designing artifacts for
people, *do not postulate a new man*".  The NIH syndrome is simply a part
of human nature.  You, President Bush, or anyone else, ARE NOT GOING TO
CHANGE IT.  Claiming that the "the problem has to be overcome" in this
case makes the critical mistake of trying to change human nature.

|> Secondly, once you've got a component, you must tailor it to your 
|> specific needs.  This means understanding the code or some description 
|> of the code.  Anyone who has debugged code written by others can attest 
|> to just how difficult this is.  
|
|
|   Wonderful reasons for NOT DOING IT!!!  In particular, components
|   should be designed in a generic manner, such that the "customization"
|   can be done automatically.  

Unfortunately, this is a yet unrealized goal.  The fact of the
matter is that designing generic code is extermely difficult and time
consuming.  And it will NEVER be able to handle all of the cases that
programmers will come up with.  The ability to tailor existing code is
essential. 

|   As an example, I manage the Clemson Ada
|   Software Repository, which contains ADTs like Generic_Priority_Queue 
|   (among others).  The user can dream up a new data type, define a few
|   simple operations over the type (such as "=" and assignment), write
|   a single line of code to do the instantiation, and voila: the user 
|   now has a new data type (a priority queue which can manage objects 
|   of the user's new type), and a considerable range of powerful 
|   operations over that queue, without ever looking at anyone else's 
|   implementation code; the entire process takes a grand total of 
|   about 5 minutes.

This is precisely my point.  Whenever people talk about generic code, they
inevitably give examples of *simple* ADTs; ones that you learn in your
freshman programming class.  I would argue that this would constitute an
extermely small percentage of the code for, say, an accounting program, a
user interface, or microcode for a tape drive.  The extreme effort
expended in creating a generic stack, queue, or whatever brings little
savings to one trying to create a real application.


|   There are also special-purpose ICs in the hardware industry, and 
|   these are the things which must be developed according to the methods 
|   described by Guillermo Arango in his brilliant article on Domain Analysis.
|   The software equivalent of a special-purpose IC would be a package 
|   containing a set of domain-specific data types, functions, and procedures.   

I agree with this in principle.  What we have to avoid is making the
arrogant statement that Computer Science will give us the ability to
formalize all domains; i.e. succeed where others have been "failing" for
tens, hundreds or thousands of years (all the way back to Plato). 
Guillermo's approach of "controlled approximations to *satisfycing*
solutions" is exactly what I'm arguing for.

Let me make a clarifying remark.  I have always stated that the hardware
analogy is *misleading* and is doing a great deal of harm to current thinking
about software reuse.  There are surface similarities, but the problem is
much greater for software.  A hardware engineer can flip through a few
hundred pages of hardware component descriptions and find what he needs. 
Because software is so much more diverse than hardware, the number of
potential components increases by orders of magnitude.  This makes the
problem *fundamentally* different - tools are needed to assist the
programmer.



-- Scott
   scotth@boulder.colorado.edu
Technical Details
Message-ID: <11449@boulder.Colorado.EDU>
Path: arc1-ca.pugleaf.net!utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!hellgate.utah.edu!cs.utexas.edu!uunet!dino!uxc.cso.uiuc.edu!tank!ncar!boulder!scotth
References: <11347@boulder.Colorado.EDU> <6392@hubcap.clemson.edu>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!hellgate.utah.edu!cs.utexas.edu!uunet!dino!uxc.cso.uiuc.edu!tank!ncar!boulder!scotth
From: scotth@boulder.Colorado.EDU (Scott Henninger)
Newsgroups: comp.sw.components
Subject: Re: Reasons for low reuse
Message-ID: <11449@boulder.Colorado.EDU>
Date: 7 Sep 89 18:29:53 GMT
References: <11347@boulder.Colorado.EDU> <6392@hubcap.clemson.edu>
Sender: news@boulder.Colorado.EDU
Reply-To: scotth@boulder.Colorado.EDU (Scott Henninger)
Organization: University of Colorado, Boulder
Lines: 85