I just had a brainstorm, and I feel like I should commit it
to writing somewhere, so why not here?
One of the big parts of what makes it difficult for normal
users to be as effective with a computer as a programmer is
that they can't interact on an abstract level. This is why
command lines are great for programmers (and I use that term
widely), but not so useful for normal people. cat `ls
-t` > time_sorted.txt is not a way most people are
going to think. They would want to make each intermediate
step concrete, perform the tasks and ensure that each is
correct then move to the next. This takes more time, is
more prone to errors -- but, for most people, that's all
they can do.
Anyway, it would be nice to change that, but that wasn't
what I was thinking about. I was thinking about web page
templates.
Templates are hard to manipulate in a graphical, WYSIWYG
environment. That's why DTML, PHP, ASP, JSP,
whatever-it-is-that-Cold-Fusion-uses, etc., exist. You can
deal with simple templates in a graphical client -- fields
exist which get replaced when the page is served up. But
repeating fields, conditional fields, etc., are much harder
to deal with. Graphical editors simply can't deal with
these. How, for instance, would you deal with a table has
repeating rows? The HTML-oblivious designer doesn't even
know that there's a distinction that the table begins
with <table> (but can't be seen), and then the
row begins with <tr>, and then you put in real
content. How are they going to show that the row should
repeat, but not the entire table?
Okay, so that sucks. All designers should know HTML. I
really don't think that's so hard, mostly people are just
scared off by the initial learning curve. That's true with
most higher computer skills. It would be nice to change
that, like I said, but that's not what I'm thinking of now.
So why not just implement a truly WYSIWYG web page
editor? It will show at least an example of the actual
output that a person browsing the page will see -- with all
fields replaced, repeating done, etc. You'd have to allow
easy changing of examples, to explore all the possible ways
the page could render (with no results, one result, many
results... etc). Sounds great...
Oh, but it's hard. How are you going to communicate with
the server to get this rendering? Doing an FTP upload, then
querying the server, is hardly the sort of thing that can be
done as the user types. Just like rendering proportional
fonts and paginating used to be way to much to do as the
user typed. Which is to say, it is hard, but similarly
difficult things have been worth it in the past.
The optimizations that would have to exist, I think, would
be to implement at least a subset of the server environment
on the workstation (or actually run right off the server),
and to have a template language that could be interpretted
incrementally. (Though quite probably, the incremental
thing wouldn't be necessary for a reasonably quick
language).
The other boundary would be that the designer would still
have to write in an abstract way. Sure, they'd see
the repeating fields or whatever, but they couldn't write
those repeating fields -- they'd have to write something
that represented the notion of an element that repeats in
the abstract.
But, again, this has been done before -- that is, people
have adapted to this sort of thing. The WYSIWYG word
processor only allows you to input data in the abstract.
You don't handwrite on the screen at the location you would
like the text to go (thankfully!).
Instead, when you want to go down, you hit the
Enter key. When you merge paragraphs, you go the
beginning of the second paragraph and hit
Backspace. These aren't concrete ways to interact
with the document. But people don't realize they are
abstract. They create an internal model of how the word
processor works. They realize -- even if they can't
articulate it -- that there is an invisible character that
represents a paragraph break. They realize that some, but
not all, line breaks are caused by this. Just like people
learn that tapping peddles and twiddling wheels can control
cars, the ability to manipulate a document in the abstract
is in the grasp of nearly everyone.
What WYSIWYG gives is feedback. Some people can visualize
things and work with very little feedback, but for most
people it is nearly essential. So if you have a truly
WYSIWYG editor, it just might make sense to people to make
complicated and dynamic templates.
How the interface might actually work, I'm not sure. But
the idea really intrigues me.