[From Bill Powes (970821.1540 MDT)]
Oded Maler (970821.1344 Pacific time)--
My 2 cents: I taught my son Logo when he was around 10. Turtle
graphics is a great tool to see immediate results. You learn
very nice to build procedures and use recursion. Also the graphical
effects of bugs can be insightful. He liked it and got it.
The weak point is that after some time, the more advanced graphics
requires real and deep geometrical thinking.
That's my impression, too: once you get past the easy built-in stuff, it
gets much harder very rapidly.
<On the other hand, going to Pascal
where you have to declare everything to death, which is a good practice,
is not very thrilling to a young kid.
When you can just write "forward 10" I don't think you're learning
programming. The actual operations that create this result were written by
someone else who _could_ program. I don't have anything against programming
in higher-level languages, but I have this prejudice that you don't really
write good programs unless you can imagine the machine-level instructions
that are involved. The huge size of modern applications, I suspect, is due
partly to the fact that the writers aren't aware of what's going on at the
lower levels. Of course kids should start somewhere in the middle of the
abstraction gradient -- I wouldn't hit them with assembler language.
Maybe one approach would be to write a set of canned programs that can be
used in the "forward 10" kind of programming, but deliberately make them
limited in what they can do. Then when the kid says "Gee, I wish I could
make it move in a curve," you can pull the covers off of the procedure,
show them how it works, and show them how they can change it to do what
they want.
Logo is the best first choice for kids. You can do
some modest list processing programs (sorting, concatenation,
etc.) for understanding recusion and modularity.
The hardest part of this is to tell them why they should want to process
lists and understand recursion and modularity, when I don't understand why
myself (well, maybe I understand why modularity is a good thing). I think
you have to have a real passion for lists to want to see EVERYTHING that
way. And I'm not sold on recursion as a general programming technique.
Concerning object-orientation, what I hear is that the neatest object
system is that of Java, but personally I still lag behind this technology.
Objects are just generalization of data-types where you define for each
such class its legal interface with the outside world. It is very good
if you develop software which interfaces with other people's modules,
but can be annoying if you want to make a quick and dirty hack in a
program you write yourself and for yourself.
Right, it has those practical advantages. But my main objection is what you
put together into the package. Why bundle data and procedures together, as
if for any data set there is only a finite set of procedures that apply to
it? I suppose that if you're not trying to simulate real systems that
doesn't matter so much, but in my applications it matters a lot. The
objects in the environment don't come packaged with the "legal" operations
you can apply to them. The whole point of behavioral modeling is that
organisms can apply any operations at all to the same environment. I could
see packaging _properties_ with the objects.
I don't know anything to speak of about Java programming, but just from
what I can see on the Web, it seems to make all the pages look pretty much
alike. I know the advantages for the poor customer who has to use all sorts
of applications, but as a creative tool it seems to be taking us backward.
Of course I had the same complaint about integrated circuits -- why should
I have to try to design circuits by using big pre-organized chunks that
somebody else thought would be useful? When you standardize too much, you
end up with standardized thinking.
Best,
Bill P.