Shared publicly  - 
 
My New Strategy for Teaching Kids How to Code

We're one month into the second year of Catalyst, an after-school tech/computer class that I run for kids aged 9-13, and this year I've decided to try something different. [Last year, I had the kids learn in a browser-based / console-like IDE that I created - kind of like CodeAcademy, but ultimately it was just too much work to maintain and too limiting]. My new plan is to teach the kids how to build their own interactive websites from scratch using HTML, CSS and Javascript, and to do it on their own Linux VPS (CentOS 6) using Vim. I know it probably sounds crazy, but if the preliminary reception and results are any indication, I think it's going to be a success.

At this point, the kids already have a pretty solid understanding of basic HTML and CSS (inline styles and id and class selectors) , they're able to write simple Javascript event handlers (onmousedown, etc), and I've already transitioned a few of them over to working on their own VPSs via SSH and Vim. [I started them out on Neocities just so that we could get out of the gate quickly]. We worked on Javascript last year, so they have some background in it, but it's going to be interesting to see how well they can use it for building web pages that actually do things. I'm cautiously optimistic, but this is a lot to ask kids this young, even if they are gifted and talented, so we'll see how it plays out. Regardless, I've settled on a few component strategies that I think are going to stack the odds in our favor.

1. Don't Patronize We're working with real tools. No more sandbox, baby crap. I understand the motivation and thought process behind learning environments like Scratch and the various programming games and I appreciate the quality of work that has gone into many of them, but at the end of the day they're just not real enough (or, at least not for this group). I want the kids to develop real skills that they can use to create real things in the real world. Plus, the kids love it. Being able to login to their own server on the command line and create interactive web pages that the whole world can see is frankly pretty badass and they know it.

2. Breadth-first Learning Teaching the kids HTML, CSS and Javascript all at the same time isn't as hard as you might think because the technologies work together in a pretty common sense way. You just start with a little HTML, add in a pinch a CSS and Javascript, then rinse and repeat. Sure, all of the different types of syntax can be a little confusing at first, but it doesn't take long for them to pick it up. You just have to go slowly, step-by-step, and give them plenty of practice.

3. Challenges, Points and Levels Unsurprisingly, I've found that gamification works. For some reason, when you present a formal challenge to kids and assign points to it, they respond. I've tried just suggesting things for the kids to try out or work on, but often times that just results in a lot of screwing around with little progress.

Just so you can get a sense for the kind of stuff we're doing, here are the challenges from last night (session #4):

https://docs.google.com/document/d/1dR6TjmPW4szVbquppOgnyG-f4H1AKOely-wrCNd2XWk/edit?usp=sharing

Now I'm even going a step further and setting up a formal level system for each skill category - HTML/CSS, Javascript, shell / command line,  Vim, etc, which is something the kids are really excited about. The way it's going to work is that once you've completed enough points for a particular skill like Javascript, you can take a test to "level up". I decided not to follow the whole badges model like in scouts because that just seems like too much work and maybe even a little hokey, or belts like in karate because then you have to have them sort of figured out in advance, but with levels it's simple and open-ended. I can just keep inventing new levels as we need them, kind of like my old favorite, Dungeons & Dragons!

Anyway, it's all one big experiment and a work in progress, but it's exciting to see the kids progress and frankly I'm pretty much obsessed with it at the moment. More updates to follow ... ;)

Edit: Also, I owe a big shout-out and thank you to +Justin Vincent, my good friend, TechZing co-host and general partner in crime, for allowing me to Shanghai him into doing this with me. We've done 38 sessions so far and if there's one thing we've learned it's that teaching kids this young to code is NOT easy. In fact, I would have to say that it's easily the hardest 5-hours of my week and the sessions are only 90-minutes long! ;)
125
42
Dino Reic's profile photoDzenan Ridjanovic's profile photoKB Sriram's profile photoMulyono Kertajaya's profile photo
44 comments
 
Love how much work and effort you put into this - and that it gives you time with Coby (sp?) that he will never forget. If one of my daughters ever shows engineer-like interest, I will replicate your experiments. ;-) Please let us know how it works out!
 
+Philipp Adelt Thanks so much! You're close with the name - it's Colby.

Yeah, I love it that it creates such a strong connection between us. My wife, now jokingly refers to us as "One Brain". ;) 
 
You seem like the kind of person whose students could maybe benefit from something I'm building, teen2geek.com. It's going to release in beta in January 2014, but you can register for updates.
 
+Jason Roberts Having a kid with interests so similar must be super-awesome. If he stays on that path, maybe he'll be a proper techzing guest by 2015. "Colby (10) talks about 3 years of engineering practice." :)
Anyway, please keep podcasting if you can. It makes for perfect listening while running after mind-boggling meeting-filled days at work. If it helps I will some day implement your spaced learning idea (memory hole, right?) to help Justin and you remember your show notes even better - although I like it when you get off-track, too. ;-)
 
This is awesome Jason!  Funny, I am doing a very similar thing with a group of 4th graders.  I am going to use a combination of techniques as well, but my focus is on having them build a simple video game.    We should compare notes sometime.   http://douglastarr.com/Teaching-Coding-to-4th-graders/
 
+Philipp Adelt That's so funny you say that!, Just the other night, Sandy suggested that I record a few minutes of one of our coding sessions together and have Justin splice it into the show. The thing is that while Colby has a lot of things going for him, so far eloquence isn't exactly one of them, so it may not work out so well. But I might give it a shot anyway. What the hell! ;)

Also, thanks so much for the positive feedback about the show! It always helps to motivate us.
 
It sounds valid what you're doing, but I worry about the medal/level -thing, and I think you should too. The children might start bullying those who have lower "level" than them.

The levelup -stuff  is something similar to patronizing. You see how people get addicted with World of Warcraft and so long? They grind in that game for years to improve their imaginary status. It can't be fun, but they still do it to elevate their self-esteem.

I don't say it's evil to share medals, but really keep an eye on its effects.
 
+Henri Tuhola +Jason Roberts What if Colby gets a master page that links to all of his projects.  He gets a point if Colby shows Jason and they agree that the project is finished, and then at some point, the quality and complexity of Colby's work will have gone up.  Then, maybe the test is a paired reflection on Colby's work, where the two of you go through and see if you can find a discrete change in methodology.

I'm sure there's a simpler, more eloquent way of talking Colby through this, but it'll only emerge once the page has been built.
 
+Jason Roberts You should totally do that, it would certainly be fun - at least for us listeners. :-) I guess it would result in some "dead air" (he is obviously not a broadcasting-pro having done 200+ shows) so maybe a screencast would be an even better medium? Doesn't exactly blend into the (audio-only) show but maybe Justin can do some editing for the audio-version? Personally, I would hope to get an idea what the issues are. I started looking inside stuff (clocks, electronics, stuffed animals) around his age but cannot remember what I found "complicated" back then. Maybe it improves how I approach my girls' interest.
 
This is very awesome! I figure you also do some "ethics" and "privacy" discussions and what is appropriate to leave online forever and ever? 
 
+Søren Bjerregaard Vrist Yep, I periodically remind them not to put any personally identifying information on the web (beyond maybe their name since several of them are using it for their url anyway), not to write anything about anyone that's mean or that (as a litmus test) would upset their parents or teacher if they saw it, and also not to use other people's content without permission. We're not really doing much content at this stage, so none of this is really an issue, but I got my eye on everything they're doing. Plus, Sandy (my wife) reminds me about it all the time. ;)
 
+Henri Tuhola That's a fair point. I think you can have healthy and unhealthy competition and it really comes down to how it's managed. Is awarding patches in Girl Scouts or belts in Judo bad? Probably not. I just think it's more about making sure the kids are being positive and respectful. They aren't always, and sometimes you have to remind them (sometimes twice if you're Colby), but net-net I think skill-based goals marked by levels or whatever can serve as a strong motivator.
 
Jason, this sounds wonderful. I wonder if you'd be interested in testing my new interactive approach to learning JavaScript on the kids. I could provide the books free in exchange for your feedback. Here's the story:
http://www.ASmarterWayToLearn.com
 
+Mark Myers Interesting... I have to knock out some work right now, but I'll get back to you after I've had a chance to go through it.
 
My son is 10 years old but I think it is not yet time to learn him how to code. I have to learn him English first because we are not native speakers. I agree HTML, CSS, JS path is better than Python or Ruby for starters. Shared doc is really great.
 
Speaking of achievements, not sure when/if you get them into scm, but Git Achievements by icefox on GitHub is pretty cute.
 
+Will Sinks That's sort of how the challenges work. When a kid thinks they've completed a challenge, Justin or I will come by to check out what they've done. Sometimes they need a hint, a few formatting tweaks, or a clarification on the directions (sometime I'm not so clear), but it's basically how you described.

But when you don't formalize the challenge, the kids just kind of meander, don't get much accomplished and things start to devolve into chaos. I know there's been a bunch in the press lately about how if you just poke a hole in a wall and stick a computer in it the kids will teach themselves differential equations or something and then of course teach it to a bunch of the other kids (believe me, I'd love it if it were that easy), but that's not been our experience at all. Not remotely. We've tried that a number of times in a number of different ways (because you know - it's easy) and when you're feeling burned out from work or didn't have time to write up a bunch of challenges, it's something you can rationalize trying, but we've NEVER seen that work. Occasionally, one of the kids will look something up on the web or figure something out on their own and tell the other kids about it, but that rarely gets them very far.
 
+Jeremiah Small Yep, we'll probably introduce them to Git eventually and it will be a skill with it's own set of levels. The only problem is that I'm probably a level 4 or 5 at best, myself! ;)
 
+Douglas Tarr Cool, I'll check it out.

We're heading up to SF in a couple of weeks (with the kids and everything), so maybe we could get together. Not sure what the schedule is, but I'll shoot you an email.
 
Cool. Really fond of what you're doing here. I think the computer-in-a-hole-in-the-wall thing on the cover of Wired is really interesting, but I suspect it won't work as well for something as specific and focused as programming. There are too many very specific skill sets that have to converge just so to make even modest results. Seems like it's a different story to try to teach fundamental math, etc., vs "real" programming. That's why people came up with things like Scratch.

Also, fwiw, here's git-achievements https://github.com/icefox/git-achievements
 
+Jason Roberts  - your sample challenge document was neat, thank you for sharing it.

Any chance you'd be able to share the other documents/challenges from your ongoing class as well? I think they'd be wonderful as a guide for other folks also trying to introduce kids to similar material.
 
+KB Sriram Cool, thanks! I'm going to try to get the content moved over to the Catalyst website later this week, at which point I'll post something about it on G+. The only problem is that the website is embarrassingly ugly at the moment and needs some love. ;)
 
+Jason Roberts if you're looking for free cloud VMs for your students, check out Nitrous.IO.  We currently support Ruby, Python, NodeJS and Go environments and are launching additional support soon. A number of classes / workshops use Nitrous.IO and have found it to be incredibly helpful.  

https://www.nitrous.io
 
Thank you giving kids that passion we have for code. I live in France, where computer science, and technology isn't as developed as it should be. It is a huge chance you are giving to them. Keep working hard, good luck +Jason Roberts . May your project be a success !
 
So, after finding that kids 9 - 13 find a straight forward programming environment too much, your plan is to fall back to two presentation formats and slide in bits of JavaScript without laying a foundation of variables, loops, and conditionals? Oh, and the client they pick may or may not render the project the same. It kills kids to have their project die when their Grandma brings it up in IE and it bombs. Watch this: https://vimeo.com/53062800
 
+Eugene Eichelberger Actually, we spent all of last year working on Javascript, so while they may be a little rusty at the moment since we're just now getting back into it after the summer break, they have all successfully written numerous Javascript programs that included variables, loops and conditionals. So, that shouldn't be a big deal.

In terms, of browser compatibility, we'll deal with that issue when it becomes a problem. It will simply serve as another step in the learning process. But these kids aren't nearly as fragile and easily discouraged as you suggest they might be. They're motivated and gifted and based on what they were able to accomplish last year, I'm pretty sure they can handle it and enjoy the process.
 
+Michael Bubb Hey, don't get me wrong! I think badges are kind of cool, just like I think belts in karate are cool. I have always been fascinated by structured advancement like that. The main reason I'm going with levels is so that I won't have to design a bunch of badges myself (which wouldn't be easy), or have to pay a designer to create them for me (which wouldn't be cheap). The other benefit is that I can just create new levels as we need them without having to think through an entire program's multi-year curriculum right now.

On more important issue is that I'm trying to brand the program in such a way that it won't seem uncool or "too kiddie" in two or three years from now when some of the kids are in middle school and become socially hypersensitive. For example, two interesting tech programs that I think may fall victim to that are Lab Rats and Hacker Scouts. If I told my friends that I was going to Lab Rats or Hacker Scouts when I was is middle school, or that I just got my "Javascript badge", I would have been roundly ridiculed and that may have soured my desire to participate. On the other hand, "Catalyst" and "levels", shouldn't have that problem and in that way it should be a little more future proof.
 
+Yanice Rabaini Thanks, I really appreciate that!

To be fair to France, the learning opportunities for computer science and tech are pretty limited in the US as well, and even in here in Pasadena, CA, where money and private schools abound, and which is just a few blocks from Caltech and just down the street from JPL (NASA's Jet Propulsion Laboratory). The very forward looking and experimental PEF (Pasadena Education Foundation) has actually created an app academy at one of the local public high schools, but that's really kind of an anomaly just like Catalyst. The reason I started Catalyst was because if I didn't then there wouldn't be anything available my son who's been itching to do this stuff since he was maybe as young as 6.
 
Great idea! Did the same with my eldest son class 5 years ago using .net. your way sounds much better.
If i may make a suggestion: "memory card game" makes for a great excercise which they can already do with the skills you described. It is fun, and can continue as an excercise as they progress in techniques, technology and abstraction ability.
In case i misnamed the game: its a grid of image pairs turned upside down. User needs to find pairs by clicking backside (which exposes the image).
Keep on the good work!
 
+Omri Spector Unfortunately, I missed the second part of your comment when replying earlier, but yeah, that's a great idea! My kids play that memory game all of the time and love it, especially my girls (ages 5 & 7). I think the ability to make games, even very simple ones like what you've described, is a very enticing carrot for the kids. It might still be 6-8 weeks off before I think the kids are really able to pull off something like this, but that's not that far off. We just need to get a few more skills in place first.

Anyway, thanks so much for the suggestion! It's a really good one. ;)
 
Would you be willing to share your curriculum, or is it building up to a book or MOOC?  Thanks for sharing the general ideas!
 
+Jason Roberts You are doing a great thing Jason, I had to wait for university to learn how to really code because our education isn't into this. In France, computer technologies are mastered by only a few people. Not only this country isn't technologically advanced, but computer science is still considered as a 'nerdy, bad thing'.
 
+Randall Mason [Big sigh] ;) A number of people have made similar suggestions and so I have been thinking about it, but I'm just so busy with so many different projects that I'm worried about the time it would take. That said, I do have examples and challenges (mini-coding projects) that I create for each class using Google Docs, so maybe if I just posted that to the website and got into the groove of creating  a short, 5-minute screencast for each session, it wouldn't be so bad. Hmmm... yeah, I'm seriously considering it. Your request may have pushed me over the bar. ;)
 
+Jason Roberts  I am currently learning computer science in a school that encourage us to get our degrees, and then just fly away from this country. You just won't have any professional changes in this field here...
 
Hey!  I co-founded Dev Bootcamp (http://devbootcamp.com), although I'm not there day-to-day any longer, and just wanted to say that I think you're 100% spot on.  Nothing you said seems even remotely crazy.

A few years ago I was mentoring a 13-year-old through Spark (http://sparkprogram.org/) and he wanted to learn how to program.  He really wanted to make an actual game, so I built a tiny DSL in Ruby to make it easier to build simple Atari-style games (https://github.com/jfarmer/arcade) and we built a Pong clone (https://github.com/jfarmer/ruby-pong).  Speaking of "rewards," you should've seen my mentee show off this game to his classmates at the end of the program.  He was getting mobbed.  A virtual gold star is one thing—the esteem of your peers is quite another. :)

People vastly underestimate the importance of the overall "learning environment."  I'm of the belief that the "learning environment" should always be as close to the "practicing environment" as possible.  What the student learns doesn't live solely in the teacher's head or in the curriculum—there are thousands and thousands of "ambient" lessons in the broader practicing environment.

It's sometimes necessary to control for some aspects of the practicing environment, but we have to be careful.  When one of those aspects is "simulated" it now becomes the teacher or curriculum designer's responsibility to crystalize all those ambient lessons.  That's really, really, really hard.

This is how I see codecademy's decision to have an in-browser editor.  The IDE is where a programmer spends most of their time on a daily basis.  It's true that it's important a student become familiar with it, but the real benefits live in all the ambient lessons learned from the practicing environment.

I mean "lesson" very broadly, here.  For example, students learn more about how a computer works internally by being in the practicing environment.  At the very least, they learn to be less afraid of the "insides" of a computer and begin developing a sense of mastery over the machine.

One of the first things I do when I show a kid the Terminal, for example, is introduce them to the "say" command, which they love. :)
 
+Jesse Farmer Wow, thanks so much for the awesome comment! I'd love to hear more of that story and maybe share some ideas / war stories if you'd be up for doing a Google Hangout sometime. Just let me know!
Add a comment...