<p>The important thing to focus on is basic programming concepts. The language itself isn't as important at this early stage. I'll shamelessly promote my book, because it is appropriate here: <a href="https://rads.stackoverflow.com/amzn/click/1718198450" rel="nofollow noreferrer">The Super Simple Programming Book: Learn Basic Programming Concepts With Python</a>. </p>

<p>It's a quick read, and it uses short and simple programs to teach the fundamental programming concepts like data, input/output, loops, decisions, etc. The book assumes no prior programming experience or knowledge. It uses a friendly and inviting tone as well. I must warn you that it isn't a good reference, because it doesn't aim to be. The goal is to quickly build a foundation, so students can continue their programming journeys on their own.</p>

CC BY-SA 4.0
2018-11-14T18:41:58.230Z
2018-11-14T18:41:58.230Z
Edwin Torres
<p>I taught kids Python last year, and I used "Python for Kids: A Playful Introduction To Programming" as a textbook.</p>

<p>But... Before I taught them Python, I taught them Scratch for several months so that they can grasp the basic concept of Scratch.</p>

<p>Then, I taught them how to type fast because I noticed that their typing skills are not up to be ready for coding. There are lots of fun typing game websites. Their favorite was nitrotype.com. </p>

<p>When I taught Python, I basically walked through the Python for Kids textbook, and made sure that they finished all the questions in the textbook. Kids really enjoyed the last project, Snake game, in the book.</p>

<p>My lecture notes on Python can be found here -- <a href="https://github.com/geekdojo-io" rel="nofollow noreferrer">https://github.com/geekdojo-io</a></p>

CC BY-SA 4.0
2018-11-09T21:43:11.433Z
Thanks for the experienced, practical answer. Nicely done, and welcome to [cseducators.se]!
Ben I.
CC BY-SA 4.0
2018-11-09T20:12:41.420Z
2018-11-09T20:12:41.420Z
Jason Huh
<p>Check out the Python books written by Al Sweigart. His homepage <a href="http://inventwithpython.com/" rel="nofollow noreferrer">Invent with Python</a> includes some great, free resources that are geared to the age range of your students. In particular he focuses on creating games which is, in my experience, an effective hook. Two books to use to inform your teaching are the following (in order):</p>
<ul>
<li><a href="http://inventwithpython.com/invent4thed/" rel="nofollow noreferrer">Invent Your Own Computer Games with Python</a></li>
<li><a href="http://inventwithpython.com/pygame/index.html" rel="nofollow noreferrer">Making Games with Python &amp; Pygame</a></li>
</ul>
<p>You can read the books for free online and download each one's respective source code.</p>
<p>I've spent time teaching the age range in question, and most students just starting out aren't really fascinated by the finer details of variables, loops, and conditionals. They want to see something happen, to make the computer do something <em>fun</em>. Games are the perfect vehicle for this to take place.</p>
<p>Part of what makes Al's approach inviting is that there is a lot of supplied code that students can then customize. They might not get why variables matter at first, but if it becomes a discussion about tracking the level of a game or the current high score (or a list of all-time high scores), then the students' interest will be piqued.</p>

CC BY-SA 4.0
2017-07-05T08:11:09.350Z
2020-10-03T22:55:11.473Z
2020-10-03T22:55:11.473Z
Peter
<p>I agree with Peter. It needs to be fun, and games really help. It doesn't take much to exercise basic programming concepts such as variables, loops, selection, input, and output. I would start with simple games like Tic-Tac-Toe and Number Guessing Game. Implementing a simple AI would be fun. I've found that in-class programming contests work well too. For example, I've asked students to race to finish a fairly simple program. Another fun project is to use TkInter to allow students to play with graphics. Visual assignments tend to be more fun than stdout. </p>

CC BY-SA 3.0
2017-07-06T09:04:57.927Z
I eventually went with creating a little text adventure to start with, with each kid creating their own. Thanks for the idea!
kosciCZ
CC BY-SA 3.0
2017-07-06T13:11:59.450Z
@kosciCZ, you're bringing me back to my days of Zork! :-)
Edwin Torres
CC BY-SA 3.0
2017-07-05T14:45:10.810Z
2017-07-05T14:45:10.810Z
Edwin Torres
<blockquote>
  <p>Full disclosure: I'm one of the founders of CodeHS.</p>
</blockquote>

<p>We have a python course on CodeHS that you can try. The curriculum is free to use, and you can sign up as a teacher account to be able to see your students' code and test out their programs.</p>

<p>You can see more about the course here: <a href="https://codehs.com/info/curriculum/intropython" rel="nofollow noreferrer">https://codehs.com/info/curriculum/intropython</a></p>

<p>It's designed for high schoolers, but the first unit teaches Tracy the Turtle, which is a turtle graphics implementation in python in the browser that's really visual and accessible for younger students.</p>

<p>You learn to teach the turtle to move around the canvas and draw different shapes like this:
<a href="https://i.sstatic.net/z1lDI.gif" rel="nofollow noreferrer"><img src="https://i.sstatic.net/z1lDI.gif" alt="enter image description here"></a></p>

CC BY-SA 3.0
2017-08-31T20:30:50.920Z
@ZachGalant, you may want to check out this question: https://cseducators.stackexchange.com/questions/3441/teaching-a-blind-high-school-student
Ben I.
CC BY-SA 3.0
2017-07-05T06:34:40.127Z
2017-07-05T06:34:40.127Z
Zach Galant
<p>I have used 3 techniques.</p>

<ul>
<li>Bottom up: teaching the parts and having them slowly able to create bigger programs. (This was the least good. It was not interesting, they did not learn as much. However it could be mixed with the others.)</li>
<li>Top down: I remind pupils that in Literature class they read poems and novels that they could not yet write. I then provide a working program, and get them to read it, and make guesses as to what bits do, and to change them. ”What happens if I change that?”</li>
<li>CodeHS (see @ZachGalant's answer. I first tried this after reading the answer). Pupils liked these lessons, and I got some good feedback on progress. However it stopped working (at school) in week 2. (Then it was the end of term.)</li>
<li>Avoid variables as long as possible: introduce parameterisation before mutation (a long way before), mutation should be one of the last things taught.</li>
</ul>

<p>I also want to try ideas based on Bret Victor's ideas of direct manipulation, and immediate feedback: no compilation, no pressing run. Just change the code, and see the change.</p>

CC BY-SA 4.0
2017-07-28T09:55:09.343Z
2018-11-09T10:55:23.057Z
2018-11-09T10:55:23.057Z
ctrl-alt-delor
<p>I see you've already accepted a great answer, but I'd like to give my knee-jerk reactions to your questions directly.</p>
<blockquote>
<p>What I'm trying to ask here is, how do I get my mindset to their level?</p>
</blockquote>
<p>In <a href="https://cseducators.stackexchange.com/questions/5176/teaching-binary-encoding-using-different-symbols/5201#5201">this question here</a> we were talking about how to teach binary to 6-8 year-olds. What I said there I think touches on this question (I said a lot and am not going to repeat it here).</p>
<p>Very generally, what I do is assume nothing as far as previous knowledge and I especially try to keep things very goal/task focused, meaning, discussing what we want the computer to do, and the higher level ideas of how the computer does it. I only break things down into something more technical and specific when needed.</p>
<p>Language is especially important! Only introduce one term at a time and explain them thoroughly each time you add a new word to the jargon you want someone to understand. It actually helps to know, and use often, other (preferably simpler) terms while explaining an idea. For example, a variable is a &quot;labeled box&quot;, or a &quot;small dry erase board&quot;. A function is a &quot;list of instructions&quot;. This actually brings me to your next question:</p>
<blockquote>
<p>They struggle with understanding what a variable is, have trouble understanding flow of the program. What can I demonstrate to make them understand better?</p>
</blockquote>
<p>Use as many real-world objects and analogies as possible. As I said above, variables are labeled boxes, cubbies, white boards, or any other object that holds information and can be emptied and refilled. Functions are just lists, and things like if statements can be thought of as &quot;splits in a road&quot; of instructions (or steps) your program is following.</p>
<p>I found it really useful when couching in college to use office workers (or any person doing any job) to represent objects and behaviors within a program. Personifying parts of a program can really help a lot in explaining how they work together.</p>
<blockquote>
<p>... if it becomes a discussion about tracking the level of a game or the current high score ... -- Peter</p>
<p>It needs to be fun, and games really help. -- Edwin</p>
<p>Like the other responders, I find that visual and game-related applications ... will get and keep attention better than learning the &quot;traditional&quot; way ... -- Matthew</p>
</blockquote>
<p>I really like all the talk of having kids make games in order to learn programming. When I was 14 and first learning C++ I made lots of little games too. I'd like to caution not to lose focus though. Regardless of what kind of program is being made that doesn't change how the teaching itself, the careful explanation of ideas, needs to be done. Please, make the packaging colorful and interesting, but keep in mind that concepts build on each other and need to be addressed in an order that makes sense and keeps questions flowing naturally.</p>

CC BY-SA 4.0
2018-11-09T21:45:03.773Z
You've been posting some high-quality answers lately. Welcome to our community! Feel free to drop by the [chat](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi. It's lately become more of a message board than a chat room, but that could always change, and that's where the most active users hang out :)
Ben I.
CC BY-SA 4.0
2018-11-17T21:43:32.640Z
Thank you. :-) I'll definitely check it out as soon as I get a chance.
RoboticForest
CC BY-SA 4.0
2018-11-09T04:41:56.043Z
2018-11-09T04:41:56.043Z
2020-06-18T08:36:57.023Z
RoboticForest
<p>I've been in a similar situation. Like the other responders, I find that visual and game-related applications, often using high-level ideas like objects and methods/functions, will get and keep attention better than learning the "traditional" way from basic concepts like variables, operators, and control flow.</p>

<p>If your students like Minecraft (and haven't sold their soul's completely to Fortnite yet),  you might look into some of the many activities online for modding Minecraft with Python. </p>

<p>Here's some examples:
<a href="https://education.minecraft.net/lessons/teach-python-with-minecraft-pi/" rel="nofollow noreferrer">https://education.minecraft.net/lessons/teach-python-with-minecraft-pi/</a></p>

<p><a href="https://projects.raspberrypi.org/en/projects/getting-started-with-minecraft-pi/5" rel="nofollow noreferrer">https://projects.raspberrypi.org/en/projects/getting-started-with-minecraft-pi/5</a></p>

<p><a href="https://nostarch.com/programwithminecraft" rel="nofollow noreferrer">https://nostarch.com/programwithminecraft</a></p>

CC BY-SA 4.0
2018-09-29T12:47:28.883Z
2018-09-29T12:47:28.883Z
Matthew W.
<p>I'm currently teaching Python, to three 12-year-olds. They have no experience at all, and my task is to introduce them to programming concepts, and to Python. I'm fairly experienced in programming, and I'll be starting my third year of computer science at university next year.</p>

<p>What I'm trying to ask here is, how do I get my mindset to their level? They struggle with understanding what a variable is, have trouble understanding flow of the program. What can I demonstrate to make them understand better?</p>

<p>I've already tried introducing variables, print function, and some flow controlling through conditionals (all came together in a little calculator), but I seem to fail at making it easy for them to understand.</p>

CC BY-SA 3.0
2017-07-05T11:18:19.583Z
BTW, it's not unusual; starting out is rough for virtually everybody. I think you'll find that you've arrived at a good place to get help, though. (Plus, we're glad to have you.) Welcome to [cseducators.se]!
Ben I.
CC BY-SA 3.0
2017-07-05T16:51:18.287Z
I am a newly qualified teacher, today I tought 3 classes yr7 (11-12years old), and yr8(23-13 years old). We did a code combat hour of code. There are a few bugs, the the first 5 minutes getting started was a pain. One of the buttons on the web page needs clicking 5 to 10 times. But with clear instruction, and help they did it. After that it was a good lesson. Almost all made good progress. One in each class, was refusing to enguage (zero resilience, and one hiccup and they gave up). Everyone else did it (some with help).
ctrl-alt-delor
CC BY-SA 4.0
2018-09-30T23:55:09.060Z
Hi. Good luck. 12 year olds are just at the early stages of being able to abstract concepts to the level required for programming (at all), so some will struggle seriously while others will take to it like a duck to water. Take it in small steps, choose problems that they can relate to (my 8 yo son is doing Minecraft mods in Java). One day you'll be thinking you're wasting time and resources and they aren't learning anything, then you'll overhear them having an intelligent conversation about programming with someone else
pojo-guy
<lesson-ideas><python><introductory-lesson>
How do I approach teaching Python to 12-year-olds as a first-time teacher?
# How do I approach teaching Python to 12-year-olds as a first-time teacher?

(Asked by: username_0 on 2017-07-04)

I'm currently teaching Python, to three 12-year-olds. They have no experience at all, and my task is to introduce them to programming concepts, and to Python. I'm fairly experienced in programming, and I'll be starting my third year of computer science at university next year.

What I'm trying to ask here is, how do I get my mindset to their level? They struggle with understanding what a variable is, have trouble understanding flow of the program. What can I demonstrate to make them understand better?

I've already tried introducing variables, print function, and some flow controlling through conditionals (all came together in a little calculator), but I seem to fail at making it easy for them to understand.

**Tags:** lesson-ideas, python, introductory-lesson

> **Comments:**
> **username_1**: BTW, it's not unusual; starting out is rough for virtually everybody. I think you'll find that you've arrived at a good place to get help, though. (Plus, we're glad to have you.) Welcome to [cseducators.se]!  
> **username_2**: I am a newly qualified teacher, today I tought 3 classes yr7 (11-12years old), and yr8(23-13 years old). We did a code combat hour of code. There are a few bugs, the the first 5 minutes getting started was a pain. One of the buttons on the web page needs clicking 5 to 10 times. But with clear instruction, and help they did it. After that it was a good lesson. Almost all made good progress. One in each class, was refusing to enguage (zero resilience, and one hiccup and they gave up). Everyone else did it (some with help).  
> **username_3**: Hi. Good luck. 12 year olds are just at the early stages of being able to abstract concepts to the level required for programming (at all), so some will struggle seriously while others will take to it like a duck to water. Take it in small steps, choose problems that they can relate to (my 8 yo son is doing Minecraft mods in Java). One day you'll be thinking you're wasting time and resources and they aren't learning anything, then you'll overhear them having an intelligent conversation about programming with someone else  

---

## 8 answers

### Answer by username_6 on 2017-07-05. Score: 13 | Accepted answer

Check out the Python books written by Al Sweigart. His homepage [Invent with Python](http://inventwithpython.com/) includes some great, free resources that are geared to the age range of your students. In particular he focuses on creating games which is, in my experience, an effective hook. Two books to use to inform your teaching are the following (in order):

* [Invent Your Own Computer Games with Python](http://inventwithpython.com/invent4thed/)
* [Making Games with Python & Pygame](http://inventwithpython.com/pygame/index.html)

You can read the books for free online and download each one's respective source code.

I've spent time teaching the age range in question, and most students just starting out aren't really fascinated by the finer details of variables, loops, and conditionals. They want to see something happen, to make the computer do something *fun*. Games are the perfect vehicle for this to take place.

Part of what makes Al's approach inviting is that there is a lot of supplied code that students can then customize. They might not get why variables matter at first, but if it becomes a discussion about tracking the level of a game or the current high score (or a list of all-time high scores), then the students' interest will be piqued.


---

### Answer by username_4 on 2017-07-05. Score: 7

I agree with username_6. It needs to be fun, and games really help. It doesn't take much to exercise basic programming concepts such as variables, loops, selection, input, and output. I would start with simple games like Tic-Tac-Toe and Number Guessing Game. Implementing a simple AI would be fun. I've found that in-class programming contests work well too. For example, I've asked students to race to finish a fairly simple program. Another fun project is to use TkInter to allow students to play with graphics. Visual assignments tend to be more fun than stdout.

> **Comments:**
> **username_0**: I eventually went with creating a little text adventure to start with, with each kid creating their own. Thanks for the idea!  
> **username_4**: @username_0, you're bringing me back to my days of Zork! :-)  

---

### Answer by username_7 on 2017-07-05. Score: 4

> Full disclosure: I'm one of the founders of CodeHS.

We have a python course on CodeHS that you can try. The curriculum is free to use, and you can sign up as a teacher account to be able to see your students' code and test out their programs.

You can see more about the course here: <https://codehs.com/info/curriculum/intropython>

It's designed for high schoolers, but the first unit teaches Tracy the Turtle, which is a turtle graphics implementation in python in the browser that's really visual and accessible for younger students.

You learn to teach the turtle to move around the canvas and draw different shapes like this:
[![enter image description here](https://i.sstatic.net/z1lDI.gif)](https://i.sstatic.net/z1lDI.gif)

> **Comments:**
> **username_1**: @ZachGalant, you may want to check out this question: https://cseducators.stackexchange.com/questions/3441/teaching-a-blind-high-school-student  

---

### Answer by username_2 on 2017-07-28. Score: 3

I have used 3 techniques.

* Bottom up: teaching the parts and having them slowly able to create bigger programs. (This was the least good. It was not interesting, they did not learn as much. However it could be mixed with the others.)
* Top down: I remind pupils that in Literature class they read poems and novels that they could not yet write. I then provide a working program, and get them to read it, and make guesses as to what bits do, and to change them. ”What happens if I change that?”
* CodeHS (see @ZachGalant's answer. I first tried this after reading the answer). Pupils liked these lessons, and I got some good feedback on progress. However it stopped working (at school) in week 2. (Then it was the end of term.)
* Avoid variables as long as possible: introduce parameterisation before mutation (a long way before), mutation should be one of the last things taught.

I also want to try ideas based on Bret Victor's ideas of direct manipulation, and immediate feedback: no compilation, no pressing run. Just change the code, and see the change.


---

### Answer by username_8 on 2018-11-09. Score: 2

I see you've already accepted a great answer, but I'd like to give my knee-jerk reactions to your questions directly.

> What I'm trying to ask here is, how do I get my mindset to their level?

In [this question here](https://cseducators.stackexchange.com/questions/5176/teaching-binary-encoding-using-different-symbols/5201#5201) we were talking about how to teach binary to 6-8 year-olds. What I said there I think touches on this question (I said a lot and am not going to repeat it here).

Very generally, what I do is assume nothing as far as previous knowledge and I especially try to keep things very goal/task focused, meaning, discussing what we want the computer to do, and the higher level ideas of how the computer does it. I only break things down into something more technical and specific when needed.

Language is especially important! Only introduce one term at a time and explain them thoroughly each time you add a new word to the jargon you want someone to understand. It actually helps to know, and use often, other (preferably simpler) terms while explaining an idea. For example, a variable is a "labeled box", or a "small dry erase board". A function is a "list of instructions". This actually brings me to your next question:

> They struggle with understanding what a variable is, have trouble understanding flow of the program. What can I demonstrate to make them understand better?

Use as many real-world objects and analogies as possible. As I said above, variables are labeled boxes, cubbies, white boards, or any other object that holds information and can be emptied and refilled. Functions are just lists, and things like if statements can be thought of as "splits in a road" of instructions (or steps) your program is following.

I found it really useful when couching in college to use office workers (or any person doing any job) to represent objects and behaviors within a program. Personifying parts of a program can really help a lot in explaining how they work together.

> ... if it becomes a discussion about tracking the level of a game or the current high score ... -- username_6
>
> It needs to be fun, and games really help. -- Edwin
>
> Like the other responders, I find that visual and game-related applications ... will get and keep attention better than learning the "traditional" way ... -- Matthew

I really like all the talk of having kids make games in order to learn programming. When I was 14 and first learning C++ I made lots of little games too. I'd like to caution not to lose focus though. Regardless of what kind of program is being made that doesn't change how the teaching itself, the careful explanation of ideas, needs to be done. Please, make the packaging colorful and interesting, but keep in mind that concepts build on each other and need to be addressed in an order that makes sense and keeps questions flowing naturally.

> **Comments:**
> **username_1**: You've been posting some high-quality answers lately. Welcome to our community! Feel free to drop by the [chat](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi. It's lately become more of a message board than a chat room, but that could always change, and that's where the most active users hang out :)  
> **username_8**: Thank you. :-) I'll definitely check it out as soon as I get a chance.  

---

### Answer by username_9 on 2018-09-29. Score: 2

I've been in a similar situation. Like the other responders, I find that visual and game-related applications, often using high-level ideas like objects and methods/functions, will get and keep attention better than learning the "traditional" way from basic concepts like variables, operators, and control flow.

If your students like Minecraft (and haven't sold their soul's completely to Fortnite yet), you might look into some of the many activities online for modding Minecraft with Python.

Here's some examples:
<https://education.minecraft.net/lessons/teach-python-with-minecraft-pi/>

<https://projects.raspberrypi.org/en/projects/getting-started-with-minecraft-pi/5>

<https://nostarch.com/programwithminecraft>


---

### Answer by username_4 on 2018-11-14. Score: 1

The important thing to focus on is basic programming concepts. The language itself isn't as important at this early stage. I'll shamelessly promote my book, because it is appropriate here: [The Super Simple Programming Book: Learn Basic Programming Concepts With Python](https://rads.stackoverflow.com/amzn/click/1718198450).

It's a quick read, and it uses short and simple programs to teach the fundamental programming concepts like data, input/output, loops, decisions, etc. The book assumes no prior programming experience or knowledge. It uses a friendly and inviting tone as well. I must warn you that it isn't a good reference, because it doesn't aim to be. The goal is to quickly build a foundation, so students can continue their programming journeys on their own.


---

### Answer by username_5 on 2018-11-09. Score: 1

I taught kids Python last year, and I used "Python for Kids: A Playful Introduction To Programming" as a textbook.

But... Before I taught them Python, I taught them Scratch for several months so that they can grasp the basic concept of Scratch.

Then, I taught them how to type fast because I noticed that their typing skills are not up to be ready for coding. There are lots of fun typing game websites. Their favorite was nitrotype.com.

When I taught Python, I basically walked through the Python for Kids textbook, and made sure that they finished all the questions in the textbook. Kids really enjoyed the last project, Snake game, in the book.

My lecture notes on Python can be found here -- <https://github.com/geekdojo-io>

> **Comments:**
> **username_1**: Thanks for the experienced, practical answer. Nicely done, and welcome to [cseducators.se]!  

---

