Guided Computer Science Inquiry in Data Structures Class
Inquiry-based learning is the best practice for science education. Education activities focus on a driving question that is personally meaningful for students, like “Why is the sky blue?” or “Why is the stream by our school so acidic (or basic)?” or “What’s involved in building a house powered entirely by solar power?” Answering those questions leads to deeper learning about science. Learning sciences results support the value of this approach.
It’s hard for us to apply this idea from science education and teach an introductory computing course via inquiry, because students may not have many questions that relate to computer science when they first get started. Questions like “How do I make an app to do X?” or “How do I use Snap on my laptop?” are design and task oriented, not inquiry oriented. Answering them may not lead to deeper understanding of computer science. Our everyday experience of computing, through (hopefully) well-designed interfaces, hides away the underlying computing. We only really start to think about computing at moments of breakdown (what Heidigger called “present-at-hand”). “Why can’t I get to YouTube, even though the cable modem light is on?” and “How does a virus get on my computer, and how can it pop up windows on my screen?” It’s an interesting research project to explore what questions students have about computing when they enter our classes.
I realized this semester that I could prompt students to define questions for inquiry-based learning in a second computer science class, a data structures course. I’m teaching our Media Computation Data Structures course this semester. These students have seen under the covers and know that computing technology is programmed. I can use that to prompt them about how new things work. What I particularly like about this approach is how it gets me out of the “Tour of the Code” lecturing style.
Here’s an example. We had already created music using linked lists of MIDI phrases. I then showed them code for creating a linked list of images, then presented this output.
I asked students, “What do you want to know about how this worked?” This was the gamble for me — would they come up with questions? They did, and they were great questions. “Why are the images lined up along the bottom?” “Why can we see the background image?”
I formed the students into small groups, and assigned them one of the questions that the students had generated. I gave them 10 minutes to find the answers, and then report back. The discussion around the room was on-topic and had the students exploring the code in depth. We then went through each group to get their answers. Not every answer was great, but I could take the answer and expand upon it to reach the issues that I wanted to make sure that we highlighted. It was great — way better and more interactive than me paging through umpteen Powerpoint slides of code.
Then I showed them this output from another linked list of images.
Again, the questions that the students generated were terrific. “What data are stored in each instance such that some have positions and some are just stacked up on the bottom?” and “Why are there gaps along the bottom?”
Still later in the course, I showed them an animation, rendered from a scene graph, and I showed them the code that created the scene graph and generated the animation. Now, I asked them about both the animation code and the class hierarchy that the scene graph nodes was drawing upon. Their questions were both about the code, and about the engineering of the code — why was it decomposed in just this way?
(We didn’t finish answering these questions in a single class period, so I took pictures of the questions so that I could display them and we could return to them in the next class.)
I have really enjoyed these class sessions. I’m not lecturing about data structures — they’re learning about data structures. The students are really engaged in trying to figure out, “How does that work like that?” I’m busy in class suggesting where they should look in the code to get their questions answered. We jointly try to make sense of their questions and their answers. Frankly, I hope to never again have to show sequences of Powerpoint slides of code ever again.