Showing posts with label Programming. Show all posts
Showing posts with label Programming. Show all posts

November 2, 2010

Teaching Junior To Program

We homeschool our 9 year-old son and the time has come for Junior to learn to program.

He loves to tinker. A while back I found him with a pile of batteries, several paperclips, duct tape and a light bulb. The system was dubiously connected but any little glow from the bulb resulted in shouting from the kitchen table. "Dad! DAAAAD! My light, it's working!" He makes his own swords for sword play. He builds miniature buildings and invents new costumes for his favorite stuffed animal.

He wants to know what I do all day. Once or twice he's pulled up a chair to watch me work in my home office. He thinks it's curious I spend so much time waiting for tests to run. He knows I "teach" computers, or at least that's how I explain it to him. I think his curiosity will work for him as he learns to program. I also think his love of music and talent for language will help him grasp the idea of a model as a reflection of reality, which is the basis of computer programming.

I set out last weekend to plan for Junior's introduction to programming.

I didn't find what I was initially looking for. I wanted a book or a blog titled "How to Teach Your Curious, Creative, Music-Loving Junior Linguist to Program." What I did find was a series of resources I can string together to accomplish such a thing.

First, I am amazed to learn how approachable microcontrollers have become for the education setting. The BASIC Stamp, produced by Parallax, is a thoroughly respected option when it comes to learning to program an embedded system. They produce a complete hardware and software solution with what appears to be an excellent teaching manual. It looks like tons of fun. You can make your way through the book and then move on to build whatever you can dream up based on modules you can purchase and add on to your initial kit.

BASIC Stamp is not the only option though. The open source hardware project Arduino is another option. This choice requires more initiative on the part of the parent or educator since there is nothing like Parallax's "What Is A Microcontroller?" book. Arduino fascinates me because I find it so approachable. There are tons of resources available for sample projects and kits. Assembling a curriculum will not be difficult.

Second, there are some really smart people working a project called Scratch over at MIT. Scratch looks like a great way to introduce kids to programming using games and stories. It's not hard to imagine how programming, in this context, becomes like a video game and creates a virtuous cycle in which kids want to learn more so they can play more. The development tools don't look anything like the tools I use as a professional, which is probably a good thing. The tools avoid complexities like source code files and eschew text-based syntax for a graphical drag-and-drop assemble-your-program-model.

Despite being so widely used in education, I actually found it difficult to find a curriculum I could use. I found several articles and forum posts by educators talking about using Scratch but they generally had developed their own coursework. I got the impression that I could probably go find a project on the Scratch website and start modifying it to suit our education needs. The ease with which Scratch projects can be shared is brilliant, by the way.

Third, I found some books which aim to teach children to program using a general-purpose programming language like Python, for example. These books seemed less focused on children, actually, and more focused on beginners in general. This approach didn't strike me as particularly compelling. I suppose it is fair to say I'm less focused on causing Junior to learn programming at this stage and more focused on teaching him to enjoy his creativity and explore programming. If he takes to it, there is a place for the more complete approach.

On my wife's advice, I'm keeping it simple and engaging for now. She does, after all, do this for a living. Junior and I will learn microprocessor programming together. We will use an Arduino because it's cheap and I find it fascinating. We will go through the Getting Started With Arduino book together and see what my curious, creative, music-loving junior linguist finds fun and interesting. I'll keep a watch out for what he's good at. At the very least, he will learn what I do all day.