Llewellyn and I have just completed our first after-school program introducing kids to programming (using the Intentional Method of teaching and SmallBasic) and I wanted to share the lessons we learned here.
First, a description of what we did. We volunteered to teach within an existing after-school framework. The classes ran for one hour per week, each week for 14 weeks. Our class consisted of 7 or 8 kids, ranging in age from 8 to 12 years old. The school had an existing computer center with PCs.
1) Write a great abstract. Even for after school programs, you have to write a short description that is compelling and fun in order to attract students. Here’s what we used.
2) Get PCs – we had a tricky time with the first setup, because only one person at school knew the proper administrative passwords. We found that we can run SmallBasic from USB drives, so we can use a zero install (just need a PC with the .NET framework 3.5 or higher)
3) Check the classroom layout – we had an unfortunate set-up for this class. All of the PCs faced the wall and there was no projector. Although we made this work, in the future we will turn the PCs toward the instructor and, at minimum, use an oversized monitor on the instructor computer. We found it difficult to focus the kids based on this challenging classroom layout.
4) Get other volunteers to help you teach. We had two other developers substitute for us if were unable to teach during a scheduled class.
5) Figure out lesson plans one week prior. We used our recipe courseware (and actually added new recipes / quizzes, etc…) during the course of teaching.
1) Pair the kids artfully – pairing is tricky. If a particular pairing does NOT seem to be working, then mix it up. We’ve really found the only way to know what works is to try it. There is no hard rule, such as ‘advanced’ with ‘beginner’ or ‘beginners together’, etc… One thing that we have seen over and over is that effective pairing makes for a significantly better class though.
2) Pair teach whenever possible. Although we did teach alone sometimes, modeling the pairing behavior (as teachers) really helps the kids. Also kids need lots of attention, having two teachers really helps to keep all the pairs to be together during the hands on activities.
3) Teach via Intentional Coding. Although we’ve written the recipes from top to bottom using English comments, we do NOT teach them in natural order. Rather we select a line for the pairs to translate based on what can be seen after executing, for example, in the Simple Square recipe, we have the kids translate ‘Move the Tortoise 50 pixels’ BEFORE they translate the ‘Do the following 4 times’ because if the order were reversed, the kids couldn’t immediately see that they had coded the ‘For loop’ correctly.
As we publish all recipes, variations and quizzes to the SmallBasic courseware library, we continue to make small improvements. These include the following:
1) Changing the ID from a random number to a meaningful name, such as ‘SQUARE’ for the square recipe
2) Standardize all English comments in the recipes, such as use the word ‘current’ to represent variables, for example, ‘set the current value of the line length to 50 pixels.’
3) Add intentional teaching direction information to the recipes, i.e. ‘translate line 1, then translate line 7, etc…
4) Add ‘fake it ‘till you make it’ teaching direction to the recipes, i.e. ‘use a value, such as 5 and run the line first, then later turn this into a variable’
5) Add concept documentation to the recipes. We currently do a verbal recap (re-do) of each recipe after the kids complete it. We also have a couple of concept slides, such as ‘If’ statements, ‘For’ loops etc…We’ll adding to the concepts to cover during the recaps and scripting and / or making short videos to demonstrate what we believe to be appropriate in terms of conceptual learning AFTER experiential learning.
6) Move towards recipe writing. In the Agile world this is called ‘Kata’, it means practice. We’ll be writing recipes which do NOT include each line of English, rather just higher-level instructions, such as ‘have the Tortoise draw a blue Square 50 X 50’, so that the kids can turn this into line by line English first, then into code. We believe this is the next step in the bridge to get kids coding fluently.
What You Can Do
1) Volunteer at a school! – We did it, so can you. We are trying to ‘lead the path’ to providing resources (such as courseware, teaching methods, etc…) to make it as easy as possible for more developers to volunteer in our schools.
2) Try out our courseware – if volunteering in a school is too large of a commitment for you, we simply ask that you try out a recipe or two. If you like them, then just find a couple of kids (even your own kids, if you have any) and teach them. Small works just as well as big. Teaching one or two kids is better than teaching zero kids.
3) Spread the word – if you try our stuff, like it, but don’t see how you can teach it yourself, then help us to spread the word by directing people to our blog www.TeachingKidsProgramming.org. The more people that get involved in this effort, the more change will happen.