[Edu-sig] Interesting applications

Steve Morris smorris@nexen.com
Thu, 03 Feb 2000 12:15:01 -0500


[I am resending this for Steve, who accidentally sent it to
edu-sig-admin instead of to edu-sig.  --GvR]

Hi everyone. I suggest that to get started people post a mini
biography mostly to tell where their interest comes from.

My personal interest in this subject is a desire teaching programming
to my small children and then perhaps assisting their schools in
setting up programs. While I am a poor python programmer I am an
experienced programmer in many other languages. I have made a living
programming in an eclectic mix of languages (FORTRAN, Forth, MUMPS, C,
TCL, Perl, VERILOG) and have diddled with perhaps 20 more. My primary
experience is embedded control for real time systems.

I got into this business as a hobby. I studied physics in school but
got fascinated by microprocessors early. I owned a KIM-1 single board
computer which I used to make music. At school I used computers for
various projects concerning music composition (always my favorite,)
visualization of 4th dimensional objects, investigating the relative
motion of two pendulums (a harmonogram) and other things too numerous
to mention. In general I have always seen computers as a tool to make
things happen that can't be done any other way. Eventually I realized
that people would pay me for this hobby and I have never turned back.

I thought this way of using computers was the beginning of a new world
order where we could use the computer to enhance our abilities and
expand the range of our every day activities. It has been a great
dissapointment to me to see it degrade into merely a word processor,
email agent and web browser for most people. In other words computers
have been reduced to standard applications and users only interact
with the applications that other people write. The programmibility
inherent in computers is only a minor part of how most people use
computers.

I see Guido's CP4E project as one possible way to come closer to my
vision of computer programming as a normal tool to enhance the way we
live.

Given that context I have a few questions (actually a few lists of
questions) that I would like to see discussed.

1) Who is the target for a CP4E type project? Currently it seems to be
a "whoever is interested" list of people, i.e. build it and see who
comes.  This is very democratic approach but maybe gives us too large
an adgenda.

2) What are they going to do with it. In other words what will the
CP4E students be able to do with their knowledge after they leave the
course. If this is only a training ground for future CS students then
it is hardly as interesting. You've got to have an answer to "why
bother?" To those of us in the business the question seems obvious. We
think programability is neat all by itself, and what you can do with
it is merely gravy. That won't sell with the masses.

I think these questions are key. Teaching people how to bubble sort,
regardless of how elegent the teaching method, is not going to ring
any bells. On the other hand if you have a compelling enough
application kids will pull the knowledge from you regardless of how
bad the course.

I have my own list of applications that grab my imagination and might
reach others. CP4E has chosen a 3D graphics world which is not a bad
place to start. However I think it is worthwhile to discuss what are
the elements of a good teaching application. Here is one pass:

o - It should the visible. You should be able to see the results of
your software efforts.

o - It should be interactive.

o - It would be good if the result was something physical.

Why do I list these characteristics? Because they are the
characteristics of the objects in the world we live in. These are
things everyone relates to. If you could program a baseball to change
its lift characteristics in flight imagine the number of kids that
would be fiddling with baseball software and throwing baseballs to see
what happens.

Here are my current favorite applications.

o - LEGO robots. Check out the Mindstorms system. A python interface
to these robots is quite feasable. There is a substantial world of
programmers playing with these robots. There are over 5 sourceware
programming environments for them.

o - Music composition. Almost all computers have sound output these
days. Kids love to make noise. To be really interesting a higher
abstraction than simple tones is needed. It should be easy to make a
list of chords that sound good or to play with riffs. Laying down a
basic blues pattern should be almost trivial. Notation should be
related to more intuitive concepts like the relationships of notes.

o - Computer Games. I don't think I need to elaborate on the interest
factor of this one. The trick would be to provide a game programming
world where much of the nitty gritty detail is hidden.

Here is another list, Namely what essenital features should be part of
a learning environment for CP4E.  This list is based on an
understanding of how people learn and solve problems.

o - It should be iterative. By this I mean encouraging
experimentation. The process should be to do something, see the
results, do something different based on what you learned, repeat.

o - It should be scalable. By this I mean that beginners can do simple
things which can grow with experience and application to complex
things.

o - It should be possible to encapsulate knowledge. This goes with
scalability. Once the student has learned something they don't want to
bother with the details next time. The will want to build on initial
efforts to move their projects to a new level.

As a rather superficial summary let me offer my opinion that if CP4E
or similar projects are to be successful they have to provide an
interesting world to work in and solve problems. The software should
almost be incidental except as a the tool. The problem space will make
or break such an effort. Providing a variety of problem spaces would
be better. Making an environment where it is easy to create problem
spaces would be best. Then the basic tool would grow as advanced users
and developers added problem spaces. Knowledge gained in one space
would be transferable to the others.