Teaching CS at the High School level isn’t too hard. Basically, I’ve taken a college freshman level curriculum, tweaked it to make it a bit more interesting for high school students, slowed it down a bit, and taken out some higher level math that a freshman in high school just hasn’t had yet. Every year, I tweak it a bit, based on feedback from students and from what I see going on in the classroom. I borrow ideas shared by other CS teachers and I’m constantly trolling through the resources on the CSTA web site. It may not be perfect every time, but it works.
Teaching CS at the middle school level is a whole different story. If what should be taught at the high school level isn’t a settled issue, it’s even less of a settle issue at the middle school level. The number of places even teaching computer science concepts as part of the curriculum is tiny. I only know of one or two myself. Most people are doing robotics or creative computing as an after-school club. While they might have what one could call a “curriculum,” they’re not as worried about sequencing or providing a foundation. It’s about sparking an interest primarily.
CS is part of our curriculum in the middle school, something I’m hugely proud of and thankful that the administration supports. It’s not fully an academic class, but it is required and every year, we’ve added more time. I’ve struggled every year to figure out the best sequence of assignments, how to present assignments, what language and tools to use, and how much group work to do. I started by doing Scratch in 8th grade, but found that those students thought it was a bit too cutesy, so I moved it to 7th and finally to 6th. I left the assignments alone, and it works pretty well.
In 7th grade, we’re working in a block language that’s a precursor to Python, Jigsaw. At the end of the term, I’ll have them export their programs to Python, so they can see how their programs would look if they typed them out. In this class, we do more with concepts like variables, functions, and types, but we simply repeat many of the same concepts learned through Scratch: loops, if statements, and general sequencing. This year has been challenging because this is the first class to do it, and they didn’t have Scratch last year. But some of them did Scratch in other venues and some did robotics with me, but still, a lack of foundation in logical thinking has been a challenge.
I have one more trimester of 8th grade to get this “right”. Here are some changes I’m going to make:
- Pair programming. I’m going to make people switch halfway through each class, so that each partner gets a chance to be at the keyboard.
- Turn in their work every class period. I’m just going to check off that they did something in class. That might focus some of the kids who aren’t doing anything in class.
- Handouts. The videos aren’t getting watched between classes. I’ll leave them there for the over achievers, but I think a handout with a list of the functions they need to use will be more helpful. To save trees, I’ll post them online, letting individuals print if they want to.
I’m also in the process of revamping the whole Middle School curriculum, so in a few years, none of this will apply, but I do think I’ve learned a lot about how to scaffold projects for MS students, something that I think will be helpful even as I morph the classes into something that looks more interdisciplinary and involves more physical objects, a la #makered. And that may be what’s more appropriate for middle school, a way of showing students how computing is connected to math, science, art, even history and English. It makes sense to me to channel their energy away from the screen and into collaborative hands-on work first and add the computing components later, when it makes their physical objects light up, move, collect data, or make noise. Though I sometimes complain about my class not “counting,” it is also a blessing because I don’t have specific content to get through. There’s not a next grade that’s expecting me to have covered material through x concept. I’m just trying to engage students in something fun, have them see that they can control their computers and not the other way around, and if they remember what a loop is, or learn logical processes, so much the better.