On Teaching Complex Content

Flash and JavaScript are required for this feature.

Download the video from iTunes U or the Internet Archive.

ERIK DEMAINE: I mean, there are a couple of different approaches to teaching this class. One is to make it fun. I really like to make material as engaging and as accessible as possible. So, especially if you have relatively little experience in algorithms-- you've just taken 6006-- and some of these algorithms get really complicated. And they're hard to understand and it makes you wonder, how did they ever come up with that?

So I like to talk about that. In some of the lectures, I'll kind of give an idea of how they might have gotten there. It's like, oh we could start with this really simple step. It's really inefficient, but at least it solves a problem. But then we have this extra thing and this extra thing, and eventually you get to the really fast solution, so it's less of the mystery of how you got there, or how the original researchers got there.

And I also try to remind students, especially in the harder topics, that this is not easy stuff and you should think about it a little more. Do the problem sets and you'll learn it-- figure it out at a deeper level. But a lot of this material is hard, and I think being honest about that makes it more reasonable. Students don't feel bad for thinking that it's hard, because the first time you learn it, it is hard.

But the whole algorithmic way of thinking of setting up a problem-- what should the input and the output be-- and then thinking about all different solutions for how to fill in the middle I think is a really powerful perspective, and it can shape pretty much your entire life, but especially if you're doing computer science. It's a really useful way of thinking, and I've gotten lots of letters later from students where they're doing some job, some computer thing and they ran this problem and then they discover-- and then they looked back at their notes and said, oh, this is the right data structure I should use now. And they solve it, and they tell me about it. And it's kind of exciting to see years later the way of thinking and lots of the solutions and techniques you see in this class really are useful out there in the world, so it's a useful class to take.

It's a relatively hard class. The exams are challenging. We try to make them not super challenging, but it's hard, especially whenever creativity is involved. It's hard to do that live in an exam. So students may not perform super well my class, but still they get the idea that this is a way to approach problems, and they understand some of the techniques.

And over time, they can fill in whatever holes they left behind, and say, you know, it seems like a problem where dynamic programming would be really useful. It's time I really learned dynamic programming. Dynamic programming is one that we actually teach both in 006 and 046, because it's really conceptually weird. It's actually really easy once you understand it, but getting to that point of understanding is really tough.

So we spend a lot of time on it so that the ideas-- and more exposure you get to it, the clearer it will become. I think by the end of 6046, they have a pretty good idea. But if not, years later, if they come back it, I'm sure it'll be a lot easier this third time around. So a lot of these concepts are-- I mean, the ideas are actually really simple. They're just hard to shift your mind into that kind of mindset, but once you do, things become really clear. So hope is, by the end of the semester, they get there.

Free Downloads

Video


Caption

  • English-US (SRT)