[comp.lang.misc] Programming Paradigms

abbott@aero.ARPA (Russell J. Abbott) (10/24/88)

  I'm interested in experiences with and opinions about application
  generators.
  
  I define an application generator as a computer program that has the
  following properties.
  
     1. It encapsulates the semantics of a particular application domain  
        or computational paradigm.
  
     2. It  provides  a  way for "programmers" to tailor, i.e., program, 
        the encapsulated knowledge for the use of "end users."  In  other  
        words it defines both "programming" and "end user" roles.
  
  I'd like to take a broad view of application generators and include, for
  example, spreadsheet systems as application generators.  Spreadsheet
  systems encapsulate a limited version of the computational paradigm of
  constrained arrays of values.  They are used to generate applications
  when "a programmer" encodes, for example, an organizational structure
  (i.e., a set of constraints), which is used by "an end user" who enters
  specific data values.  (Of course the programmer and end user may be the
  same individual, but they need not be.)
  
  I realize that such a broad view allows one to consider general purpose
  programming languages as application generators as well as perhaps any
  interactive system.  My real interest, though, is in application
  generators that provide programming leverage in powerful and interesting
  ways, and it is experiences with these sorts of systems that I'm
  soliciting comments about
  
  I believe that this topic merits open discussion, so I request that
  comments be posted so that others can join in the discussion.
  
  Thanks,
  
  -- Russ Abbott
  

steve@nuchat.UUCP (Steve Nuchia) (10/26/88)

From article <39964@aero.ARPA>, by abbott@aero.ARPA (Russell J. Abbott):
>   I'm interested in experiences with and opinions about application
>   generators.

>   ... following properties.

>      1. It encapsulates the semantics of a particular application domain  
>         or computational paradigm.

I wrote a large fraction of a commercial "Applications Generator" which
is mercifully becoming more rare now that the company has finaly finished
dying.  "Application Generator" is, first and last, a marketing word.  As
such it means precicely what the user (of the phrase) want it to mean,
nothing more and nothing less.

The distinguishing characteristic, as I see it, is that an AG attempts
to provide a framework in which only the "interesting" aspects of the
application are programmable and everything else is provided by the
system.  The marketeers will tell you that you don't have to do any
programming at all, you just fill in some screens or whatever and "poof!"
you've got an application.  In fact it is a language, often with bizarre
concrete syntax, with a limited domain of discourse.

It is the choice of programmable versus built-in features that distinguish
one AG from another.  If you've never used one, let me tell you that
if you pick the wrong one for the task at hand you will be one miserable
camper.  "Wrong" means that it fails to match your requirements in an
area that is not programmable.

This difficulty is inevitable in a AG as I've defined the term, since
if everything is programmable it is not an AG but some other kind of
animal, perhaps a library, a development environment, or a program
template.

I believe that there is a non-null class of problems for which AG/4GL
is the solution of choice, but I think that the methodolgy with which
they are employed is flawed.  Since a 4GL is inherently application
domain specific what is needed is a way to use many of them in one
project.  The practitioners and vendors today tend to be very partisan
when cooperation and interoperability would seem to be a more productive
course.

Utopian example:  say we have a 4GL that is really great at describing
database consistency constraints and update policies.  Say somebody
else has one that is unbeatable at user interaction dialogues, a third
vendor one that does reports and "posting"...  Using modern implementation
techniques, particularly server/client protocol (ala X), these could
easily be made to work together.

The situation we have now is that every vendor is selling a single
verticaly integrated (includes all layers) package instead of a
component.  This would be OK if they designed it as a family of
languages for different purposes but each vendor has his own concept
of what the One True Way to think about application design is, and
his language supports only that one way.  My latest example is with
an SQL based AG - everything is a query to them.  Well, not everything
in my application is a query, but to make it fit their model I have
to turn it into one.  Sigh.

That's my two cents worth.  This is a topic that I have devoted a great
deal of time to, though little in the last year or two.  I'd be happy to
discuss it further here.
-- 
Steve Nuchia	    | [...] but the machine would probably be allowed no mercy.
uunet!nuchat!steve  | In other words then, if a machine is expected to be
(713) 334 6720	    | infallible, it cannot be intelligent.  - Alan Turing, 1947

johnson@p.cs.uiuc.edu (11/03/88)

/* Written  5:05 am  Oct 22, 1988 by eliot@phoenix.Princeton.EDU in p.cs.uiuc.edu:comp.lang.misc */
In article <6154@june.cs.washington.edu> pardo@cs.washington.edu (David Keppel) writes:
|jack@cs.glasgow.ac.uk (Jack Campin) writes:
|]dlbaer@mozart.UUCP (Dennis L. Baer ) wrote:
	Stuff about SPL, which was followed by ...
|]:-)  You mean I can't use complex numbers to index an iteration?    :-)
|]:-)  For shame!  This language obviously still needs some work...   :-)
|
|Oh, you think that you have problems.  Gee, I can't use structures and
|datatypes as array inidicies.  That's a real problem for me.

That's not nearly as great as my problem. I need a FOR loop that uses
Japanese art-films for its indices. Maybe I should switch to SPL? 
/* End of text from p.cs.uiuc.edu:comp.lang.misc */

Smalltalk lets you use Japanese art-films for indices if you want
(Dictionary indices, not Array indices), though you will have to
define a class to represent Japanese art-films.  Any kind of object
can be an index of a Dictionary.  Most object-oriented languages let
you define iterators that you can use to iterate over collections,
though Smalltalk iterators are easier to use than most.  Iterators
that do the same thing as a FOR loop usually do not generate indices
to an array but generate the elements in the collection directly.

I know that the comment about Japanese art-films was probably a joke,
but I couldn't resist plugging my favorite language.

stachour@umn-cs.CS.UMN.EDU (Paul Stachour) (11/08/88)

In article <82100005@p.cs.uiuc.edu> johnson@p.cs.uiuc.edu writes:
>
>That's not nearly as great as my problem. I need a FOR loop that uses
>Japanese art-films for its indices. Maybe I should switch to SPL? 
>/* End of text from p.cs.uiuc.edu:comp.lang.misc */

  I've often found the need to do arbitrary indexing as well.
  When the type-of-item you need to use is not 'natural' to your
  programming language, then maybe you need to map it into something 
  that is.  May I suggest using the one of the "map" family of 
  components for Ada that are distributed by Grady Booch
  (Wizard Software, 835 S. Moore St., Lakewood, Colorado 80226).
  And since it is in Ada, the mapping is protected (by Ada private types)
  against other modules messing with your mapping indicies!
  [I prefer to do things in a way where other people's accidental
  buggy code does not make mine {good or buggy} malfunction.]
  ...Paul
-- 
 Paul D. Stachour, Adjunct Professor, University of Minnesota
 USPost:  4-192 EE/CompSci Bldg, Univ of Minn, Minneapolis, Minn. 55455
 Internet:  stachour@umn-cs.cs.umn.edu   Telephone:  (612)-782-7135