The Free-Ride offspring are 2.5 weeks into the new school year and still bubbling with enthusiasm. This week they share some of what they've been thinking about, and some hopes for the school year as it unfolds.
* Material you saw when the first kid encountered it is still there for the next kid to learn.
To be precise, younger offspring encountered lessons this week on phases of matter that seemed so two years ago. And indeed, younger offspring has vague recollections of learning about matter in kindergarten, not to mention discussing it at the dinner table. Still, not every first grader has an elder sibling from whom to leech knowledge, and recognizing the phases of matter and their properties is an important building block. If only they could start exploring the question of why the phases of matter have the properties they do.
* Even for the first kid through, new material in school isn't necessarily new.
Elder offspring's science lessons so far this year have focused on planets -- something we've discussed at home for awhile. Luckily, there's lots to know about planets, so instead of tuning out in school, elder offspring has been coming home with further questions and hitting the books to track down the answers.
* Elder offspring articulates a principled view on interactions with animals.
This morning as we walked to school, elder offspring noticed a nearby pair of Canada geese nibbling grass. Elder offspring then called out, "Hello, geese! I hope you enjoy your visit to [name of the elementary school] field, and that no one chases you away before you've eaten your fill of the lawn." I asked about this friendly address toward a critter that some consider a nuisance and a pest. Elder offspring replied, "There's no reason to be mean to an animal that isn't harming you."
"So you might be mean to an animal in self-defense?" I asked.
* Speaking of animals, would it be mean to try to breed a dragon?
Elder offspring would really like to breed a dragon, and was thinking about possible strategies for doing so at the dinner table the other night. (Mate a bird and a lizard? A bat and a snake?) Dr. Free-Ride's better half pointed out that a dragon was an especially challenging target organism, since it has four limbs and two wings -- vertebrates seem to top out at four limbs, birds have only two limbs in addition to their two wings, lots of insects have two wings but then six limbs ... There was some consideration of going for an invertebrate dragon (PZ, any suggestions?). And we didn't even get to the matter of why interspecies mating might be a deal-breaker. (I wonder if John Wilkins has a good explanation of the species concept for the under-10 crowd.) In any case, I'm glad that this biology project is purely speculative -- I do not need to be cleaning up after a dragon.
* Elder offspring toys with engineering.
To this point, the "computer" classes the Free-Ride offspring have encountered in school have been about learning how to use a computer, mostly to play educational games. Elder offspring has expressed an interest in learning how to program computers -- especially to make video games (ideally, for the Nintendo DS). We're therefore soliciting recommendations for a good first programming language for a third grader. (Visual Basic? Pascal? Maybe Mark or Rob can suggest something?)
Also, elder offspring would like to start work on the radio-controlled fish pictured below.
The joystick will direct the fish to submerge, surface, swim forward, or take a picture. Once the prototype is ready, elder offspring is hopeful that Craig and Peter at Deep Sea News can field test it.
I believe that Mark has suggested Ruby for a first language.
Though, personally, I am old school: Start them with Fortran!
They are nusiances and pests (da dah da dah dah)! Set aside the permanent stains from the goose poop on my crew clothing, I have been attacked and bitten by geese (I admit the biter was a white farm-style one not a so-called wild Canada one). They are mean buggers! However the elder offspring's inclination toward friendly greetings for animals is an admirable trait. My better half recently acquired a black widow spider that, after keeping her by him for a few days for study, he released on a nearby creek bank. Now every time we pass the creek it's "Hello Esmerelda, hope you're doing well." I do still worry about Esmerelda's sisters in our front yard, lurking amnong those weeds I need to pull this weekend.
Smalltalk and Ruby both have great intros to programming for children. The one for smalltalk is called Squeak and is geared towards teaching kids object oriented programming from the get-go. Ruby (also object oriented) takes more of a web approach (kinda like Rails for kids)with HacketyHack.
I can highly recommend a visual programming language / environment from our friends at MIT called: Scratch
It is a very flexible beginner's language in which programs are built using visual structure blocks, much like stacking LEGO blocks, to control program flow.
Creating a a very basic and simple animation, for example, is extremely easy and provides immediate feedback for young minds. As they learn what each "block" can do, they expand their programming ability, and can end up with some pretty sophisticated stuff. The site contains dozens of examples of submitted work. They even have special "ready to connect" hardware that allows expanding the code into the "real world" via pretty much whatever you might imagine. (Sensors , robotics, etc.)
I played with it briefly, and think it is a brilliant way to get kids involved with computers and logic.
My students refuse to understand latent heat. Maybe your offspring could explain it to them?
Another thought on programming / robotics: Lego Mindstorm
This is definitely more sophisticated than Scratch, and might be usable in pulling off the remote control fish project, but I have no experience with it, and understand it is definitely somewhat complicated.
One last programming suggestion suggestion, I swear, this is the last one: LOGO
David Brin (the SF author) asked a similar question about computer programming languages a while ago:
He lamented the fact that BASIC, the line-code version, was more or less a dead language and could no longer be used alongside some pretty decent intro-to-programming texts.
There is a pretty wide range of BASIC compilers still extant; here's a list by OS:
Turtle is also useful if the Elder Offspring also enjoys math and geometry.
I think with programming it's easier to learn and stay motivated if one has a specific project in mind (even if that project never actually gets completed). I learned on BASIC a long time ago, which was good because it was relatively easy to program the graphics I was making (for a gambling program and a very simple text rpg). I'm not sure if visual basic is as easy to get into or not, though it is undoubtedly more useful.
Since Elder Offspring is interested in game programming, you might consider scenario scripting instead of a formal programming language. Many games offer the option of developing custom scenarios that can be scripted in a quite complicated manner. These can serve as an introduction to simple switches, loops, and subroutines while providing a concrete entertainment output immediately. Enterbrain's RPG Maker is also something that comes to mind in this regard.
I'm guessing your elder offspring would find roboshark awesomely cool:
Addendum: something I forgot until I saw Dave's comments... IIRC, the scripting in RPG Maker is based on Ruby, which means that what's learned in making the RPG wouldn't be totally wasted in the real world.
The idea of scripting within games could work. I remember playing for literal months on Age of Empires II on user made scenarios (both playing and building/fiddling with). It was a RTS, but people had (and probably still run) incredibly complex RPG style scenarios that take far longer than anyone can ever stay connected to an online game to play out. Virtually all of the casual games played online are now (well, since a few months after the game was released) user created scenarios, most dependent on scripting.
My first experience of programming was game based, and came through the old, original DIV Games Studio. The language was nothing too useful, but it made it easy to get the basic concepts of a programming language, and meant I understood if loops, local and global variables and library files long before I had any actual knowledge of how computers work. Unfortunately I believe it only works on DOS systems - I couldn't force it to work on my XP machine when I dug out the old CD last year.
They produced a 3D enabled version that also improved the language and tricked things out a bit, but even that version tops out at Windows 98 (or a DOS bootdisk that is far too much pain to work out). Worth checking out for the retro quality.
Finally, you can't overlook Game Maker, no matter how hard you try. My friend got it when I got DIV, and kept pumping out dozens of dodgy little games that didn't really do anything other than use premade scrips while I tried to work out how to pull screenshots from throughout the game into a credit sequence (never managed it).
Disturbingly, it is GML that I have heard being taught in universities now.
I know your daughter is young, but there's a middle school version of the CMU Alice.
Seems right up her alley. And the 3.0 version next year of Alice will feature the Sims characters.
If Offspring is interested in hardware as well as software, I would add another vote for Lego Mindstorms. Though it is capable of handling complex programs, it has been well designed with young children in mind - there is a lot that can be done with fairly simple and straightforward robots and programming, and it can also be combined with any other Lego that your kids might have.
I'm kind of surprised that no one yet has mentioned Python as a first language.
I, too, am "old school" enough to have used BASIC and FORTRAN early, Pascal and Delphi later, and a zillion dialects of those (and other weird stuff) in the middle, including COBOL, LISP, APL, Algol, etc., etc. None of those is good for a kid's first language, nor are C, C++, etc. Don't get me started on the transcendent awfulness of Perl.
I became interested in Python as a "first language" earlier this year when I saw a fourth-grader writing his own programs in that language. While it has some really advanced features, it is also accessible enough for beginners to use immediately, and both its expressive power and cleanliness put BASIC to shame. The other advantage is that there are development environments for nearly any platform you can think of, and it is free for the download from http://www.python.org/
Here's another vote for Python. Not only is it a neat first language, your offspring will be introduced to the fish slapping dance, the Spanish Inquisition and the Ministry of Silly Walks.
I've heard lots of good things about Scratch, but have never tried it and also about this site, also not tried by us:
Turtle or LOGO both teach basic programming concepts that could be applied to more useful languages (or so I am told by Brian).
Also, check out this as a possible alternative to LEGO Mindstorms:
How to Design Programs. My husband is a Computer Science PhD and they teach classes for people who want to learn programming. He thinks this would be good.
I tried to teach myself BASIC from documentation when I was in 5th grade but couldn't make heads or tails of the syntax for loops. Around the same time I was using LogoWriter at school, and that was fun but if I remember correctly it was only good for drawing things and not great for games. HyperCard for Mac was a good one but you'd have to look for a clone, since it was discontinued.
I don't know if Elder Offspring would have any interest in writing graphic-less games (text adventures/interactive fiction), but you might check out Inform 7. Inform is a language developed by Graham Nelson at St. Anne's College in Oxford specifically for writing text adventures. The interface is really neat and the documentation is amazing. You can create a pretty complex world immediately and start wandering around in it. The syntax is also a little bit more forgiving than in normal programming languages (but lacks some major features, like traditional loops or recursion).