Middle School Computer Science

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.

In 8th grade, I started the year doing Python.  That was kind of a disaster, so I decided to offer either Python, using the videos I had created, or javascript, using an online system that sequenced lessons and projects.  It’s still a disaster.  And it’s not me, and I think I have to figure out a better way to do this.  First, the classes are especially large this year.  I normally have about 15 or 16 students, the perfect number to group them and to manage.  I have 22 in each of my 8th grade classes.  I’d say about half of them even know what’s going on.  Second, I only see them once a week.  It’s common for them to forget entirely what’s going on from week to week, so I have to backtrack a lot or, given the large class size, students just twiddle their thumbs and hope I don’t notice.  Third, they know this class doesn’t really “count”.  The students who are motivated to learn for the sake of learning do fine.  They diligently complete assignments, ask for help, and figure things out.  The rest, if I’m lucky, poke at the assignments, but are sneakily doing homework for other classes.  Sigh.

I have one more trimester of 8th grade to get this “right”.   Here are some changes I’m going to make:

  1. Back to Python.  At first the kids were excited about javascript and they liked the self-directed lessons.  But javascript’s curly braces and semi-colons got to them and they also couldn’t see how they were building skills.  The projects in the online environment had no relation to the lessons–or at least the kids can’t see that.
  2. One project, working in pairs.  I have a couple of groups of students working through either javascript or Python projects.  The time is such that, realistically, students can only get through one project.  I think what I’m going to do is have them complete a “Choose Your Own Adventure Story” game, adding graphics at the end.
  3. 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.
  4. 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.
  5. 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.

Enhanced by Zemanta

Computing Creatively

Yesterday, I had the wonderful opportunity to attend a reunion of the workshop I attended at MIT this past summer on Creative Computing.  A lot came out of that original workshop for me.  I adopted Scratch for my 8th grade technology classes.  Inspired by the fabric-oriented high-low tech lab, I am doing a soft-circuit project with middle schoolers as part of a special project week we have in the spring.  I also solidfied much of my basic knowledge about programming and because of that, was able to forge ahead to learn more complex programming concepts.  So, it was a very productive 3 days that have had a lasting impact.

In a single day, I got almost as much out as I did before.  One thing that was nice about this go around was that I now had actually been in my classroom so I knew more about what I was looking for, what questions to ask, etc.  The advice people offered made more sense than it did back in July when I hadn’t even started my position yet.  Now, I’m ready to explore  a wide variety of things, including using Pico boards with Scratch and using Scratch in my Upper School animation class, something I was inclined to do before, but after seeing some animations demonstrated yesterday, I am now thoroughly convinced.  I’m thinking about using Pico boards with the soft-circuit project I’m doing with the middle schoolers and may explore using them next year in 8th grade, especially for students who have some experience with Scratch.  And I saw some really cool projects from non-computer science classes that have inspired me to plan a workshop/demo on Scratch that highlights some things that Scratch might be used for outside of CS/Technology classes.

Besides all the great Scratch info, I also got some ideas for arduino boards as one of the graduate students there pointed out a programming environment for them that is “drag-and-drop.”  And I found out about a project–which I ran into spontaneously again this morning–where one can build blocks for Scratch, essentially taking it to another level.

And, of course, it was really fun to see people I’d seen this summer, including another Laura with whom I did not get a chance to talk much last time and with whom I have a lot in common.  She is three years ahead of me in a similar position to mine, so it was lovely to get some advice from her and to see where I might be in a few years’ time.

The last week or so has been really productive for me as I’ve worked on several different projects and got many plans in place.  Going to this reunion really helped keep that productivity streak going.

Update 9: Creative Computing

The mascot for the Scratch programming languag...
Image via Wikipedia

For the last 3 days, I’ve been at MIT at a Creative Computing workshop.  I applied for this a while back in hopes of getting some ideas for using Scratch in my classes.  I got a lot more than that.  You know how you go to a workshop on using technology a, and you end up going through a step by step walk-through of how to do things?  And you spend the whole time with your face staring at a computer screen?  Well this wasn’t like that at all.  The focus of this workshop was clearly on pedagogy and learning, thinking about how kids/people learn and then how the technology fits into that paradigm. When I use technology in my teaching, that’s how I approach it.  And I’ve always tried to do that when I teach others how to use technology, to a greater or lesser level of success.

The first a-ha moment I had was during the introduction and Mitch Resnick showed a chart that illustrated the decline in computer science majors.  Industry and others have bemoaned this fact.  As he talked about this decline, he noted that while it was real, it probably wasn’t the whole story, that perhaps people who study other topics go on into careers related to computer science.  He then connected computing to writing, suggesting that when we teach a writing class, we don’t expect those students to go on an become professional writers, but we do expect them to use writing in their schoolwork and jobs, and to have a reasonable understanding of the principles of writing.  The same should be true of computing.  We should expect that while a few students may go on to become computer scientists, everyone should have developed skills in computational thinking through a computing class.

There’s always been a real tension between those who espouse a “hard core” approach to teaching computing, and focus on students learning a particular programming language and those who are more interested in having students grasp computational principles.  The former approach tends to turn people off to computing, especially those in underrepresented groups, while the latter is interested in spreading computational thinking concepts more broadly as well as potentially attracting different kinds of people to the field of computer science.

A second a-ha moment came during a storytelling talk by Kevin Brooks.  As he talked about telling a story to audiences that spoke different languages, I started thinking about the way that technology and computing are a foreign language to many people.  So there’s sometimes a disconnect between what we are talking about and what our audience (kids or teachers) hear.  We have to use different tactics to make the connection.  And we also have to be sympathetic to the learning curve.  No one learns Japanese in a day.

My final a-ha moment came when Eric Klopfer started talking about games.  As someone who is a gamer and reads the literature on gaming and education, I had heard a lot of the ideas he was talking about.  To most people in the room, though, it was all new.  These ideas have been around for a long time, but they’re just barely out there and they’re certainly not filtering very well into our education system.  It struck me that it takes a very long time for ideas that come from research to get put into practice.  And sometimes that lag is seriously detrimental.  The kids are mostly already there, but they’re only there outside of school.  If we can apply these ideas in school and sooner, we might be able to better meet the kids where they are.

Notice that none of my a-ha moments had anything to do with figuring out some specific aspect of Scratch, though I did figure some of those out, too.  And I got some great ideas for how to use it in my classes.  But mostly, I learned that my thinking about education and learning applies to computing as well as it does to writing and that gives me a really strong foundation to work from.

Enhanced by Zemanta