Sunday, July 05, 2015

Tech Rocket vs. Code Academy vs. Khan Academy vs. Tynker vs. Code Studio

We wanted an online programming course for our 9 year old this summer.  Because we had done the iD Tech summer camp, Tech Rocket seemed like an obvious choice.  The price was reasonable ($29 per month) and it had really a lot of variety including: Unity, Python, C++, Minecraft modding, and even Photoshop tutorials.  It seemed perfect.

My son ran into some trouble on the Python lectures so I helped him.  What I saw in the curriculum was very disappointing.  Some of problems I could overlook, like the use of non-standard English (like saying "aks you a question" instead of "ask you a question") and the non-standard spelling (like spelling "lasers" with a 'z' - "lazers").  One of the bigger problems is that the videos aren't well suited to anyone with a laptop screen - you have to zoom the video to full screen and its still hard to see the text.  Perhaps the biggest flaw are the exercises themselves.  The students are meant to type the commands exactly - including the typos - in the system.  If they don't type it correctly they are shown a cryptic error message.  When they do type it right, they don't even get to run their program, it just moves to the next exercise.  The real fun in programming comes from being able to explore your own solutions, and in seeing how your 'mistakes' can subtly effect the outcome of the program.  Since it never allows you to run the program, you never get any of benefit of this experimental play.  Finally the courses don't let you repeat any exercises.  Once the system evaluates it as correct response it moves on with no way to redo it.  Until they fix these issues I can't recommend iD Tech's "Tech Rocket" program to anyone.  Thankfully there are other choices available.

Since my son had started with Python at Tech Rocket, I looked at other Python offerings.  The first I found was Code Academy.  I didn't do a full evaluation, but from the evaluation I did do, I could already tell it didn't suffer from the worst offense of Tech Rocket.  You can actually run your code (imagine that!).  And if your code doesn't match their expected input exactly, it seems to still work.  Code Academy doesn't have kid friendly themes (not that that is bad), and looks like it might be better suited for high school or higher.  Since I was looking for something for my nine year old son, I kept looking.  If I were trying to learn Python as an adult, I might try Code Academy.  Bonus: It appears to be free.

Having my nine year old learn Python wasn't the goal, the goal was for him to learn programming.  What about Khan Academy (KA)?  I tried it before and was very impressed.  They had a good and fun teaching style mixed with a great interactive environment.  The videos were easy to follow and easy to see, and are given by a well spoken enthusiastic teacher who's examples are silly enough to engross a nine year old.  Whenever you stop the video you can edit the code she has written and explore what effects that has on the program's outcome.  It resets the code if you start the video again reducing the risk of experimentation.  Although KA's curriculum requires typing, there are a number of convenient sliders you can use to change the code without typing.  The language KA uses is Javascript which is great too, since it's currently used all over the web and many jobs require it.  The amazing thing is, KA is committed to always being free.  I originally tried KA in 2012 with all three of my kids.  My only gripe about KA in 2012 was that there wasn't that much programming content.  They've added much more recently so this is no longer a concern for me.  If your kid is comfortable with typing this is a great choice.  If typing is still an issue, you may want to save KA for later. One more thing:  How independent is your child?  I found that KA was not as structured as my then 7 year old needed and he never completed the series, at 9 years old, he won't have a problem.

Tynker was another choice that I looked at.  Tynker costs money, It's actually quite a bit more expensive than Tech Rocket.  Instead of $29 a month it's $50 for each course (it looks like a motivated student could get through a course in as little as 3 days).   I'm more than happy to pay for good things, so this isn't a show-stopper for me, but you should know what you are getting into.  Tynker uses a drag-and-drop programming language that doesn't require any typing (very similar to MIT's Scratch).  Their lessons are geared towards kids (bonus), and allows kids to eventually transition to Javascript (great!).  They can target mobile devices with their code, and even do the lessons on an iPad.  This long list of features almost had me convinced this was the best option, but the execution wasn't as perfect.  It's not a big deal, but the intro "video" is almost completely silent.  Like I said, not a show-stopper (unless your child can't read), but it had less polish than KA and Code Studio (we'll discuss that one below) and both of those options are free.  The first lesson also didn't include enough instruction for many kids to finish it successfully (some options were available that weren't explained).   Tynker did allow kids to see the results of their mistakes (excellent) but sometimes would jump over important points.  In short, the curriculum was far better than Tech Rocket, but could really use more polish.

Finally I'd like to discuss Code Studio.  Their curriculum is excellent and free!  Not only is it geared towards kids, it includes art from big names in the industry like Disney's Frozen, Angry Birds, and Plants vs. Zombies (great for 9 year olds).  It uses a drag-and-drop language like Tynker and has all of it's advantages for students who struggle with typing.  It's also great for beginning programmers who can type, because they don't need to worry about syntax errors and can just focus on the code.  I was very pleased to see their video content is professional quality.  No sound quality issues, no issues whatsoever.  I was even happier to see that like Tynker, the lessons are structured so that there is no fixed way to complete an exercise, any solution that reaches the stated goal is acceptable (fabulous!). In a nutshell, Code Studio really knows how to make a quality well polished product that will appeal to kids.  They also know how to teach programming.

For my money, I would pick either Code Studio and/or Khan Academy (ok, I know, they are actually free - put I'd still pick them if they weren't).   In fact we are going to do both with my nine year old.  Once he finishes Code Studio (which he loves), we'll start back on Khan Academy.


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.

Programming - A Great Career Choice

My favorite hobby is programming computers - because it's really fun! I have been very fortunate to get paid to do my hobby for the past 20 years. During that time I've worked for about a dozen different companies, sometimes as a contractor, sometimes as a full time employee, and for about 7 years I ran my own company. Each change was by my choice, and on my terms. Although I'd like to think of my skills as amazing, the truth is you don't have to be amazing to get work in this field. The world, as a whole, needs more programmers, many more programmers! You may be worried about the coming robocalypse and what that will do to your job prospects (as you should), but this is one of the few jobs that should fair reasonably well. Jobs in this field are extremely flexible about where you live, and what hours you keep. And it's really easy to get started - all you need is access to a computer and the internet (or a good book). To sum up, programming is fun, and you can make a good living from it. If you aren't sure what you want to be when you grow up (or are interested in changing that choice), I'd give computer programming a serious look.

BTW: You'll often hear a lot of different names for computer programmer, here's a short list: Computer Programmer, Coder, Hacker, Software Engineer, Computer Scientist