
Ask HN: How to best teach a group of children how to code? - jiblyyyy
Hi HN!<p>I run an education focussed r&amp;d shop (www.jibly.com) and regularly work on mobile app projects for large firms.<p>This year, I wanted to start teaching a group of underprivileged children (orphans, refugees, etc) anywhere in the world, how to code for every commercial app project I do for companies.<p>So for every app project I get, a group of kids gets the tools and resources to learn how to code.<p>I&#x27;m thinking of donating laptops with pre-installed child friendly coding environments. Including books, manuals., etc..<p>What are some great ways to teach groups of children how to code, without being present every day?
======
mattferderer
I've done this for several years. Here's what I've learned.

TLDR: Focus on getting them to have fun & enjoy learning about 'code'. Don't
care so much on how well they learn it.

Every kid is unique & will respond to different things.

Social & mentors are awesome. It's usually more fun to build with others if
possible. Also they will want to easily share & show off their creations with
others.

Show them how to "hack" Google with the browser's dev inspector tools. Wins
them over every time.

Give them simple partially completed programs that they can modify. I've had a
lot of success with a simple trivia game that lets them start by modifying the
questions/answers & the replies it gives. A great first lesson in how to use
strings & gets them looking at the code. They can then share what they created
with others (social aspect) & have them play their game.

Do NOT lecture to them or try to do long demos. They often listen to teachers
lecture all day long. They want to have fun & explore. They also don't care
about types or any other computer science terms until they've created a lot of
things & are trying to figure out why they don't work.

I've had decent results with Scratch. For pure beginners though, still start
them off with a semi-completed program.

~~~
ideonexus
+1 for the DOM Inspector. I have found that kids LOVE pulling back the curtain
on a website to see the wizard and play with the code. A fun activity is to
have them go to a news site and have them edit the headlines and replace the
images to silly things and take screenshots to share with their parents. What
really impresses me with this exercise is how quickly some kids will figure
out some intermediate hacks when they learn how easy it is to google the
things they want to do.

Another suggestion that works for the same reason is to give kids code to play
with. I've wasted 20 minutes of class time having kids write a three line
"Hello World!" javascript program from scratch. All this did was irritate and
bore the kids out of their minds as they struggled with syntax and hunt-and-
peck typing.

Instead, when I give kids a great big block of javascript code that does
something fun and animated, those kids will go wild with it. This is because
changes to different variables can have big effects. They quickly learn to
read the code and identify what different parts do. They break the code, and
you show them how that's a good thing and how easy it is to revert it back so
that it's working again. Code should be a playground. Give the kids a rich
playground to run around in.

~~~
mattferderer
I think you said that better than me. I'm stealing this line as it's to good
not to - "Code should be a playground. Give the kids a rich playground to run
around in." Let me know if you want me to credit it to you ever.

~~~
koolba
Well there's a reason we refer to virtual environments as sandboxes!

------
muaddirac
I used to help teach kids (12-16ish) how to code.

One thing that we always did towards the beginning of a class was an exercise
where we tell them to write down the steps to make a peanut butter and jelly
sandwich. Then we'd literally get bread, peanut butter, and jelly, and follow
their instructions to the letter. No one ever adequately describes the
process: "put peanut butter on bread" \- With what? the jar is closed, I
can't! etc.

You might argue this introduces too imperative a thought process - but it gets
the "computers do exactly what you tell them to" idea across very well.

~~~
squeaky-clean
I had a music teacher do exactly this to a class when I was 10 or so, and it's
one of the most memorable school experiences for me as a child. The purpose
was something like explaining yourself well, rather than programming, but the
idea is the same.

We needed to describe how to draw some sheet music on the chalkboard, but you
couldn't gesture (we could only communicate through an imaginary phone line),
and he would take whatever you said as literally as possible and opposite of
your original intention as he could.

"Ok, draw 5 lines" _(Draws 5 squiggles)_ "No! 5 straight lines" _(draws 5
lines in various locations and directions)_ "Nooo! 5 straight lines, above
each other, horizontal!" _(Draws the 5 lines of a musical staff, but 2 inches
long and 3 feet vertical spacing between each line)_. "Nooooo! 5 straight
lines, above each other, horizontal, they should be very long and close
together" _(Takes out a piece of paper from his desk, draws the staff on it)_
"NOOOO! On the chalkboard!" etc

------
dopeboy
I've been volunteering for three years in the classroom on behalf of a non-
profit [0]. We teach HTML, CSS, and jQuery. Here are some high level lessons
I've learned:

* Don't teach unnecessary details. For example, students get hung up on the <title> tag because titles are usually at the top of the page. Just skip or defer teaching it - it's not important to their end goal of understanding code.

* Reinforce that the computer is dumb. I tell my kids outright that the computer is stupid. What this gets across to kids is that when they talk to this box, they need to be very precise with their language. Syntax errors---a constant demoralizer---then become not a shortcoming of the student but of the machine.

* When you craft / select exercises for practice, make sure they always fit two criteria: instant gratification and fun. By the former, I mean the students are producing code and instantly seeing a visual reward for it. With the latter---adults always forget that kids are kids. They couldn't care less about "Hello world". But an "About me" page is fun because they get to express themselves. When you talk arrays, don't push and pop fruits. Push and pop Justin Bieber and Ariana Grande.

I might expand on this in a blog post. Happy to talk more offline.

[0] - [https://scripted.org/](https://scripted.org/)

PS - if you're in the bay area OR NYC and want to teach underserved high
schoolers how to code, reach out!

------
jpolitz
Consider Bootstrap:

[http://www.bootstrapworld.org/](http://www.bootstrapworld.org/)

Bootstrap 1 is computing tied to algebra concepts, targeted at the middle
school age group (US grade 6-8). Students learn things like order of
operations and what a function is while building up their own game. The
curriculum has lots of activities that show students how to use code to
generate images early on, which gives something immediately interesting and
tangible to work with.

It runs in a stock browser (lots of students do Bootstrap on inexpensive
Chromebook models), has a great support mailing list, and is used in schools
across the US already. It also explicitly helps with math skills, which can be
doubly useful in preparing for other STEM topics in the future.

------
ivan_ah
It depends on the kids' age. Older kids could probably handle Python though
setting up + computer availability might an obstacle. If they have access to
shared computers maybe javascript could be good since they can test things out
in the browser.

For younger kids maybe a block-programming interface would be good:
[https://developers.google.com/blockly/](https://developers.google.com/blockly/)
|| [https://snap.berkeley.edu/](https://snap.berkeley.edu/) ||
[https://scratch.mit.edu/](https://scratch.mit.edu/)

For a less high-tech approach, you should look at
[http://csunplugged.org/](http://csunplugged.org/) , e.g.,
[http://csunplugged.org/binary-numbers/](http://csunplugged.org/binary-
numbers/)

In all cases I think the instruction/teaching is going to be key—through the
physical presence and support. It will be comparatively more difficult to
bootstrap and get them to learn by themselves. Peer tutoring is very promising
though: See:
[https://www.youtube.com/watch?v=dk60sYrU2RU](https://www.youtube.com/watch?v=dk60sYrU2RU)
and
[https://www.youtube.com/watch?v=y3jYVe1RGaU](https://www.youtube.com/watch?v=y3jYVe1RGaU)

It would be great if you write a blog post about this and what worked so
people can follow in your footsteps. Good luck!

~~~
adamaflynn
+1 for block-programming, even for older kids/teenagers. I taught a high
school CS class using Snap.

At first, I thought it was silly to teach "drag & drop" programming and would
have preferred a high-level scripting language. But, after teaching 2
semesters of Snap and observing classes in Java, I'm a huge fan.

2 main reasons:

1\. Time-to-cool-result is really low. The first project was a Mario-like
game. Less than 10 hours from "never programmed" to "built Mario game" is a
really powerful first experience. (Demo:
[http://snap.berkeley.edu/snapsource/snap.html#present:Userna...](http://snap.berkeley.edu/snapsource/snap.html#present:Username=adamaflynn&ProjectName=Mario))

2\. Syntax and compiler errors are really confusing. When I walked around the
Java class, most kids were asking questions about how to fix their syntax
errors. In my class, most of the questions were conceptual.

It's easier to go back and learn a "real" language after you understand the
high-level concepts and have seen how cool programming is.

If you want the resources I used, feel free to ping me (adamaflynn@gmail.com).

------
gkop
This curriculum is over 10 years old and I think doesn't go beyond HTML/CSS
(I.e. stopped short of JavaScript), but I found at least a couple perennial
helpful concepts for teaching young kids (the original developers of the
curriculum were really smart and dedicated):
[https://www.scribd.com/mobile/document/58467154/Wired-
Woods](https://www.scribd.com/mobile/document/58467154/Wired-Woods)

I taught this curriculum to 120 or so kids aged 6-13 from underprivileged
backgrounds in the Boston area. The experience changed my life - kids are so
amazingly smart and learn so fast - and they ALL got really into making
websites! I have no doubt that for at least a couple of my pupils the early
exposure led to success in tech careers, helping to break them out of
generational poverty.

The Web is an incredible platform for learning, self-expression, creativity,
and empowerment. Unfortunately in the age of iPads etc. I think it's more
difficult now to get kids into web development than it was 10 years ago.

My contact info is in my profile if you read the curriculum and want to ask
any questions.

------
ChrisBland
Logo -- it helped me learn when I was younger. The best part is as it is
visual, kids can see how what they type changes what happens on the screen. It
gives them instant feedback in to learning how to give machines instructions.
This software can be loaded on any laptop or other computer. It doesn't
require any crazy hardware either.
[https://en.wikipedia.org/wiki/Logo_(programming_language)](https://en.wikipedia.org/wiki/Logo_\(programming_language\))

~~~
vram22
+1. Recommended Logo myself in this thread. And since it supports recursion,
you can even draw Sierpinski triangles and such-like curves easily, and so
introduce them to recursion.

------
bearble
I taught a group of 9-12 year old basic logic and algorithms using Scratch to
animate a scene.

One kid wrote a basic brick breaker and another pong. They all seemed to enjoy
the process since it's pretty straight forward drag/drop logic.

[https://scratch.mit.edu/](https://scratch.mit.edu/)

~~~
obombration
Agreed. I taught a CS club to 4th and 5th graders during college and they all
loved Scratch. It's very easy to get going with audio, images, animation,
etc., which got them really interested quickly. Even for older (middle school
aged) kids I'd probably start with Scratch because it teaches most of the CS
concepts you'd use in any other language, but doesn't require the tedious
environment setup (editor, compiler/interpreter, etc.) that "real" languages
need. Spark their interest using the concepts, then sprinkle in the boring
parts.

------
faster
I taught a class of 10-year-olds an hour a day for two weeks a while back. We
used scratch for programming, but the first day, we made paper airplanes.
First, two kids sat together while one made a paper airplane and the other
wrote down the steps that the first one took to make the plane. Then they
traded instructions and tried to follow someone else's steps. This got them
thinking literally, and they had very little trouble with missing details
after that.

After getting a jumpstart, they started building games using Scratch and
sending them to each other to play (test). That's the hands-off part. The prep
was simple instruction in reaching a goal with code, including the importance
of accepting feedback from others. The school had already taught them to be
respectful, so I didn't have to deal with a lot of egos. The boys all knew
that some of the girls would be better programmers, and didn't fight it.

------
callmeed
I've been teaching after school programs and community classes through our
university for a couple years on and off.

I've been using the CS-First curriculum from Google. It uses Scratch as the
programming environment (a visual environment from MIT).

Overall, I like the CS-First curriculum a lot–though some of the themes are
better than others (some lean towards animation/storytelling and are light on
actual programming topics). In my workshops I almost always inject some of my
own lectures and exercises with the kids.

Biggest issue I've run into is with Scratch being Flash-based. I'm starting to
see browser issues more often (especially in a tightly controlled university
lab). This could be a big issue for you if you're teaching kids remotely.

One new thing I'm looking forward to trying with a class soon is Hopscotch.
It's a scratch-like visual programming environment for iOS. I've tested it on
my own kids and they love it. Plus they put out a ton of useful videos and
tutorials.

Good luck

[https://www.cs-first.com/en/home](https://www.cs-first.com/en/home)

[https://scratch.mit.edu/](https://scratch.mit.edu/)

[https://www.gethopscotch.com/](https://www.gethopscotch.com/)

------
troupe
CS Unplugged ([http://csunplugged.org/](http://csunplugged.org/)) has some
good resources for teaching CS concepts without needing a computer. I'm not
sure how easy they would be to do at a distance, but you might find some
aspects that would work well.

Bootstrap World
([http://www.bootstrapworld.org/](http://www.bootstrapworld.org/)) is a
curriculum for teaching CS and Algebra while making a simple graphical video
game using Racket (similar to Scheme). You can do the exercises using Dr.
Racket IDE or by using a web-based IDE
([http://www.wescheme.org/](http://www.wescheme.org/)).

You also might take a look at Picturing Programs
([http://picturingprograms.com/](http://picturingprograms.com/)) and How to
Design Programs ([http://www.htdp.org/](http://www.htdp.org/)). Both of those
may be more advanced than what you would want to start with, but they are both
focused on teaching computer science concepts more than the particular
language and both are aimed at beginners without any background with code.

------
umutisik
At the UC Irvine Math Circle, we teach students aged 11-16 functional
programming with Haskell by having them make 2D images with functions.

It was easy for the students to get started because it was connected to math
that they already knew. Just different notation.

We use a web-based interface based on glot.io that was popular on HN a while
back. The code is run server-side in docker containers.

Source code and screenshots:
[https://github.com/umutisik/mathvas](https://github.com/umutisik/mathvas)

Web site: [https://www.mathvas.com](https://www.mathvas.com) login details if
you don't want to sign up: email: misik@uci.edu password: guestguest

------
ashark
Fool-proof steps to produce a software developer:

1) Force them to learn how to navigate filesystems, the basics of file-based
config, how to find and download files, and basic networking to make their
video games work.

2) Give them little money, but a decent Internet connection, and make 3rd
party private discussion forum solutions expensive, so they have to learn
Linux and DNS and how to configure a webserver and a database and one or more
scripting languages to stand up a discussion forum for their friends.

3) Make doing similar things for others pay _way_ better than anything else
they can do, even if they don't really like doing it 40 hours a week. Make
this be true year after year.

I can vouch that this will work.

~~~
hutzlibu
Have you made one single developer with it?

Because those steps would totaly turn me off.

~~~
ashark
It probably helps if you're in k-12 school at the time (loads of free time),
Netflix hasn't been invented yet, it's still kind of possible to run out of
crap to look at on the Web, and even though it's the mid-late nineties the
only video game console in your house is an NES.

I doubt I'm even close to the only developer who ended up here because it was
easy to end up in a computer-related learning loop just trying to get video
games (or Encarta, or that Win98 upgrade, or your fancy new dial-up
connection, or whatever) to work, there were fewer easy distractions at the
time, and that skillset originally picked up while trying to play video games
provided surprisingly easy entry into a career path that was both (much)
easier and (way) better-paying than the things we might actually _want_ to do
with our lives. Hard to get off that track when you're in high school and
already _falling_ into (relatively, compared to your peers) high-paying jobs.

~~~
majewsky
You missed the point. The question is not "How can I teach ashark to code?",
but "How can I teach $average_kid to code?"

~~~
ashark
I think the broader message of the typical-90s-developer-kid journey is "make
sure it's a requirement to do something they think is fun—and ideally not an
artificial one". I don't know _how_ you do that in the age of just-works
iphones and free or dirt-cheap services to address practically every
need—which is also why I don't have side projects.

Point is, don't make the goal (for the kid) "learn to program". Make the goal
"do thing that's fun (but you'll have to learn to do computer-
stuff/programming to get there)" The ones for whom "learn to program so... you
can program" is an effective motivator probably don't need much help other
than a finger pointing the right direction.

------
iansowinski
Check out @ntoll work, I was on one great speech by him at pyconf about
teaching kids with micro:bit and Minecraft.

I have no experience in teaching kids how to code, but I have quite big
experience in working with kids in scouting, and what I can advise is to do
with your students things that really work, and are not considered "boring" \-
like controlling LED lights, "hacking" websites with dev tools, making
computers in Minecraft, etc. Your mission should be to open their minds and
spark a passion to coding, then they'll learn a lot on their own and will have
own ideas for projects.

~~~
scaryclam
+1 for @ntoll and his work. He's an approachable guy and really enthusiastic
about helping kids learn tech.

------
krsmith35
This thread is amazing. I started a company with the goal of helping kids
learn to code, so I peed a little when I saw that the HN crowd was giving me
ideas.

Here are the main things I have figured out (3.5 years, ~6,000 kids in 8
states): \- It has to be fun. Lots of people have said this already, but I
have tried and failed starting with academic rigor. Hello world was a
psychological payoff in the past, but for this generation it's more like a
multiplayer video game (easy on scratch) or fake hacking a news website
(people have said this above) \- It has to be social. Anyone can get online
and teach themselves, but most people won't. We hold weekly meetings at public
libraries where the librarians facilitate (they don't know how to code) and
the kids teach themselves. Someone mentioned Sugata Mitra +1. \- It has to be
inspiring. I try to help the kids feel part of a movement, like for example
getting the governor to talk at a hackathon, and hand out expensive prizes.
But not all kids care about that stuff, and the goal is to figure out what
they care about and show them how coding can help. Art, business, sports, etc.

To the original post - I know a lot of inner city, rural and tribal libraries
that would LOVE to have a shot at those donated laptops.

------
mjhoy
I've done a little of this with 9-12 year olds. The most important thing is
quick feedback and keeping it simple. They absolutely loved making websites. I
taught them enough HTML to get started and set them up with a editor and
preview window. I wrote a little web app for this, so that they were editing a
"live" site they could show their parents when they went home (or keep working
on it, on another computer). It was super simple and just had the functions
they needed. Also, as someone else suggested, using the inspector tool to mess
around with existing websites was really fun for them.

Another project was using arduinos -- and I even got them writing C, which
more or less worked. You didn't need too much code to blink a light and they
loved that. The mix of coding and the hands-on wiring up their breadboards
kept it engaging. We did a little project where the light blinked with a
frequency related to a temperature sensor, so when you put your finger on it,
it would blink faster. One kid had the grand idea of having it blink _faster_
when cooler and _slower_ when warmer, and watching him figure out the math was
great.

------
antirez
I had good results with two children using something I wrote for this purpose:
[http://github.com/antirez/load81](http://github.com/antirez/load81). Simple
instructions doing something graphical was BASIC selling point, and how many
children in the 80s learned, and IMHO still works.

------
kevindeasis
I'm teaching three of my younger siblings to code.

It was one of the more meaningful things that I've ever done and was nothing
short of hard.

Here are the things I've learned teaching my siblings full stack development
in a few months.

You have to be patient, programming is complex and takes time. Sometimes you
have to re-introduce the basics multiple times and hold their hand along the
way as they try to connect the dots.

Offer them free food, support their interest, help them with their school
work, reduce their stress levels, and take a keen interest in their hobbies

Build something right away, and introduce theory immediately after the project
is finished. When introducing new concept explain it in an ELI5 fashion.

Give them multiple resources. Sometimes one source of knowledge is not good
enough and giving them other resources not only helps with repetition, but it
gives them other places that will explain the same topic in a different
manner.

~~~
e12e
"ELI5 fashion?

~~~
ahakki
Explain it Like I'm 5 (years old)

------
sailfast
A nephew of mine (~9) got a Kano for Christmas and the setup and all the
gamified coding exercises were really fun. He really enjoyed them.

Perhaps something to explore as a platform as well as it's not too expensive
and comes with what you need to hack around.

It comes with Minecraft Py installed and has a few tasks to customize a level,
character, etc. Python dev tools comes installed as well as Scratch and other
exercises.

The idea of gamifying tasks across the platform is interesting especially if
you think of a class of folks and a leaderboard or something - maybe not
something to stress but some folks like competition more than others to drive
them to learn.

[https://kano.me/store/us/products/kano-
complete](https://kano.me/store/us/products/kano-complete)

~~~
bsaunder
I highly recommend Kanos. I backed them on kickstarter and got Kanos for each
of my kids. They all got them assembled and running and started working
through the programming exercises with them. For some it inspired other follow
on programming explorations.

Lately I've reset the learning process focusing more on basics (networking,
files, processes, utilities, etc) rather than programming.

------
rb808
Take a look at code.org, its a resource for teaching coding. I haven't used
yet but was interested in
[https://code.org/minecraft](https://code.org/minecraft) for teaching kids.

------
nrjames
It depends a little bit on the age of the children. One important thing to
consider is that the sooner they can see visuals that are produced by their
code, the more they will be able to understand the cause/effect of
programming. I've taught groups of middle schoolers to code with Processing
and they've far exceeded my expectations. Daniel Shiffman's resources
([http://natureofcode.com/](http://natureofcode.com/) and his YouTube series)
are great.

You can also get things up and running really quickly with LOVE2d and Lua.
love2d.org

------
justjonathan
I have been extremely impressed with the free ciriculum and environment at
[https://code.org/](https://code.org/) . It has lots of child friendly
skinning and bite-sized "puzzles" that teach you step by step but build real
understanding of more complicated ideas. I have "assisted" mainly watched and
answered occasional questions with a bight 7 year old who has completed Course
3, which uses a scratch like visual block programming enviroment.

There is a more advanced class that teaches javascript.

------
yumraj
Going by my personal experience with my kid, I think the best tool at the
moment is a Raspberry Pi + Minecraft Pi + Python. Python and Minecraft Pi
edition are both included by default in Raspbian and there are several free
resources, such as [https://www.raspberrypi.org/learning/getting-started-with-
mi...](https://www.raspberrypi.org/learning/getting-started-with-minecraft-
pi/)

It is an extremely rick environment..

------
owebmaster
Games! Find games that the players can extend it with programming. It is the
best way to make kids interested, imo. At least was what attracted me (games &
animes).

~~~
bluedevil2k
Box Island is a good intro to programming that includes loops and
conditionals. It's a video game, with some beautiful graphics.

------
v4n4d1s
My first programming experience was a course for about ~10 kids between 8 and
12, where they showed us to program Lego Mindstorm roboters with NQC.
[http://bricxcc.sourceforge.net/nqc/](http://bricxcc.sourceforge.net/nqc/)

Some other thing could be Scratch/Kara, but I'm not sure if it exists in
english and personally I don't like it.

------
JdeH
Do you want them to be able to start programming like "childsplay", but maybe
use it professionally later on?

In that case Python is a good choice. It's the #1 language in education world
wide. I used it to teach programming to my son. It is free, low threshold, and
I've earned a living with it for many years.

Some experimentation can be done on-line without installing anything.

[https://trinket.io/](https://trinket.io/)

[http://www.transcrypt.org/live/turtle_site/turtle_site.html](http://www.transcrypt.org/live/turtle_site/turtle_site.html)

But of course in remote places there may be no fast internet connection.

When I teach programming to a group, installation of software always costs
lots of time. So it's important to preinstall what the children need, in a
more or less protected way, e.g. administrator privilege. Otherwise they'll
probably cripple their system accidentally in no time.

------
teach
I've been teaching children to code for 20 years.

The book I wrote is designed for self-study and seems to work pretty well for
some kids.

More details on my blog here: [http://grahammitchell.com/writings/how-i-teach-
beginners.htm...](http://grahammitchell.com/writings/how-i-teach-
beginners.html)

~~~
jgamman
I thought zed Shaw did the __* the hard way titles?

~~~
teach
He wrote the first one (Learn Python the Hard Way) and a few others. He
actually emailed me and asked me to write Learn Java the Hard Way.

In his words (paraphrasing, since this was from a phone call): "I was a
professional Java programmer for eight years and now I can't stand Java.
There's no way I could deal with it long enough to write a Java textbook."

------
splatcollision
Great question! I'm a fan of the Mozilla Thimble project - "An online code
editor for learners & educators" \-
[https://thimble.mozilla.org](https://thimble.mozilla.org)

Easy to use code editor with live preview, fun starter projects to remix, easy
to follow tutorials.

~~~
patja
I've used this in the classroom in the past, but I absolutely hate that
Mozilla's terms of service excludes students under the age of 13. If you are
going to make a product for educational purposes, you need to take on the
extra work to comply with the US COPPA regulations. Scratch does it, why can't
Mozilla?

------
vram22
Give them LOGO (the language), teach them a bit of it, give access to the
manuals / online help, and set them loose on it.

Stand back and see the fun :)

[https://en.wikipedia.org/wiki/Logo_(programming_language)](https://en.wikipedia.org/wiki/Logo_\(programming_language\))

------
Sholmesy
The most important thing is getting them to have fun, and have a positive
association with coding. I use to help out with a CoderDojo, teaching kids of
all ages, and the best thing to do was get them to have fun. Kids that
actually enjoy the content they are learning, will learn much better.

------
Angostura
If you're interested in using Scratc, check out the materials in the UK's
Codeclub. I've run a lttle club in a primary school based on Code club and it
went very well

[https://www.codeclub.org.uk](https://www.codeclub.org.uk)

------
katesull
Codesters is a great way for beginners to start programming in Python. The
drag-to-text toolkit let's kids get started right away and the text exposed in
the editor allows and encourages them to start modifying and customizing the
code. The platform is free to build and explore (www.codesters.com/project) or
there are also structured coding lessons like the one here:
[https://www.codesters.com/curriculum/intro-to-
codesters/Buil...](https://www.codesters.com/curriculum/intro-to-
codesters/Building+your+First+Program/1/)

------
codingdave
Do not teach them how to write code. Teach them computational thought. There
is a huge difference in approach, and in results.

I've been working indirectly with school districts doing this for a couple
years now, and have seen great results from curriculum very similar to this --
[https://code.org/educate/curriculum/elementary-
school#overvi...](https://code.org/educate/curriculum/elementary-
school#overview)

There are other courses for different ages, too. Not sure what age groups you
are looking at...

Once they know computational thought, THEN teach them how to code for an app.

------
laurieg
I have done a little teaching with younger age ranges, coding and math
included.

I had a lot of success with 'unplugged' computer science activities.
Basically, any activity without computers. Let's learn what an algorithm is.
Let's play with binary and make a 'secret code'. These activities are engaging
and teach something worthwhile. It's very easy to get bogged down with tools,
syntax and minutia when actually programming. For younger age ranges
definitely try some computerless lessons.

[http://csunplugged.org/](http://csunplugged.org/)

------
hywel
Hey, you should try this book which Scholastic published
www.goodreads.com/book/show/28232614-coding-unlocked#other_reviews

It's available as an ebook as well as in paper. Short pitch: don't just learn
to code by typing out existing code, learn how to think algorithmically and
write your own code instead. Learn Scratch and Python side by side, seeing the
same Computer Science concept in one and then the other. As well as the
reviews, I've heard great anecdotal feedback.

Full disclosure: I wrote it. If I could get you a discount, I would, but I
don't have that kind of sway with the publisher.

------
brentjanderson
Getting from zero to fun as fast as possible is key. Open up the DOM tools,
show them a couple things, and step back. Be attentive to questions, encourage
students to share their discoveries. Show them the console and how to show a
prompt, alert, console.log, and set variables. Make a simple script and email
it to them to paste into their console to do something fun, like add a CSS
spin animation to images. The ones most interested will explore why it works
and their curiosity will be the engine of their own learning.

------
samayshamdasani
Kids want to have fun while they learn. As a fifteen year old, I'm sure this
can be by building interesting projects that has to do with characters they
identify it - maybe like a website with pictures of them and describing who
they are. (HTML, CSS)

After some of that, you can move on to JS where they'll actually understand
programming logic. I built a site to teach people to code the web. Maybe it'll
help you a bit: [https://enlight.ml](https://enlight.ml)

------
andreshb
Without being present? Partner with other organizations that are present. At
Coderise.org we discovered that the most valuable part of our after school 8
week program for teens was the time with the mentors that also serve as role
models, those relationships are kept for years after the program and that's
how the kids continue on a path of software engineering, participate in the
local engineering meetups / community and end up studying engineering,
building startups, and giving back

------
salmonfamine
I've done this before as an instructor as a tech camp. One great activity for
the 12-16 age group is teaching them to mod minecraft.

This is a little more advanced, obviously, so it's not a great activity for
total beginners. However, once a kid learns that they can make exploding
blocks just by writing about 5 lines of code, they're totally hooked.

It also gives them an initial idea as to what real software looks like. Once
that is demystified, their confidence as coders increases substantially.

------
shawnmgoulet
Very timely - I am teaching students ages 8-12 & 10-15 coding this summer.

I've been planning on using Mozilla's Learning program
([https://learning.mozilla.org/en-US/](https://learning.mozilla.org/en-US/)) a
shot.

It's 2 separate sessions (1 for each age group) and 2 weeks in total. I have
already outlined my plan based on it that I'm happy to share.

Does anyone have experience using their platform - share some thoughts?

------
sogen
I'd go with Construct2, the free version comes with a lot of games. It's very
very visual.

I also used AppInventor, an online platform by MIT, let's you code visually in
the browser, might be worth checking out.

Finally, show them this video:
[http://www.gamasutra.com/view/news/178938/Video_Is_your_game...](http://www.gamasutra.com/view/news/178938/Video_Is_your_game_juicy_enough.php)

------
cableshaft
You can get them thinking in a programmer mindset through some board games.
There's a whole 'programming' genre out there, where you have to choose the
right actions in the right order to play the game effectively. Here are some
examples:

* Robot Turtles

* Robo Rally

* Colt Express

* River Dragons

* Walk the Plank!

* Mechs vs Minions

Get them playing the games, and then after they're enjoying themselves and
having fun, explain how it relates to programming, and replace the actions in
the games with functions ("actions") you can do in apps.

------
adwww
I used to volenteer run a local branch of CodeClub in the UK - a supranational
charity that produce their own courses based around Scratch, HTML / Javascript
and Python.

It was my first time doing anything like that and found that CodeClub were
really supportive and had a heap of resources for us to use.

Worth a look: [https://www.codeclubworld.org](https://www.codeclubworld.org)

~~~
foopod
I have been volunteering at my local codeclub for about a year now. Loads of
fun and they have a full online curriculum[0] full of resources that cover
everything mentioned in the parent. They also recently partnered with the
raspberry pi foundation so I am sure we will see more crossover in that space
soon.

Code club is a volunteer lead international coding club, maybe see if you have
any local clubs that you can support or if you can find some people that would
be happy volunteering a couple of hours every week to run one at a local
library (or similar).

All of the resources use web technologies, so they can learn python through a
browser at a library computer without needing their own resources.

Another thing I have been part of is OMG Tech![1] which holds events every two
months with the aim of exposing children to tech that they wouldn't have
experienced otherwise. So imagine taking a bunch of kids from low decile
schools and having fun with 3d printing, robotics, coding, science experiments
and more. The theory being that a lot of kids don't go into tech because they
just don't know about it, have never experienced or think it is just too hard.
So just showing them that they can do this really cool stuff goes a long way.

[0] - [http://projects.codeclubworld.org/](http://projects.codeclubworld.org/)
[1] - [https://omgtech.co.nz/what-we-do-omgtech/](https://omgtech.co.nz/what-
we-do-omgtech/)

------
Beltiras
[https://www.codingame.com/](https://www.codingame.com/) is a terrific
resource. Also, I've found that if youngsters enjoy (not just able to play,
enjoy) [https://www.factorio.com/](https://www.factorio.com/) they are
predisposed to solve programming puzzles as well.

------
herbst
Check out what linda luikas does. Her work is amazing

~~~
jiblyyyy
Adding a bunch of her books to the mix is a good idea! Tnx

------
ericssmith
Here is an essay I wrote following my son's first technical talk, weeks after
his seventh birthday. It references what I believe works in teaching children
to program.

[https://medium.com/@eric2.71828/your-journey-is-important-
sh...](https://medium.com/@eric2.71828/your-journey-is-important-share-
it-a96613793f6#.ck89turxe)

------
lojack
Make it fun! My company recently hosted an Hour of Code to teach young kids to
learn how to code. Since your goal is to teach them without necessarily being
present every day, you may need to change things around, but their website is
an amazing resource of fun projects that help teach.

[https://code.org/learn](https://code.org/learn)

------
closed
If you need a partner in crime, send me an email (it's in my profile)!

I build tools for teaching adults to code, but recently started volunteering
for a non-profit that provides a couple hours a week for kids to come in and
learn HTML, CSS, javascript. It's 75% them trying to play minecraft and
roblox, but seeing a kid whip open the chrome inspector is pretty inspiring.

------
KON_Air
Linear programming on paper first, then linear programming by code. I have no
idea how to do that one with kids, without being present (since I barely
managed to do it with adults, while being present).

Doing it on paper by hand first is more important then it sounds, so they can
really understand a)what they are coding, b)how fricking awesome computers
really are.

~~~
adrianN
How do you teach linear programming with more than two dimensions to children
who don't know linear algebra? Why would a child be interested in linear
programming?

~~~
KON_Air
Exactly.

------
Quarrelsome
I've always figured that this:

[https://www.youtube.com/watch?v=leBEFaVHllE&t=89s](https://www.youtube.com/watch?v=leBEFaVHllE&t=89s)

was a pretty smart way to start out. Its possibly the opposite of what you
want as it is completely unrelated to tools/manuals/etc.

------
Tistron
I agree that it depends on age. I will be teaching high school kids next
autumn and I have been looking at potentially using
[http://gomix.me](http://gomix.me) where you can prep an assignment and they
can easily clone it and get hacking.

------
chinchang
This can be really useful for kids - Web Maker
[https://kushagragour.in/lab/web-maker/](https://kushagragour.in/lab/web-
maker/)

Specially, in remote areas where there is low/no connectivity, as Web Maker
works offline!

------
nova22033
MIT scratch to get the kids excited about programming. Also a great way to
learn basic concepts like conditionals and loops. Then "Teach Your Kids to
Code: A Parent-Friendly Guide to Python Programming". Build fun shapes using
turtle. Source: Teaching an 8 year old to code.

------
qHack
Went to a career day at a 5th grade class.
[https://studio.code.org/s/frozen](https://studio.code.org/s/frozen) worked
for me, but its not coding per say. They still had alot of fun.

And yes inspect element is gold.

------
bsvalley
Problem is, if we teach kids how to code today, they might end up jobless when
they graduate from college.

Machines will code for us. I think we should push the vision further. We
always try to apply the present for the future. The real future for these kids
is not coding!

------
tyingq
I haven't used it personally, but Blockly is often cited as being useful in
that scenario:
[https://developers.google.com/blockly/](https://developers.google.com/blockly/)

------
mig39
I've seen some great success with my own kids and
[https://www.tynker.com](https://www.tynker.com).

Starts at the very beginning, with a lot of variety in paths and lessons.
Self-paced and gamified.

Not sure about the cost.

------
sharemywin
I always loved this TED talk:

[https://www.ted.com/talks/sugata_mitra_shows_how_kids_teach_...](https://www.ted.com/talks/sugata_mitra_shows_how_kids_teach_themselves)

------
rnl
[https://www.reaktor.com/blog/code-school-for-children-and-
he...](https://www.reaktor.com/blog/code-school-for-children-and-heads-of-
state/)

------
JCoder58
Take a look at EToys:
[https://en.wikipedia.org/wiki/Etoys_(programming_language)](https://en.wikipedia.org/wiki/Etoys_\(programming_language\))

------
GiorgioG
Teach them how to solve problems before you even start talking about code.

------
linusekenstam
Hello!

We run an after school classes program in Barcelona, Spain. Where we teach
kids from age 4-15 "programming" or computational thinking.

Depending on age group there are different tools, and starting with the really
young ones, we use tools like Hopscotch and other simpler coding apps, when we
use technology. And even more fun is to learn about coding not even using any
tech. So then we revert to using pen/paper/strings and ourselves, programming
each other is a fun thing to do, and you can debug the code in group, and
learn to understand how computer operates, and how to give orders.

Once the kids get slightly older, we use to go straight to scratch, (this is
the first stop we tend to go to regardless of age if anyone is new, just to
grasp concepts) This will not take to long if the kids are older than 10.

But even from 6 years of age we've seen enormous potential in using scratch,
kids love it, it's visual in the output, super versatile in what you can do
(we get blown away by the kids all the time). And you can indeed build very
complex things with scratch, as well as you can produce a pong game in matter
of minutes.

Main take away, if you want the kids engaged, get them super comfortable in
Scratch, and get them to understand problem solving using computational
thinking, rather than go straight to the browser and manipulate the DOM,
that's not learning kids how to code, thats like peeking and changing values,
not really getting to the core of programming.

Once the kids are comfortable in understanding that one thing can be solved in
more than 10 ways, and that no real way is the right way (except if it is).
Than make an introduction to text based programming, either looking inside
scratch code, or by looking at something in the visual spectrum, like
processing, this is a great first step and good jump from scratch. And it's
easy to build on top of this and move into javascript.

When I'm mentioning age groups it's only if they have zero prior knowledge
about coding, we have 6 years old that program as good as 12 years old but the
6 year old kids have been doing it for a year or more and the 12 year olds are
just a couple of weeks into classes.

So it's also about checking the temperature on knowledge. Once you start
moving up the ladder on text based programming, it's important to understand
how to keep the vast majority interested, and not just the .consoleLog();
persons interested. Keep in mind that programming comes in many shades, and
not everyone is hard core math nerd loving, but still can be terrific problem
solvers, if given the right tools to do so.

I would say the biggest take-away for us since starting KidsHackClub.com is
that make sure it's fun, do not indulge in long demos, or make complex things,
and show of big projects, it wont get the kids into coding, it will scare them
away. So start small, and build up as time goes, and make things that are
visual, no-one enjoys staring at lines of intigers counting in the console,
sorry peps, it's kids from the touch generation, they have played with phones
and tablets since they where born.

Would love to chat more, just hit me up on twitter @LinusEkenstam or
@KidsHackClub and we can also do email, but ping me on Twitter and we can hook
up.

~~~
linusekenstam
and yes, obviously when they grasp the concepts, we move on to do robotics,
lego, 3D printing, painting robots and so on, but getting the basics is the
first step, then it's just like a waterfall. :-)

------
monk_e_boy
MIT scratch and kudu. Kids love it. I teach from 12 years old up to 18.
Primary school kids will enjoy Scratch. Things like animated greetings cards,
tamagotchi, flappy bird....

------
sjm
Check out Sonic-Pi: [http://sonic-pi.net](http://sonic-pi.net)

It's "classroom-ready", gives instant feedback and would be quite fun.

------
feiss
Aframe.io + bunch of cardboards

Easy as HTML, with option of adding more complexity via javascript. Very
rewarding from the start, children get into VR from the very beginning.

------
RichardHeart
coder Dojo seems to do well: [https://coderdojo.com/start-a-
dojo/](https://coderdojo.com/start-a-dojo/)

resources:
[http://kata.coderdojo.com/wiki/Home_Page](http://kata.coderdojo.com/wiki/Home_Page)

------
etiene
Underprivileged children anywhere in the world? Have you considered they will
not speak English?

------
ben_says
tell them, they are not allowed to code!

------
yandrypozo
Use only papers and pens

------
jdlyga
operant conditioning

------
camperman
I did it this way us9ing Lua and Love2d (love2d.org):

Teach them what data is: numbers, strings of characters, true or false
statements. Let them play in the interpreter. Let them see the computer work
for them. Teach them that a variable is just the name of a box and the value
is the contents.

Then introduce tables. Just like a set of boxes with labels.

Then simple control flow. Now you can introduce them to Love2d and start them
off making simple graphics programs.

Eight hours or so later, they can code small games using Love and will
understand each line. Then you can leave them to their own devices and point
them at further resources.

------
bayofpigs
If they are less than 10yrs, look into Alice:
[http://www.alice.org/index.php](http://www.alice.org/index.php). Teaches
fundamental building blocks while they play with scene creation. Have used it
for several classes and each one was outstanding.

My favorite for older kids is to find an open-source video game with easily
modifiable parameters, like lives, enemy count, sizes, etc., Start by asking
them to change various things - class nearly runs on auto-pilot before too
long.

------
nolepointer
First explain to them that you don't "code." You "write code" or "program." :)

