The first day of classes is a problem for a computer-based course such as Developing Computer Applications. The temptation is to try to dive into working with computers, but the students haven’t received their laptops yet. (I’ve yet to figure out a system where we could just hand them over on Day 1!)
But even if they had the laptops, it might not be the right thing to just dive right in to programming and creating apps. Even in High School, it’s important to try to build community in a class and establish relationships. For me the first thing that’s important in a class is letting the students know that computer programming is a challenge (and sometimes very frustrating), but also fun and rewarding.
So I thought I’d do a fun group-based “unplugged” lesson – teaching a computer science concept without using computers. One of the building blocks of programming is the idea of an algorithm: a step-by-step procedure for accomplishing something. In order to give instructions to the computer, you need to break a task down into tiny steps and give those commands in clear, precise language. I’ve done this before with making a sandwich, but I looked for more inspiration and found a great plan by Phil Bagge that I adapted.
After the concept of algorithm was introduced by having them explain the process of long division, the students were given the following instructions:
And I explained: they were to give the SandwichBot 3000 robot (me!) step-by-step instructions to make a jam sandwich. If they did it wrong, they’d have to fix it. If they did it right, they’d get a snack for a reward. (It helped having the class just before lunch – they were hungry!) They got into teams of 4 and started working.
When two teams had finished, they came to give the “robot” their instructions. The whole class watched to see how quickly their friends would get a yummy snack.
They quickly found out that their hard work was often a failure. The brainless robot did what they told him to do, even if it didn’t make sense. He also would stop if they didn’t give instructions in clear language. “Put it down” was met with “I don’t know what ‘it’ is.” If they told the robot to pick something up and forgot to tell it to put it down, his hands got full and he couldn’t do a step. Sometimes their instructions resulted in surprising results: “press the bread down onto the plate” got a squished slice!
The best laugh was when one team instructed the robot to “scoop out jam with right hand.” Without a knife, the robot dug into the jar and held up a handful of jam! (The robot had washed his hands well with soap before the lesson!)
Each time their algorithm “crashed,” they had to go back and try it again. Eventually, their instructions were covered in cross-outs, additions, etc. The great thing about it was that eventually, every team got a plate of jam sandwiches. They all laughed, both at the robot and at their own mistakes. They gave each other encouragement and suggestions. From a social point of view, a success.
Also successful academically in a great way: they didn’t give up. They didn’t get a low score on their algorithm. They “failed” but went back to fix their work and improve it. (A buzzphrase in education: “FAIL = First Attempt In Learning.”) Eventually, they all succeeded.
When I asked the students afterwards what they’d learned, one of them said, “algorithms are hard!!” But, I asked, did they succeed? Yes, they agreed. And that’s the frustrating and wonderful part about programming. Computers are dumb machines. It’s hard to figure out the right sequence of instructions and the right language to get them to do what you want, but eventually you can and do. I’ve never had a student not be successful in building an application. Some build huge, fancy programs, while others create more simple ones …but they all succeed.
And that’s a sweet lesson to start the year!
credit: photo of bread & jam by Yemisi Ogbe from Wikimedia Commons licensed CC-BY-SA