The Hacker Way: How I taught my nephew to program
Tags: beginners
Published: 2020-08-06 16:08:07

Over the last year, my 13 year old nephew developed a love for hacking. From [anime chat](https://anime-theory.web.app/), to [snake](https://snake-a2aef.web.app/), a [minimal twitter](https://ilia-python-tweet.herokuapp.com/), a [blog](https://ilias-blog.web.app/), to an [anime music startup](https://twitter.com/stopachka/status/1289945194411036675), he’s built some cool stuff (1). What I’m most proud of though, is that he’s done this with self directed play, rather than with a rigid curriculum.

To help him do this, I acted as a yoda in the background. I experimented with a personal teaching philosophy, and I wanted to share the core tenets with you — I call it “The Hacker Way”:

## Principle A: Learning is Play

Kids are taught to associate learning with responsibility. Learning is stuff you don’t want to do, but have to because it’s either good for you or will make your parents happy — sort of like broccoli. With a belief like this, both the kid and the teacher are playing life on hard mode. The kid will lean towards the bare minimum. They won’t have any desire to self-direct and look deeper. The teacher has to constantly push the student along.

This method is disastrous for mastery. Mastery requires depth, and you’d need a kid with incredible self-disciple, and a teacher with an incredible amount of time, to reach the kind of depth mastery demands. Imagine the alternative: what if the kid was genuinely interested? All of a sudden, learning is play, and depth is exploration.

My primary goal throughout every one of our conversations was to help him cement this view: learning is play. So, how do we do that?


## Principle B: Meet them at their interests

Well one of the key differences between play and work is freedom: play happens when you’re doing what you want to be doing. This means, you need to make sure that the kid is working on what they’re *actually* interested in. Even though you know, that if they just hung on for some time, they’d learn to love it, it’s more harm than good: it’s unlikely they’ll persevere and regardless they’ll remember the pain.

The solution to the problem is to meet them where they’re at, and guide them from there. For example, say you want to get a kid to read books. Well, if they like cartoons now, what if you suggested anime? (japanese tv shows). If they love the anime they’ll soon discover manga (japanese comic books). Once they read a bunch of manga, all of a sudden reading is something they like to do. What if you threw in some adventure novels after that, like Dune? Slowly but surely they’re on the road to voracious reading.

The key idea to notice, is that we expect kids to grok ideas that are several steps away from their development. If you observe what they’re interested in right now, *then* form a plan from there, it’s going to be a lot more smooth. This requires patience, but that is the reality of things.

For my nephew, programming started out as drawing. I knew he liked to draw. He began designing apps with paper and pencil. So I got him sketch. and sat him down one day to show him the basics. He was into youtube, so he started designing banners. With that, he had a joyous entry point.

So, it was smooth sailing from there, they saw that work was play?

## Principle C: Let kids drop things

Not quite. The other difference between play and work, is that you can stop playing any time. It’s common amongst older folks to teach a kid something — especially if they pay for some item —  and then expect that the kid will devote themselves seriously to it.

This of course, is never the case. Kids don’t know what they want and they certainly don’t have large attention spans. The common adult reaction is to guilt trip the kid — you said you wanted this, and now it’s collecting dust. The ostensible purpose is to teach a kid the value of a dollar, but I don’t think this is what actually happens. Instead, they learn to avoid taking risks. They may force themselves to continue on with that activity too, which teaches them to dislike learning.

What if you encouraged the opposite? Any time you gave a gift, you said: hey, if at any point this becomes boring, *promise me to stop and do something else*. All of a sudden the pressure is gone. They can explore at their leisure, discover more of what they like, and it becomes natural to come back to things.

I did just this. With books, every time I suggested something, I told him to only read when he felt like it, and to stop and do something else as soon as he was bored. Lo and behold, he finished more books than I could have imagined, and started to form his own taste.

With programming, after the youtube design, he had a bit of a lull, where he focused on other things. Eventually though, curiosity and desire rose in him again: how could he make these designs *real*? How could he make *real* websites?

At this point, the desire was hot, and it was time to transform it forward. We can teach them something now. But how?

## Principle D: Treat kids like junior apprentices

We teach kids in two common ways. The first is to form a “classical” environment: you start from first principles, and guide them through the fundamentals: what is a string, what is an array, etc. This is often the most boring approach — if a kid doesn’t understand why they need to learn something, it’s much harder to learn it. 

The second is to form a “kid-size” environment: maybe a dummy programming language that works on kid-style problems. This may be better than the classical approach, but I think it still suffers from similar problems: the kid doesn’t really understand *why* they’re doing this. Most game-like tools are less fun than real games too, so if they see this strictly as games…there are much better options. (2)

An alternative method is to treat them with a bit more respect. What if you treated them like an intern? Imagine how a kid would feel if they worked on what the *pro adults did.* It’s intriguing, and it may even be something their friends think is cool.

My working approach is to do just that and treat them like junior apprentices. They get the same tools as adults: but like all apprentices, they need to start by learning subsets first. For programming, I started by showing him how to make a simple site with HTML and CSS. Just the basics — enough for him to make something. 

With HTML & CSS he built a personal news site, a blog, a tic tac toe board, and started doing his school projects as websites.  He saw how this really did *feel* like the real thing — it spiked his imagination and got him exploring further.

Note, that like most apprentices, he did the majority of the research and work: I simply gave the problems, and was available for video calls when he got stuck. Those video calls were import though: Like a real apprentice I made sure to treat his questions seriously, and gave him answers that satisfied his curiosity. This also let me figure out what kind of project he could find interesting next. The work itself was up to him.

Eventually, he wanted to make the news site do dynamic things: How can you hide and show content? How can you make buttons work? Well, time to learn a little bit of javascript. There’s a valley here — he may need to understand strings now — but he’s built enough that he can probably stomach a few videos on the fundamentals. With that, he’s off to the races — until he decides to work on something else for a bit of course 🙂 


## Fin

And that’s my Hacker’s Way. Instill in the idea that learning is play. Meet the kid where they’re at, let them explore, and treat them like a junior apprentice.

## Aside: a curriculum 

I didn’t go too deep into the curriculum in the essay, because it depends on the kid: where are they at, and what are they interested in now? Nevertheless, to get a taste, here’s a small subset of how his exploration developed: 


1. Started off with Sketch. Made youtube banners, small site designs, etc
2. Moved to HTML & CSS. Made a blog, a news site, a tic tac toe board, 
3. Showed him how to deploy sites to firebase, so he could show his friends
4. Could stomach some codecademy + youtube lessons, to learn some basics of javascript: strings, arrays, etc
5. Guided him through a simple tutorial: given an input, take the value and make it the background color. This was one of the few times I actually sat down with him. He could use the ideas there to build a bunch more stuff
6. He started building a bunch of javascript-enabled sites: cooler blogs, a todo app, an anime app, some school projects, etc
7. Eventually, the curiosity came: how can I save data?
8. Showed him how to use firebase. He went on a spree after that: built tic tac toe, snake, anime chat, etc
9. Eventually, he expressed an interest in python. I challenged him to make a text-based twitter bot
10. He wanted to turn it into an app, so he started playing with flask. I walked him through deploying it to Heroku
11. Now he’s interested in building animusic: an app to let you list your favorite songs in anime.


----------

*Note, at some point, I may build something to help kids learn like this. If you’re interested in that, follow me on twitter* — will announce if I do anything there : }


----------

*Thanks Joe Averbukh, Daniel Woelfel, Ilia Parunashvili, Nino Parunashvili, Alex Reichert for reviewing drafts of this essay*

(1) If you’re a hacker you may notice some glaring security vulnerabilities. Please leave them alone, or if you like, hack with jest :}. Think a lesson on security will get in the way for now

(2) Some environments, like Roblox, could be great: the motivation is real (wow I can make a real game), and what they learn is real (Lua). One of my other nephews is playing with this, let’s see how it goes : }