A great #makered week

Last week, things really started to gel for both my 8th grade Creative Computing class and my CS II class.  On Thursday’s #makered chat, I posted this:

This is an 8th grade student going to town with a Hummingbird Kit.  The assignment was to create something physical with a Halloween theme.  And while her robot probably will only loosely be Halloween-y, she’s ready to work on this for the next few weeks.

8th Grade Student and her 3Doodler success
8th Grade Student and her 3Doodler success

Another student wanted to make a Haunted House, so she laser cut the front of a house, and then used a drill to cut out the windows and then started using the 3Doodler to enhance some of the details on the front.  She asked if this house could be a prototype for a whole city.  Um, yeah, I said, That would be awesome.  She said, oh man, this is what I’ve always wanted, to be able to do stuff like this.

Meanwhile in CS II, I’ve been trying to corral what is a pretty feisty group of students.  There are only 7 of them.  They have been bonded through their experience in CS I, and they have a tendency to want to goof off; however, this week, they finally got to work on some object-oriented programming, again with a Halloween theme.  Below are two of the projects.  My CS II class is at the end of the day, and is followed by a free period for students. Many of my CS students just stay and keep working.  It’s pretty cool.  At the end of last week, I was feeling pretty darn good about my students.  And I have more good student news to share.  Stay tuned!

 

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

Using the old to build new

Yesterday in my intro to CS class, I introduced dictionaries.  My students started on some “simple” text-based game projects before the break and when I looked them over, I decided they could all use dictionaries even though that’s not something I had planned on teaching this year.  To explain dictionaries, I went back to lists.  The idea of both is that they serve as a place to store data and often, to pull data from.  Lists store all kinds of data, but there’s no way to associate the things in the list with each other.  For you non-CS people out there, a list looks like this:

[“apples”, “oranges”, “pears”] – a list of fruits

[1, 5, “thirty”, 25] – a list of numbers plus one number written as a string

A dictionary contains keys with associated values.  It looks like this:

{“apples”: 5, “oranges”: 2, “pears”: 3, “bananas”: 0} – a dictionary with keys as names of fruit and associated values, presumably the amount we have and yes, we have no bananas.

My students were writing games where they had questions (riddles or trivia) with associated answers.  I thought it a good idea to store those as a dictionary.  They had simply written out each question with a few following lines to check if the answer was right.

So, I reviewed lists, and especially iterating through a list, so that I could then show them how to iterate through a dictionary.  It was pretty interesting how difficult it was for them to remember how to iterate through a list.  You use a loop to repeat an action, which they’ve done before, but when they’d done it before, it was not in a context where you are using a loop to save time.  So, for example, we used a loop to repeat a series of movements on our robots.  Useful, but not the assembly-line kind of looping that one usually does with a list or dictionary.

I did find that once we went through that again, showing how to loop through a dictionary was pretty straightforward.  And though students had questions as they were implementing their dictionaries, they were less confused, I think, than they had been.  So I implemented a bit of my research-based teaching methods to review old material and connect it to new material.  And it seemed to work.  And, frankly, it was kind of fun.

Enhanced by Zemanta