The component model I’m working on tries to make everything you deal with visibly concrete so that it can be directly and uniformly manipulated — even behaviors. It was inspired by my wife’s fascination with a game on her PDA.
It feels like you’re just sliding things around.
Part of it is the pen.
Part is the graphics looking like a 3D thing, and the coordination with sound.
Part is the fact that the graphics respond directly to what you have them do, moving in lock-step with the pointer and retaining their shape while they do it. They “feel” like solid objects.
But part of it is the lack of intermediaries or representatives between the user and the things your really want to deal with. It does not feel like things are symbolic abstractions getting in the way. Things like file names, windows, panes, and menus just don’t have anything to do with the task at hand.
Of course, it’s an illusion. It isn’t 3D, but a flat projection on your screen. The bits displaying the object on the screen aren’t any different from those next to them, and they aren’t really tied in any way to the “object”, whose bits are just like any other in memory. And the “objects” on the screen are really no more tangible than the variables or array indices used by the programmer to manipulate them. Nonetheless, it sure feels more direct.
My model goes beyond the PDA in that more than just game pieces are reified as concrete components to be seen and “touched.” Every component has behaviors, but behaviors are just components that can be seen and “touched” in the same way. My behaviors are each represented as a sort of button that you can tear off and put wherever you want, even other objects. Of course, that means that behaviors have behaviors, which have behaviors, … Now, many professional programmers say that other professional programmers have trouble understanding recursion and metacircular architectures. (The claim is always for their coworker down the hall, never for themselves!) I think this is wrong. Consider the classic child’s amusement: “Pete and Repeat are having a race. Pete fell down. Who won?” “Repeat.” “Pete and Repeat are having a race…” My children have learned this around the same time as they learn that a thing can have two names. In fact, I think classic programming language recursion is not merely related to symbolic abstraction: I think the two are exactly the same thing.
Further, I claim that direct metacircularity on its own, without symbolic referencing, is even more basic. Children and adults using my “tactile” components will explore them directly. They will be amused when they discover the self-similar structure, but not confused. No more then when they first explore a leaf or a pair of mirrors. It is only when they try to describe the structure in abstract words that they get into trouble.