[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Complexity, yet again
Date: Tue, 24 Sep 1985 22:11 EDT
From: "Scott E. Fahlman" <Fahlman@C.CS.CMU.EDU>
In this note, I would like to respond to one point you made that I think
may be important and very relevant to this discussion: the one about
wanting things to be modifiable forever because you never reboot your
machine....
Flavors wants full runtime modifiability and the absolute maximum in
efficiency, so it makes the latter choice. Well, almost...some things
would just be too expensive to fix up, so they don't get fixed; others
are fixable, but only at a cost the probably doesn't want to pay. Once
there are a few of these exceptions, you can't just tell the user to
change what he likes and to just trust the system to keep everything
consistent. The user has to more or less understand how the fixing-up
process works and what its limitations are. And this, I think is the
biggest unavoidable cognitive load on the would-be user of flavors.
Because of the combination of maximum compilation, arbitrary load order,
and runtime flexibility, the consistency machinery is very hairy, and
there's no simple lie that you can tell the user that will allow him to
ignore it all. I'm pretty sure that this is a fundamental problem and
not a documentation issue.
I wish you would be specific. I spent some time trying to guess what in the
world you could be talking about. I came up with two things: (1) you have to
call the function recompile-flavor sometimes (but that bug was fixed about
three years ago, and in any case was an implementation shortcut, not a
language issue); (2) when you change the number of instance variables in a
flavor that has already been instantiated, existing instances break (this
isn't a language issue either, since it's easy to fix, is fixed in your
student Handerson's implementation I believe, and is fixed in my
implementation (which you haven't seen, so I can't fault you for not knowing
about it.)) Except for this, I can't think of any exceptions to the rule that
you can change what you like and trust the system to keep it consistent, which
of course is a rule to which every program development system ought to adhere.
Have I correctly guessed what you're talking about, or are there some real
fundamental problems that I'm overlooking?
....I am willing to divide my life into phases: when I'm
messing around and doing exploratory programming, I'm willing to suffer
a modest loss of efficiency -- say, a factor of two overall. When I've
got the system the way I want it, then I want to be able to compile out
all the flexibility to get the very last drop of performance. the
excess complexity of flavors comes from wanting both of these things AT
THE SAME TIME. I'm willing to accept one or the other at any given
time, and to recompile and reload the universe when the time comes to
switch modes.
In my view, forcing the user to choose between exploratory and production
modes would be an increase in cognitive complexity, not a decrease!
By the way, I am not saying that CommonLoops does better according to
these goals -- just that they still have an opportunity to do so,
depending on how various issues get resolved.
Thanks, that wasn't clear to me from your original statement. The really
important thing is that we all (I hope) agree that it is important to decrease
the apparent complexity of object-oriented programming as perceived by today
and tomorrow's users. Your comments are helping, but I'm still trying to get
a grasp on the exact nature of that complexity.