Friday, May 14, 2010

Applying How We Learn to Computer Science Classes

While reading What the Best College Teachers Do by Ken Bain, I felt excited about how much the knowledge contained within could make computer science education better. Although it seems that change is very slow, I do see some professors trying very hard to improve their courses, often using the techniques described within.

I plan to write several posts over the next while that will hopefully capture the essence of what I found the most useful in this book, and how I have seen it put into practice in computer science (or imagine how it might be done). This is, of course, no substitute for reading the book, and since it's under $20, you may as well hit the link above and buy it!

So without further ado, let's get into the first chapter, What Do They Know About How We Learn. One of the main takeaways is a list of four key concepts that came up when studying America's best college professors. They represent that which transcended disciplines and were "cobbled together from their own experiences working with students." And, as some may notice, they are "conceptions of human learning that are remarkably similar to some ideas that have emerged in the research and theoretical literature on cognition, motivation, and human development."

1. Knowledge is Constructed, Not Received

This is probably the biggest point that needs to be explored by many CS educators. The thing is, it's not an easy thing to know how to help students construct their own knowledge about programming languages and algorithm analysis rather than simply tell them all the details. Sure, classes on these topics have assignments and sometimes even tutorials, but lectures almost always follow the same old formula of going through many, many Power Point slides each class. There's little interaction, and almost no thinking required by students. I'm usually pretty good at paying attention, but even I drifted away in classes like this.

I did have some professors who could help us construct our knowledge at least minimally. I remember my very first university class on Java, where I learned to program for the first time. Our professor often built applications in class step by step, encouraging us to figure out what we had to do next. I often wonder if I would have stuck with computer science had I had a different professor for that first class.

How can we take this idea of constructing knowledge even further in computer science?

2. Mental Models Change Slowly

To achieve deeper learning, students need to
(1) face a situation in which their mental model will not work (that is, will not help them explain or do something); (2) care that it does not work strongly enough to stop and grapple with the issue at hand; and (3) be able to handle the emotional trauma that sometimes accompanies challenges to longstanding beliefs.
Creating a program in class is a perfect opportunity to challenge students' mental models. Teachers can gently lead them to answer and suggest the next step based on their current mental models, follow through with the idea, and show that it doesn't work. This would be followed by an explanation/discussion on why it didn't work.

This could easily be used in algorithms classes, too - especially those that need to use probability. Our mental models of how probability works don't seem to be all that accurate in general. A short exercise to be done in small groups in class could be given, and when the answered are shared the misconceptions would hopefully arise and then be discussed.

I think one reason these kinds of techniques aren't used more during lectures is that they take time. Less material can be covered when time is spent on discussions and activities. I would suggest, though, that if the main idea can be well understood through these kinds of things, then the 'other stuff' can be easily reviewed quickly or as homework. In the end, I may not have memorized as many things in this sort of class, but I definitely understand the topic better.

3. Questions are Crucial

"Some cognitive scientists think that questions are so important that we cannot learn until the right one has been asked."

I'm not sure why so few questions were asked in most of the computer science classes I took. Was it because of that time issue mentioned above? Was it because nobody was able to synthesize the information fast or well enough to know what questions to ask by the end of the lecture? Are professors just not receptive enough to questions?

I have noticed in my first two lectures of my course Introduction to Computers for Arts and Social Sciences that students ask a lot of questions. I don't know if it's because I take the time to answer them in a way that I think will help everyone, or if arts students are just more used to asking. I do tend to conduct my lecture as one big tutorial with some slides, some activities, and some discussion, whereas most computer science courses are strictly lectures with slides. Maybe that helps.

4. Caring is Crucial

Students need to care about the material to remember it. They need to care about what the answer will be when they ask a question. This makes sense, but how do we make them care? When it comes to code, I figure you can't just go through lecture after lecture of syntax and expect anyone to care. Yet I've had classes like this. Why can't we have some examples that seem like they could be coming from the real world? Why can't we hear some personal stories of problems professors have encountered in their own careers so we know we are learning how to avoid having to the face similar issues?

A recently hired instructor in our School of Computer Science is currently revamping a couple of courses by making the material within them actually matter. I think she's doing a great job of bringing what she learned from years in industry into these courses. She'll be able to tell students why what they're learning matters because now it actually does. There are more than a few other courses that could use the same makeover, but it remains to be seen whether enough people have the will to take it on.


Buffalo said...

You may already be up on this literature (in which case what I say next is gonna sound really dumb) but if you haven't you might find checking out the proceedings of ICER and SIGCSE: the two main CS-ed oriented conferences.

There's definitely some work that's been done insofar as thinking about CS from a constructivist point of view.

These things aren't quite as full of classroom-oriented pragmatics like Bain's book. But it's definitely the go-to point if you want to know what's been discovered about how students construct their own understanding of, say, inheritance.

Gail Carmichael said...

I do know SIGCSE, but I haven't checked out ICER yet. I keep meaning to look for ideas there, but somehow keep forgetting. So this is a good reminder. ;) I suppose the only downside is that I'm not teaching computer science students, so I don't get to show them much depth from CS. Luckily, CS Unplugged activities are perfect for that purpose!

Post a Comment

Comments are moderated - please be patient while I approve yours.