Sunday, July 05, 2015

Teaching Your Kid Computer Programming

My wife and I want our kids to learn programming. We think it's a great skill that everyone should have (it's also a great career choice). To that end I've been on the look out for years for the best way to teach this. Since I'm a professional programmer, with a real passion for the subject, I tried first teaching them myself. The challenge here was answering these questions: "What language do I teach them?", "What development environment should I introduce them to?" and "How do I structure the teaching?" (lesson plans, free-form, something in between).

The first two question were so much simpler when I was a kid. The answer was obviously the language called BASIC (Beginner's All-Purpose Symbolic Instruction Code). Every computer used to come with a BASIC interpreter built-in (and little else). My brother and I used to go to the computer department at our local K-mart and write a simple basic program on their Commodore-64's and Vic-20's that would cover the display with "Don't Buy K-mart Junk!" (When K-mart filed for bankruptcy in 2002 I felt a huge pang of regret). We would get computer magazines monthly with pages and pages of computer programs ready for you type in.

It wasn't so simple anymore. Computer's don't automatically start-up to a command prompt ready for you to enter your programs. There are now so many to choose from, but they all so much more complicated for the beginner. Because of my own experience with BASIC I thought it might be nice to start with a command line language. I thought "maybe I should teach them Perl on the unix command line?" If you try this you may run into some of the same challenges I did. I wanted something where they could use a modern text editor to edit the code, but then you need to make the file executable for them, and you need to add the ever cryptic #!/usr/bin/perl to the first line, not the simplicity I was looking for and that isn't even touching the language. Another thought was to teach them a language that they could create something that resembled a game. Since I'm an Apple fan Objective-C and Swift came to mind.

I ended up trying to teach Perl along with Python, Javascript, Swift, Objective-C, and Logo over the course of about 9 years. Some of these worked better than others, but mostly they failed. This was for a number of reasons: in some cases I started too early (before they could read well), they typed too slow (it was painful for both of us), they struggled with the environment (there are a lot of assumptions in the modern IDE), and the languages had a lot of terms that needed explaining (like why do I write int and float for numbers). Honestly though, the biggest problem was that I didn't have enough consistent time to spend with them on it. As much as it pained me to admit, they needed something they could do mostly on their own (or for someone else to be their teacher). I could definitely supplement their learning, or help them get unstuck, but I wasn't going to be able to teach them everything.

Programming summer camps are a great for this. In the San Francisco bay area where we live, we have several different organizations that offer these. One of the biggest is iD Tech. We've had mixed success with them. Our daughter got really a lot out of their Alexa CafĂ©. The camp was well organized and lots of fun. Most importantly she came home truly energized about programming! Before the camp she had declared that she didn't have an interest in the subject and didn't think she could learn it (so much for all of my education attempts). Afterwards she was spending lots of her free time writing code including using it to complete creative assignments at school. Here's a really cool thing she made for her English class in 8th grade. This summer we sent her to another iD Tech camp (Game programming in Unity). This camp had a lot more problems. The online curriculum they had developed in-house was so buggy that they had to scrap it and go to a fall-back plan. It's nice that they had a fallback, not great that they had to use it. The instructors although very nice and friendly couldn't help my daughter get unstuck on her projects. I spent my nights that week helping her get unstuck. Don't get me wrong, this was great bonding time with my daughter that I wouldn't trade, I just think that since we paid them more than $1000 for the week, they should be able to help an absolute beginner get unstuck. Later this summer our oldest son is going to a camp to learn Arduino, I'm hoping they do a better job at his camp.

What about online resources to help learn programming? Well, it turns out there are a bunch of options here. Many more than were available in 2006 when I first started this with my kids. My next blog post will compare some of the ones we looked at for our 9 year old son. I hope it helps you.

No comments: