I think that it is important to define the word “kid”. Most of my
professional work was with college math majors – and I chose to
introduce them to computer algebra using Forth. My wife
professionally taught AP Computer Science in the high school. We both
were involved, in the 1980s, with teaching computers at the elementary
school level. I can talk about experiences teaching “kids” from age 8
through 20.
The proponents of Logo felt the need to develop a special language for
kids. I don’t think the issue was ever (or needed to be) the
development of a version of Forth designed specifically for children.
Forth can accept powerful additions entirely as changeable parts. The
matter is to write applications which run on Forth and which can
assist in education.
On the high school (advanced placement) level, the goal is to teach
programming and the language is specified. When my wife first started
teaching the official language was Pascal. After several years the
official language was C++. When she retired there was talk of
switching to Java.
The choice of programming language is not up to the instructor.
Regardless of the choice of language, there is a need to have students
visualize what their programs do – and to make debugging reasonable.
Borland produced (in C++) a turtle graphics package. It provided
students with visible programming tasks. Their programs caused visible
actions on the screen. There are packages of turtle graphics commands
written in Forth, and there is no reason why they would not be
similarly useful.
I think that the main way people learn programming by work at tasks
that appeal to them in an environment that lets them see what is
happening. Forth has an advantage (in conceptual simplicity,
interactive environment, debugging ease).
However, in the 1980s there was an assumption that using computers
would involve learning to program them. So we all were intent on
figuring out ways to introduce computer programming to 8 year olds.
It was a revelation at this age that motion occurred by putting
something on the screen, erasing it and rewriting at a new position.
You could get a kid this age excited by moving a graphic block across
the screen and challenged by how to detect when it was at the edge and
how to reverse its direction.
Almost nobody had computers at home. An affluent school district might
have a half dozen (for the entire school). Early microcomputers were a
testament to unrealized potential. They really didn’t do very much out
of the box – and there were a whole bunch of serious intellectual
challenges in getting them to do anything. The ping-pong block was one
example. I remember a 4th grade girl who programmed a rudimentary
database program: “Holly’s Address Book”.
I think that both Jeff Fox and Mikael Nordman made interesting
observations. I think I want to emphasize Mikael’s observation:
> These days when 8 year olds have no problem of controlling
> programmable strategic simulation games with high res graphics,
> there is little novelty in programming a led to blink.
At the very bottom, a computer program is a sequence of commands
executed in sequence with some provision for making decisions and
altering this flow. Forth offers clarity – so is not a barrier to
learning. The real question is to supply some commands (usually with
visual outcome) that a “kid” would respond to. There is literature to
recommend “turtle graphics” as a suitable environment for learning.
There are Forth packages to implement turtle graphics. There are a lot
of true believers (like me) who find computer programming an excellent
tool for intellectual development.
I think there are two problems here: how to make Forth supportive of
learning and how to interest students in feasible introductory tasks.
There is a song about “How do you keep them down on the farm, after
they’ve seen Pari’” .
This is my concern about using computer programming for intellectual
development.
At the university level the problem exhibits itself as “how do you get
students to write programs to represent and factor polynomials?” when
we now have computer algebra systems to do this. At the elementary
school level it exhibits itself as “how do you get students to write a
program to bounce a graphic block?” when they have been playing
sophisticated graphic games.
Or how do you congratulate a 9 year old who has written a simple
searchable database when her computer now has a professionally written
application that does more.
Personally, I think computer programming was an activity that could
contribute to intellectual growth in children in the 1980s. I’d very
much like to hear from those involved in the present state.
John Wavrik
I would congratulate a 9 year old who has successfully built a car,
even if her fathers Porsche goes faster by ... let's see ... well I
just would congratulate her. Congratulations are worth something if
you know for yourself you have accomplished something.
>=20
>John Wavrik
Groetjes Albert
--
--
Albert van der Horst, UTRECHT,THE NETHERLANDS
Economic growth -- like all pyramid schemes -- ultimately falters.
albert@spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst
On Apr 27, 8:45 pm, jjwav...@ucsd.edu wrote:
>
> I think that it is important to define the word “kid”.
I know this thread has grown beyond my original intent, but as the OP,
my definition of "kid" (for the sake of the question asked) was "under
10 years old", but likely "at least 6". Although, I admit, I hadn't
given much thought to what the lower-bounds of that range should be.
> On the high school (advanced placement) level, the goal is to teach
> programming and the language is specified. When my wife first started
> teaching the official language was Pascal.
When I was in High School, I do remember learning Pascal. Perhaps I
just had a bad teacher, but my HS experiences programming were less
than sub-par. I [felt that I] knew more about programming than the
teacher did, and learning to write programs that did:
Input: 5
*
**
***
****
*****
Just didn't appeal to me very much. I saw no practical use to them at
all. I think it's very important - at all ages, when learning anything
- to see a glimmer of light through the tunnel: a goal that you are
reaching towards. At that age, I was praying to grow up and program
video games. Dumping asterisks to the display certainly didn't feel
like it was guiding me along that path.
> ..., in the 1980s there was an assumption that using computers
> would involve learning to program them. So we all were intent on
> figuring out ways to introduce computer programming to 8 year olds.
I remember at age 7 being sat in front of a TRS-80 and being forced to
learn BASIC. "Computers are the future, son! Learn it!" But, I was
also given practical problems to solve. I was (like all kids) learning
my math, but was told that if I could write programs to solve my math
problems, that would count just as well as if I had solved the
problems myself.
I don't know if this was good or bad on the part of my parents, but
certainly by the age on 9, I was light-years ahead of my counterpart
students. The concept of a variable in a math equation was second
nature to me. I was doing algebra, although I did not know it, long
before I was scheduled to begin learning it. I'm sure there were many
other "lessons" that programming at an early age exposed me to, but
that one in particular sticks out in my mind.
> I think that the main way people learn programming by work at tasks
> that appeal to them in an environment that lets them see what is
> happening.
I very much agree with this statement. This is why my first attempt at
something that taught kids to program targeted the GameBoy Advance.
Kid + games seemed like a no-brainer to me.
What that experience taught _me_ was that there is no end to child
ingenuity. I had completely forgotten my own experiences as a child in
this regard. A 12 year old has no concept of a queue or stack. But
often times, when presented with a problem to solve, they will
reinvent the wheel to solve it. That is a very wonderful thing to
watch! More importantly, I think it shows that it is *not* important
to teach kids algorithms and/or complexity. Teach them to invent their
own!
> I think that both Jeff Fox and Mikael Nordman made interesting
> observations. I think I want to emphasize Mikael’s observation:
>
> > These days when 8 year olds have no problem of controlling
> > programmable strategic simulation games with high res graphics,
> > there is little novelty in programming a led to blink.
I disagree with this. I do think that pretty 3D graphics and 7.1 Dolby
sound coding has it's place in learning. However, I have a wealth of
experience in this area. What attracts kids (of *all* ages) to tools
that make graphics, etc. "easy" is the notion of getting something for
nothing. They very quickly become disenchanted when they suddenly
realize that not only is real work involved, but that the scope of
their dream way outside their immediate reach: they can't model,
texture, or don't understand vectors, matrices, or quaternions.
As I stated above, I think when learning to program, a kid needs 2
things. First, they need an attainable goal.. something they can do
solo. Second, that goal has to be a reasonably obvious step in a
direction to learning more and guiding them towards something "big"
that they would like to accomplish.
Certainly making a box light up on a computer screen isn't interesting
to a kid at all. But, actually soldering an LED and then turning it on/
off from a program on a PC would be. But it can't stop there. It has
to be taken to the next step. Create a timer, add audio: a terribly
loud sound. And have the kids program their own alarm clock that can
wake their parents up in the morning.
(Admittedly, I think this is beyond the age group I defined above, but
perhaps not?).
> There are Forth packages to implement turtle graphics. There are a lot
> of true believers (like me) who find computer programming an excellent
> tool for intellectual development.
I do believe that turtle graphics is the wrong way to go. I agree with
making programming visual somehow, but if you want the results to be
graphical, then I think the bar has definitely risen (as Fox and
Nordman stated). But I do think that for kids, it doesn't need to
include 3D, pixel shaders, or raytracing. Perhaps simple 2D sprites? I
don't know the answer, but I love exploring the problem. ;)
> This is my concern about using computer programming for intellectual
> development.
I'm sorry. I don't understand this concern. Can you explain this more?
Jeff M.
> I do believe that turtle graphics is the wrong way to go. I agree with
> making programming visual somehow, but if you want the results to be
> graphical, then I think the bar has definitely risen (as Fox and
> Nordman stated). But I do think that for kids, it doesn't need to
> include 3D, pixel shaders, or raytracing. Perhaps simple 2D sprites? I
> don't know the answer, but I love exploring the problem. ;)
Yes, I think 2D functions are a good idea. When I wrote Lua Player, my main
goal was to make it easy to write old arcade style games for the PSP, see
e.g. this tutorial:
http://wiki.ps2dev.org/psp:lua_player:tutorial
Looks like some kids have used it for writing some nice small games.
Unfortunately an interesting site with many games is abandoned, but I have
reactivated an old archive of my gallery:
http://www.frank-buss.de/luaplayer/gallery/index.html
My Snake game is only some 430 lines and looks like this:
http://www.youtube.com/watch?v=PJTPb-bgt3k
Of course, music and sound effects player is included in Lua Player and
needs only one line for playing a music instead of e.g. some 20 lines
you'll need with the Windows API.
Maybe this is an important thing: Provide a rich library with easy to use
functions, this makes it easier for kids, and even older programmers :-) to
use the system. This is true for Forth, too.
--
Frank Buss, f...@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
> I'm sorry. I don't understand this concern. Can you explain this
> more?
> Jeff M.
My thoughts are very much in keeping with what you said:
> As I stated above, I think when learning to program, a kid needs 2
> things. First, they need an attainable goal.. something they can do
> solo. Second, that goal has to be a reasonably obvious step in a
> direction to learning more and guiding them towards something "big"
> that they would like to accomplish.
I would, however, make a similar statement about "intellectual
development" and about activities that provide intellectual growth.
Computer programming could be an intellectual growth activity if a
student wrestles with problems and develops and understands new
concepts.
I wrote my article having in mind some instances where computer
programming did provide intellectual development. I was not thinking
in terms of teaching computer programming as a skill or trade. I'm
thinking of it to provide attainable intellectual goals -- problem
solving experiences.
Learning the syntax of a computer programming language, playing a
video game, or punching numbers into a computer algebra program are
NOT examples of ways that computer programming leads to intellectual
development. But many of us can provide instances where young kids
learned a great deal by solving problems which involved writing
computer programs.
There was work on the use of computers in intellectual
development starting in the 1980s. The most prominent was the
work of Seymour Papert and his group at MIT. They developed
the language Logo using it to have children program a turtle
Robot. Turtle graphics evolved once computers acquired graphics
capability. Lego currently sells programmable robots of this type
(but not using Logo). There is apparently a way to program the robot
in other languages -- and Forth is mentioned as one. Take a look at
Papert's book "Mindstorms: Children, Computers, and Powerful Ideas"
and at the Lego Mindstorms robot.
At one time computer programming was a good source of attainable
problem solving tasks for young kids. A lot had to do with the fact
that early computers did not do much. Figuring out how to get them do
anything was a challenge. Things have changed, Computers are now so
abundant and applications so powerful and sophisticated that they
tend to be used as appliances. Computer languages have become very
complex. My concern is whether computer programming is still a good
area for intellectual development of kids.
----------------
Let me say something about this in relationship to upper division
math majors. Years ago I developed a course in Computer Algebra for
math majors. At the time computer algebra systems were resource
consuming -- and the University did not allow students to access
them. Only a few of my students had personal computers. I developed a
course in which students used Forth to explore computer algebra --
involving them with understanding data representation, algorithms,
etc. At the time it was very exciting -- none of them had ever seen
an application that could deal with symbolic math and they could
actually solve problems with the programs they wrote.
Over the years, more and more students had personal computers.
PCs increased in power to the point where commercial computer
algebra systems (like Maple and Mathematica) would run on them.
Eventually the cost of these systems came down and student discounts
were available. So by the time I retired, all the students in my
class had personal computers at home and most of them bought Maple
(the others could use it in a lab).
I still think that students can learn a great deal using a computer.
However the landscape changed -- so I could no longer interest them
in writing programs in Forth to deal with very basic computer algebra
concerns. Current computer algebra systems are so complex that most
users have no idea how data is represented or the algorithms used --
and reading the source code is not realistic.
My students still learn a great deal of mathematics by using these
systems. I can no longer, however, have them learn by writing
computer programs from scratch. They'd rather learn how to use Maple
or Mathematica.
------------
So back to the issue of the intellectual development of elementary
school children. There is no doubt that they need to be presented
with problems to solve. This has not changed.
In the 1980s, computer programming provided an abundant source of
"attainable goals" and opportunities for genuine accomplishment.
Languages with simple structure which provided an interactive
environment worked well.
My concern is whether the landscape has changed and programming might
not be as good an intellectual growth activity for elementary school
children as it once was. I'd like to hear from people who are
currently teaching kids.
John Wavrik
Allow me a parenthetical remark.
I see something like the above in my (engineering) students too.
They push buttons in Matlab and Simulink and generate "C" code for
the DSP in their dSPACE boxes, apparently without any knowledge of what
goes on behind the scenes whatsoever. Their skill with the top-level
tools is excellent. Unfortunately, the understanding how to realize
their Simulink ideas in actual hardware and how to handle constraints
thereof (sample-rate, resolution, code size, finite computation speed,
noise generated by actuator action, floating-point hardware issues
etc., stray interrupts) seems to be completely absent. Their issues
are now handled by the old fogeys on the helpline and in the support
departments who still know about these things. Of course, the good
students eventually learn about these things, albeit much later in
their career, and because they are really motivated (at least I
should hope so).
This top-down learning is certainly not a bad thing but then,
concerning Forth, I wonder if we're not doing it wrong: Maybe
the Forth community should be offering the young ones the quick
high-level solutions (as some posters already suggested), and the
older people the tools to find out how these really work on the
bare metal.
-marcel
My most successful "programming" course is to let kids create their own
homepage. They can show it around, let their parents and friends call
"my website" in their PCs etc. This social element is VERY important.
Generally they are very creative by adding colours and pictures. It is
great fun. Only then we are beginning to make things dynamic by
programming in Javascript. E.g. add a menu, add moving gimmicks etc.
Forth is definitely not the right educational tool today - if it ever
was. Stacks may be simple useful data structures, however you can't
circle around them all the time in order to learn flying.
Andreas
> The proponents of Logo felt the need to develop a special language for
> kids. I don’t think the issue was ever (or needed to be) the
> development of a version of Forth designed specifically for children.
> Forth can accept powerful additions entirely as changeable parts. The
> matter is to write applications which run on Forth and which can
> assist in education.
Papert felt that one of the most important concepts that programming
brought to school children was that it is ok not to get it 100% right
on the first try. That you should understand why you made the mistakes
you did and figure out how to fix them (or even to decide that they
were features rather than bugs!). They should think about how they
think and learn.
While the turtle graphics get a lot of attention and are an important
part of what I just wrote (having two representations for the same
thing, the drawing on the screen and the program source, helps the
children understand multiple viewpoints and the advantages of
switching back and forth between them), a less obvious aspect of the
design of Logo is the great care that was taken on the error handling.
This is easy to overlook unless you happen to implement both a Lisp
and a Logo and notice where they are the same and how they differ. If
we want the children to lose their fear of mistakes, having very
friendly and (most important!) accurate error messages is needed.
Unfortunately, this is easier to implement the more restricted your
language is. When you have lots of power like in Forth or C it becomes
nearly impossible to associate detected errors with their true causes.
-- Jecel
I wonder who thought of that. My experience with children and my own
memory is that fear of mistakes is something that takes a long time and
a lot of beating to get *into* children. The people who fear mistakes
are therefore called "adults", or - in the classroom - "teacher".
Martin Bitter has even more experience, and the Forth he used on his
teaching objects (Lego RCX) was very fragile and punishing (make a
mistake means the system just folds up, you have to reboot, and reboot
means you have to reload the whole Forth image over a slow
interface...). We asked him how on earth his students could cope with
such a bad environment, and his response was "They don't know better,
and it actually teaches them a lesson: That you have to think carefully
before trying".
--
Bernd Paysan
"If you want it done right, you have to do it yourself"
http://www.jwdt.com/~paysan/
Papert, Montessori and I agree 100% with this. But it doesn't take
that many years for schools to make children fearful when in that
environment. Certainly by the 4th grade it is already a serious
problem. They continue to be fearless in other environments - just
watch them learning to play some video game. So my comments are more
valid for some programming environment that is used inside schools and
not so much for something to be used by the children on their own.
-- Jecel
Interesting observation. It makes the whole effort quite questionable,
since programming is an extremely error-prone task (or rather: the
errors become obvious), and the fearful atmosphere created at school
will make this effort look futile for the students. At my school, there
was a voluntary computer science course, which I wasn't allowed to
attend (reason: "too bad marks in french"). None of those students who
went there had any interest in programming computers afterwards; the
group of nerds in my school all had, for various reasons, not been
allowed or not interested to take that course.
My conclusion then is that Forth for Kids works only when they either
use it outside school (like I did), or their teacher has the rare gift
to keep them fearless (like Martin Bitter).
> My conclusion then is that Forth for Kids works only when they either
> use it outside school (like I did), or their teacher has the rare gift
> to keep them fearless (like Martin Bitter).
Which is why I am working on a $60 computer that they can have at home
hooked up to their TV set. It is based on Smalltalk rather than Forth
(but it uses a FPGA so you could replace my processor with a MISC) and
uses a USB pen drive for storage, so they can take that to the cyber
café/lan house as a sneakernet. A lot of people feel my project is
pointless since so many children even in poor regions of Brazil do
have access to computers in the cyber cafés, but I wouldn't expect
them to get any programming done in that environment! Even school
would be better in that regard.
-- Jecel
If you want to program in such an environment, why not use JavaScript?
They have the client already running, all you need is a web page where
people can edit the code they are going to load (you can also edit
JavaScript locally, but the main point in an Internet cafe is that your
computer is only yours for an hour or so). JavaScript is a functional
language with a C-like syntax, and with the right browser, it's a quite
powerful language (unfortunately, the "right browser" here is Google's
Chrome, usually not found in an internet cafe). The things Chrome
implements and makes JavaScript actually a really useful programming
language (in the browser environment) are new features of standard
JavaScript, which certainly will propagate to other browsers as time
goes by (last to Internet Exploder, though...).
Another possibility is to go the way MUDs went 20 years ago (and quite
some of these MUDs used Forth as programming language): Develop a
networked game where people can enhance the game by adding code. There,
the incentive to write programs is quite high. Imagine a WoW-like game,
where instead of doing repetitive tasks to gain "credits", you could
write small programs to improve the abilities of your character?
> [Why not Javascript for programming in an Internet cafe? Or a MUD?]
Great ideas:
http://research.sun.com/projects/lively/
(this is totally unrelated to Forth, but relevant to the original
question)
-- Jecel
Another unrelated [to Forth] project, but very relevant to the
discussion at hand:
http://research.microsoft.com/en-us/projects/kodu/
Although, I wonder how much (or little) projects like Kodu teach kids
about programming as opposed to being just good creative building
blocks... cool, but essentially no better than playing with Legos or
doodling in a coloring book?
Jeff M.