But I disagree with larryw. Bento does what it does, but using it for teaching programming? Keep in mind that there is education pricing for FMP. Much better choice than Bento for the purpose of teaching students.
Another good option is Processing, a meta-language based on Java for creation of images, animations and interactions.
Processing is free, open source, and comes with a Development Environment including many examples.
Processing is very well documented, there is a learning section and a reference on the website, and there exist several books, and a huge community support.
Examples are shared on openprocessing.org
When you learn Processing, you easily also learn Java, which is being taught in many informatics studies at universities.
The standard package comes with included libraries that allow to access the camera or the sound card of the computer.
Additional libraries allow also to do robotics (e.g. with an Arduino board), computer vision, physical simulations, or to access Microsoft's Kinect.
Such possibilities would be a challenge for those young people who want to go further and have a flair for assembling things and doing experiments.
Which leads to another topic: Interrelation between hardware and software, physical world and abstract logic. One may lead to the other, both directions are possible.
I remember my college friend who was son of a director of a fireworks company, and who used his C64 computer to address relays via the parallel port to control the ignition of fireworks. He was one of the proponents of electronically controlled fireworks.In addition, he wrote software that graphically simulated fireworks and used it for composition. (Me, on the other side, besides chemistry was more interested in assembling electronics for simple synthesizer modules, and having understood that sound waves could also be created digitally, was writing assembler code to create all types of sounds from my little Sharp pocket computer).
How many of the kids nowadays know about the inner workings of a computer, have opened a computer, know how a computer (tube or flat) display works, know about the simplest electronic parts that make a CPU or a RAM, diodes, transistors, resistors and capacitors? How many have assembled a simple flip-flop (using 2 transistors, 2 capacitors and a few resistors) and connected LEDs or a loudspeaker to it, or constructed a radio using an electronic kit? How many have made a clavilux using a serial register, or assembled logic gates?
A similar question came up on another list I subscribe to, although more specifically about resources for teaching Java. I have pasted some of the responses below. Also if you google "how to teach programming to kids" you will get many ideas.
I believe you can teach programming to kids using a wide variety of tools or languages, but I heartily agree with Martin:
I have had a lot of success teaching kids Logo and also Lego Robotics, but primarily because those were the tools I had available.
Here are the comments and links from the other listserv:
A quick google search turned up a StackOverflow post here:
You should be able to find some great tools and advice in that post,
including BlueJ, Kojo and some eBooks.
But I would also caution you that Java is a fairly draconian programming
language. But if he's new-ish toprogramming, he would likely do better with a language like Python or Ruby,
which provides the same high-quality libraries for game-type programming,
but has much more readable syntax.
Here is a fun game to practice your Java skills:
http://robocode.sourceforge.net/The book Learning to Program with Alice is a great first step into programming. Many people who try to learn how to program give up because the syntax is too hard.
Depending on the age if the kids you can use Scratch from MIT, Kodu from Microsoft or even something like NXT from Lego (which is a REALLY fun way to learn how to program). Microsoft also has something called Small Basic which is pretty good. Anything that is somewhat Object Oriented would be a much better intro into programming than what FM can offer in this realm.
As in intro into databases, FM would be a good fit, not so much in programming.
I have carefully avoided all dedicated learning tools, because:
Most if not all attempts to teach programming either result in cognitive overload of the student -- having to learn too much, or the environment is too trivial that the result is not useful and the skills learned are unimportant.
Lego and the programmable robots is the best fun and a wonderful programming challenge.
You can build routines and subroutines and incrementally the instructions given to the robot can become more and more complex. I think of all the tools this is the best for teaching programming to kids.
Bento teaches a structure with a few flexibilities. FileMaker is much more flexible. I think, though, that HTML/JS and (as Beverly suggests) eventually PHP teaches more about generic 'programming' skills.
I learn't LOGO as my first intro to programming. It is amazing how satisfying it is to draw a circle with only coordinates. I think this is the kinda fun that Lego brings....
Sent from my iPad
11th Hour Group Pty Ltd
Students need to be taught programming skills and the process thinking behind it.
I would elaborate by saying that students would benefit from learning problem solving skills which value both left-brain and right-brain approaches, i.e. both the rigor and the logic as well as the creativity, playfulness, and free-thinking, ideally striving to combine all of these as solutions are sought, developed, tested, realized, etc..
Every student should learn that careful thinking and a penchant for perfection is required. And in programming you can't fake it. Your system works or it doesn't.
I think that careful thinking, attention to detail, and a penchant for perfection are great qualities to instill. To this list I would add having an open and curious mind, and a belief in one's own ability to make progress in learning something through dedication. I happen to believe that programming is a great craft for learning all of the above. I also happen to believe that these qualities can be taught across a great variety of disciplines, including, but not limited to, programming.
Most if not all attempts to teach programming either result in cognitive overload of the student -- having to learn too much, or the environment is too trivial that the result is not useful and the skills learned are unimportant. I'm seeing that FM at least has the ability to be used as a programming teaching tool that is also useful. The cost of FM is clearly out of reach.
A few thoughts/comments:
1) It would not have occurred to me to use FM as a teaching tool for that which I consider 'programming skills'.
2) I think that Wim has a good point that FM could be a good introduction to databases.
- it has clear relevance to contemporary technology
- it can be taught within a context that illustrates practical use (i.e. embedded within web pages)
- monetary cost for setting up a student is low
4) For an age range approaching and including high school students, I would also consider Java as a possible language to learn. I think that the success for this would hinge on having a very supportive learning environment -- I couldn't see just throwing a book and a compiler and some dry lectures to a kid and expect them to have a good time learning Java.
5) I'm very glad to see that lots of folks responding to this post are mentioning or alluding to the importance of:
- having the learning process be fun
- having the learning process encourage discovery and experimentation
- developing a sense of wonder about seeing the parts and pieces start to fall in place
I think that Martin really captured these important points very nicely in his post.
And use of calculators in K12 does not only not teach appropriate thinking skills, it is definitely harmful, for their kids no longer learn the basics of arithmetic and graphing, just blindly punch in numbers into their mandatory graphing calculators, and the teachers and K12 administrators believing they've done their duty to teach the T in STEM.
My heart weeps when I see the curriculum that emphasizes facility on a calculator over an understanding (or at least an appreciation) of the craft, study and theory that underlies the calculator. My disposition, however, is not to believe that teachers are naively believing that they've done their duty by teaching such curriculum. My view of teachers is that they happen to care an immense amount about the development of their students, and yet they are also required to adhere to a curriculum that has been decided and set elsewhere.