Clearly much is gained by making computational abstractions concrete as ToonTalk does, but what is lost?

Let's consider an example. Suppose we want a robot that can take a stream of incoming objects and produce two outgoing streams each containing every other element. Here is a series of pictures of the training of such a robot.

Here's the equivalent robot in pseudo-code:

To Split In Out1 Out2

if In receives X then

send X out on Out1 and

Split In Out2 Out1 // notice the arguments are swapped

end

I believe there are many children and adults that understand how the Split robot works and find the Split procedure perplexing. And maybe an even smaller proportion of those who can program the Split robot could construct the Split procedure.

But have those who can program the Split procedure lost something by using ToonTalk instead? One thing they may have lost is the ability to see "at a glance" what the program does without running it. The series of pictures here helps but currently there are no tools for producing them automatically. While ToonTalk can generate a description of a robot, it is often at too low a level. Here is the description of the Split robot that ToonTalk generates.

One answer to the question in the heading is that what is lost is only of value to those who are good at thinking using abstract formalisms. But what about those learners who aren't good at using abstract formalisms but may become so if they put in the effort to learn more abstract programming language?

Another answer is that the ideal language should support multiple representations that range from ToonTalk-like concretizations, to series of pictures, to symbolic representations. And the language should support the easy movement between these representations for the same program fragment.

home | search | purchase | manual | news | info | games | faq | support | downloads | endorsements | press | contact us