Ruly Reader Question: What are you using to teach your kids computer programming?

Ruly Reader Question: What are you using to teach your kids computer programming?
two girls wearing "smart is beautiful" T-shirts
Smart is beautiful, indeed!

When I posted a few weeks ago about finishing our math curriculum, I casually mentioned that we will move on to learning JavaScript. Readers Bertie and Mama Paul asked for details on what materials we are using to learn computer programming.

Per usual, I will give a long answer to a short question.

We decided last year that one of our goals for our children is that by the time they graduate high school, they should be proficient in computer programming in some way. Since increasing use of computers and technology is the way of the future, we feel that this is as important as being good at math or English. We haven’t nailed down the goal to a specific just yet and for now are just getting our feet wet in the world of learning computer programming.

My husband is one of those amazing self-taught people in computer programming. He will tell you that he is no expert but compared to the average person, he has mad skills in not just one but many computer languages. He learns by reading books.

I know almost nothing about computer programming. except for a little HTML. When I first moved to Washington, I tried learning C++ by reading a book during my commutes on the Metro. Since smart phones and tablets weren’t invented at that time, I was writing the exercises down on paper. When I told my husband this was how I was trying to learn C++, he told me that this was ridiculous and that there was no way to learn computer programming without sitting down and doing it at a computer. Sure enough, when he tested my knowledge by having me type one of my exercises into the computer, it was full of errors and didn’t work.

Through a lot of trial and error, I have come to appreciate that computer programming requires 3 general abilities:

  1. Logical/big picture thinking ability. Knowing how to structure things in the right order or how to creatively achieve a result within the limitations of your available resources.
  2. Mathematical ability. There is definitely an “applied math” aspect to computer programming. Many exercises, even for kids, require knowledge of geometry, algebra and other mathematical functions.
  3. Detail orientation. One of the more frustrating aspects of computer programming is the attention to detail required. If you have a comma or a bracket out of place or if you misspell a word, your program can fail and often you won’t know why until you spend a good deal of time hunting for the mistake.

In my experience, there is a lot of material out there to teach children generally about computers and computer programming but not very much when you want to learn an actual programming language! Learning the actual languages is generally reserved for kids who are at least in junior high and high school or even those in college. So, we have to give a lot of credit and respect to people who have been coding for decades, they are all probably self-taught with not very helpful learning materials to work with.

With my children, we started learning code last year through the website learn.code.org. It is free and supported by major technology corporations. It is about as user-friendly as you can get. You code examples that move around characters from popular video games. The graphics and embedded videos are awesome…but it doesn’t teach actual programming languages. Learn.code.org teaches more of skill #1, logical/big picture thinking. You “code” with blocks of text and you need to know how each block works but the code you are generating isn’t code that really works in any computer language. Sometimes they call this “pseudocode.”

I had to learn along with my children on learn.code.org. It was tough going at first. Making the computer do anything requires a little mental gymnastics to figure out how you can express in code language what you want to achieve. Something like “Draw a circle” requires a lot more code than you might expect as well as knowledge of angles and degrees. We made it all the way through the available lessons on learn.code.org and they did get very challenging at the end!

screenshot of learn.code.org assignment
Example of a “free play” assignment on learn.code.org.

Another activity my children have been participating in is an amazing local program called FredX Coders. It is also completely free! A wonderful group of local people created a coder dojo along with our local university. On select Saturday mornings, usually once a month, kids come in to learn coding along with a parent. My husband takes our daughters. Sometimes my daughters are the only girls in the class. This program so far has taught the kids about Scratch, a free online program that seems similar to learn.code.org in that it teaches pseudocode. The kids LOVE Scratch and play on it for fun. FredX Coders also teaches real languages too, often walking kids through a page of code and teaching them how to tweak various parts of it.

My daughter's first Scratch  game: "Lion Hunter"
My daughter’s first Scratch game: “Lion Hunter”

For this year, I wanted to move us forward into actually coding something in a “real” language. My husband and I discussed which language would be best for the children to learn and settled on JavaScript. I read great reviews of the book JavaScript for Kids by Nick Morgan so thought we would try that.

book cover JavaScript for Kids
JavaScript for Kids by Nick Morgan on amazon.com
So far, we are about 100 pages in to the book. My 7 and 10 year old are handling it well and I am learning along with them. It seems to me that the book would work best for someone at least 12 years old. I was worried my 7 year old would find it too hard but she is advanced for her age and has been doing just fine. My 10 year old seems like a natural at computer programming.

The book is not perfect. For the age group I am teaching, I find that I have to paraphrase many of the pages and talk through each code example in much more detail than the book provides. I also have to take notes as we go and provide ways of reinforcing repetition and recall. For example, the book might just say: “Type var numbers” and I would say to them, “Write code that creates a variable called numbers.”

The early exercises are fairly simple but they are getting more and more challenging. Having a mentor (my husband) to guide us has kept us from giving up.

For example, when we needed to set up a JavaScript console, here is what happened:

screenshot of texts between two people about computer coding
The frustrations of coding

It turned out that it was there and his instructions were completely accurate, just missing one small but important step. You needed to click on a small blank window to the left. If you naturally would expect to have to do this, you are one with the computer! I am not. I need every little step spelled out.

Then, later, when we had to write our own code for one of the code challenge assignments (for which, as far as I can tell, there are no answers provided), we got completely stuck. We wrote some of it and just had no idea where to go with it to finish the challenge. When my husband got home from work, we showed it to him in frustration. He looked at it for a few minutes and then said, “Oh, you made a basic programming mistake of using = versus ==” He then went on to describe how we needed to restructure the program to add in another variable. When you see the answer, it makes complete sense but generating it yourself is excruciatingly hard.

screenshot of JavaScript computer code
The solution to one of our coding challenges. We definitely required help to get this done!

So, that is what we are doing and the book we are using! I need more time with the book before I know if I would recommend it to anyone else. We are definitely learning from it and it is well written and fairly amusing for a programming book, we just wish learning programming languages could be easier!

Are you or your kids learning to code? Do you have experience with any of the above programming resources? Please share in the comments.