Proposals
Lynn H. Maxson
lmaxson@pacbell.net
Fri, 30 Jun 2000 12:28:19 -0700 (PDT)
Jason Marshall wrote: "Now do you understand the
sabre-rattling?"
Easy, Jason, put it back safely in its sheath. I
don't mind reading what I already know in the off
chance that it might provide some further insight.
If you had rather pour through an example with 50
or 100 million lines of code, instead of lesser
number which illustrates a point, you should have
so stated.<g>
As to the traveling salesman problem, yes, I am
aware of it. In fact at one time in my IBM career
I was engaged in marketing a solution that IBM (in
France) had developed which had the characteristics
you designated (hill-climbing, etc.). The
resistance that we faced had nothing to do with the
runtime, but with what the customer had to input
with respect to routes. These were distribution
accounts from grocery chains (Ralphs, Lucky, Alpha
Beta), restaurant suppliers, liquor
distributors,...you name it, we had it in Southern
California. That effort for data collection and
coversion of route information was estimated at
about six months. It involved scheduling multiple
vehicles across all routes. The daily execution
time was certainly well within the "window of
opportunity".
The truth is that optimal or perfect is sometimes
an elusive goal. Nominally we settle on solutions
when are the best at the moment and evolve from
there to successively better solutions, accepting
full well that we may never reach the "perfect"
solution no matter how close we may come.
The question really is in deciding between a
specification language and a programming language.
As a user would you really want only to state the
goal and its conditions in a rather haphazard
manner as they occurred to you or would you prefer
to have to describe in intimate detail not only
"what", but "how", and "in what order"?
"As a user" I thought described the intent of the
Tunes HLL. Further that the range of possible
users be as broad as possible. However difficult
something may be for us "in the know" and thus
represent a challenge if a user requests it, the
issue is to "minimize" the effort of the user.
Writing 50 million lines of code is not something
we would want to place on a user. I would imagine
that M$ would prefer any means that lets them get
the same results (or better) writing only, say,
50,000 lines of code or 5,000. What you write in
is a language. What you have to write depends upon
the descriptive ability of that language (in
cooperation with its implementation<g>).
Language plus its implementation does make a
difference in terms of user effort. Now Jean
Sammet in her book "History of Programming
Languages" in 1970 covers something around 500 to
700 different programming languages. I infer from
remarks made by Brian Rice in an IRC session that
there were an equal number of new ones since with
which I also was not familiar.<g>
Forgetting the difficulties associated with some
problems the truth is that we have used various
programming languages (including most recently OO)
to produce millions of successful results. It may
not work perfectly, but we have a technological
history of hardware and software of successfully
encompassing solutions that we could not afford
earlier. Again it is not a "perfect" world, but
one our experience indicates does progress toward a
better one.
In that time, however, we discovered that
development was the easy part (in spite of its high
cost), what was killing us and bringing accounts to
their knees (and experiencing increasing backlogs
of changes) was the maintenance of what we had
developed. OO was supposed to address this. It
has failed as badly as its predecessors.
So how do you improve maintenance? How do you
develop a language and its tool(s) that allows new
development to continue without interruption and
essentially supply the ability to incorporate
changes as fast (or faster) than they occur? If
the Tunes HLL can't do that, then you might as well
put it on the junk heap with all the other (useful)
failures. If Slate cannot do that, then why are we
considering it?
It is the user who has the problem. It is the user
who pays for the solution. It is the user who
expects us to do what he must do in his arena,
providing him with a means that keeps his
competitive ability intact, one that tracks
"immediately" to changes in his environment.
Let's not argue over what we agree on. While I
haven't studied all the possible programming
languages to date (nor has anyone else), my not
knowing one does not invalidate what I have gleaned
from others. Elsewhere in another response I
reiterated the "generational" development of first
(machine) to second (symbolic assembler + macro) to
third (procedural and Charles Moore to the contrary
this includes Forth<g>) and now to the fourth
(specification). Each new generation encompasses
all the abilities (or capabilities) present in the
previous.
So unless I missed something in the material I have
not read (go figure) the Tunes HLL either
establishes a new (fifth) generation or else starts
at the fourth. Any other decision by definition
would be regressive, i.e. less than the best so
far.
Each new generation has reduced the user's writing
task in some way. However the first three limited
themselves to the construction stage in the
five-stage software development process:
specification, analysis, design, construction, and
testing. The fourth, specification language,
shifted the focus from construction to the entire
process, all five stages. The only writing which
occurs is during the specification stage. The
results of all the rest you get for "free" in terms
of human involvement. Except for the writing of
specifications the remainder is automated.
Now I have not submitted either of the problems you
mention to my Prolog compiler nor do I have any
intention of doing so. Do I think my Trilogy would
scale up to a 100 variables in a single equation?
It might, but it is designed for DOS. This means
it will get started and abort before finishing due
to real memory limits. I have managed to blow the
32MB stack on my OS/2 system with the classic
recursion equation of only 3 or 4 variables.<g>
In short it is possible to express a problem set
(requirements), a solution set (specifications),
and still not get a result. It is also possible to
do them successfully. Our task on the one hand is
to make our implementations such that the class of
"failures" continues to diminished. On the other
hand the task of the Tunes HLL is to do the same
for the user.
It may not be perfect, but at least I am "smart"
enough to know that I am closer with a fourth
generation language than with a third, regardless
of its bells, whistles, or esoteric features.