My classes involve a lot of frustration. Things don’t work and students don’t know why. Sometimes I don’t know why. I think this is productive, and important. Just the other day, I was programming something. A single case wasn’t working. I tried poking at things in my code. Still not working. I asked my husband for help. He shrugged. Finally, I threw up my hands, and said, “I give up.” Only I didn’t. I deleted almost everything and started over. I was frustrated because I knew my solution wasn’t elegant and wasn’t accounting for every possible case. But I soldiered on with my inelegant solution until I got something that worked. It was ugly, but it worked, in every case. And then, I looked at other people’s solutions, which were neater and I was in a place where I could learn from them. I needed to understand one way to solve the problem before I could understand others.
The students that do well in CS aren’t brilliant science or math geniuses. They are persistent. They learn from their mistakes. They hunt for solutions. They don’t wait for answers to come to them. And that’s what I am really trying to teach: not loops or functions or recursion. I’m teaching them to follow through, to keep going even when it seems like the end is far away and they don’t have a map to get there. The stuff my CS I students are doing have hit the place where they sometimes can’t see the end, where the order they do things matters, where what they learned before is really important. They have to get past the frustration to understanding. That is a hard journey. I hope I’m helping them get there.