Teaching Programming to Middle Schoolers

After many years of teaching Scratch at my local elementary school, I decided to start teaching an after-school session at my local Middle School. With diverse interests and abilities (not to mention, I’m considerably more busy during my day job), I thought I’d try a new approach: nothing.

With amazing environments, like Scratch, and on-demand lecture series, like CodeAcademy and Khan Academy, I shouldn’t need to prepare much…just turn them loose, following their interests, but be available to help.

Wrote up the description in the school paper:

Interested in making computer games instead of just playing them? Don’t know how to program? No problem. This class is for beginners. We’ll get you started learning based on your interests:

This club is student directed and collaborative, meaning that you can work on projects by yourself or with your friends. The teacher will get you started, but you’ll need to be self-motivated.

On the first day, I’m going to give this presentation, and print the following pages for each student to get started:

Yes, I would rather just teach them Racket, but I’ll wait for high school for that. ;-)

Spotlights

While the students will learn on their own, I would like to spend 5 to 10 minutes at the beginning of each class spotlighting something interesting from the wonderful world of computing.

No plans to teach these, just wanting to expose and intrigue them. Here is a list of my initial thoughts, but would love to hear from you:

  • When I was a Kid

    When I was your age (assuming, of course, that you’re in middle school), the Apple ][ was release. This computer changed the world, but you probably wouldn’t know that by looking at it.

  • Internet of Things

    A photo from Snapchat doesn’t go from one computer directly to another computer (even if it seems like it). We use special computers called servers that store information (like photos).

  • Spreadsheets

    The original spreadsheet, Visicalc, changed the world. Behind typing prose, it may be the second most used application for most people: technical or not.

  • Binary Numbers

    Counting in different bases is a classic computer problem, but I think I could get the idea if instead of our standard numerals, I used a sort of cipher of wingdings.

  • Ada Lovelace

    Founder of programming … a bit about her life and her contribution to software.

  • Stacks

    A visual overview of this classic data structure. What example would intrigue these students?

  • Prefix vs Infix vs Postfix Notation

    Yeah, gotta slip in my Lisp and Forth. Nothing too extreme, but just to show that we have multiple ways to do things.

  • Quicksort

    Nothing too technical, but a visual overview to demonstrate the concept of how we care about the speed of sorting things.

Summary (Updated June 2017)

When I started the endeavor described above, I thought I would suggest Scratch, but the students at that time said it was for kids. However, after a year or so trying to teach more advanced topics (including Web pages, JavaScript, etc), I got a crop of kids that admitted that they liked Scratch. This past year, I pushed Scratch heavily, and that has made a huge difference.

What I found for general success was a blend of structure and freedom. Each day, I would show them some feature or technique in Scratch, and then let them do what they want. Usually, it was something like showing how to make a realistic jump, or a side scroller where the background could move, or how to shoot things, etc. Each of these mini-lessons were interesting and inspiring enough, that I didn’t have much issue with the students “checking out” and just playing games.

However, after splitting my time between middle school programming and my high school robotics group, I’ve decided to focus on the robotics at high school. I hope to get back to Middle School next year.