# Teaching algorithms: a one-step look-ahead

### What does a one-step look-ahead for teaching discussion/recitation look like?

(And first off, what is a *one-step look-ahead*? It’s a technical term used in planning algorithms in artificial intelligence, used here to mean that although it’s hard to plan out exactly what to teach for the whole semester, what if we instead plan locally (in time) by looking at what students will need until you see them next? So, let’s plan one step ahead. In this case, since we have weekly discussion sections, this means one step = one week.)

Suppose the primary goal of discussion sections (recitations) are to prepare students for their homework and the next lecture. (The true primary goal is to make sure students learn the material, and the aforementioned is a proxy for doing so. In a well-designed class, these should be well aligned, but that won’t always be the case. [1]) “Prepare” is meant loosely and can include intuition, mathematical background, mechanics of problem solving, concrete examples and applications, visual/graphical explanations. Secondary goals of discussion sections may be to complement/supplement lecture, encourage students, gauge the class atmosphere, get some feedback on how the class is going, solidify your own knowledge of the material, practice public speaking, etc.

Then, to prepare for the next discussion, a one-step lookahead means:

– Anticipate the content of the lecture following the next discussion. This is happening in simulation because it’s not really possible to know exactly what the professor will cover, days in advance. Then, figure out what background students may likely need in advance. (On second thought, this can be pre-planned, with some coordination.)

– Go through the full homework due the following week (following Monday), in order to anticipate techniques and concepts helpful for the homework.

– Go through the discussion worksheet prepared by the course staff.

– Then, put everything together. Pick and choose from the discussion worksheet, with the selection guided by the first 2 items.

– Time permitting (though I believe this is very important), then try as much as possible to find alternative ways to present and explain the material — visually, through demonstration, through simulation, through math, through analogy, through concrete examples.

Let’s try out this policy!

[1] Thanks Shray for the feedback!

# Teaching Algorithms: Part 1

I want to write about teaching CS170 (Intro to CS Theory), but I don’t know how I feel about students reading my thoughts quiet yet, so maybe I’ll make these posts available later on. So that means that for now I can say anything. ðŸ™‚

**EDIT (2016-07-10)**: Made the post public!

Here’s what I tried today.

## Let the students know that I’m on their side

I introduced myself, told them that I was a ugrad not too long ago, almost went into industry but then got sucked back into school. I told them that this is my first time teaching at Berkeley, and I’ll try to infer how they learn best, but please tell me and give me feedback on how to help better.

## Learn my audience

This is a continued lesson from my 6.UAT class on technical communication — always know who you are speaking to. My first class is about 1/2 sophomores and the rest is split among the other class years. My second section is split evenly among sophomores, juniors, and seniors. I asked if anyone is taking the class in preparation for more theory classes — there were no definitive hand raises in either of my sections. And about 60-70% of the students are interested in being more prepared for their technical interviews through this class.

## Get them talking

At the same time that I was learning my audience, I took this as an opportunity to get them *all* participating from the very beginning. It’s fairly innocuous — all they had to do was raise their arm. And then I asked them some more easy questions: *How did you like yesterday’s lecture?* (That was the first lecture of the semester.) I got some nods. *What did you learn?* Some noted the history of the word “algorithm” (named after Al Khwarizmi) and some noted a new way to multiply numbers. *Did you enjoy the streaming algorithm example?* (Umesh started the lecture right off with a concrete streaming problem.) Students nodded and a student exclaimed that he was asked the exact question during an interview. Then, an amazing thing happened. Another student agreed. A student followed saying that he enjoyed the applications of algorithms in the first lecture. Another student agreed, several more nodded in unison. Now they are in *deep*, they’re already participating in full! ðŸ™‚

If this doesn’t sound amazing… well, it was to me. I have a stark memory of the first recitation I taught of 6.004 (“Computational Structures”) back in 2012. *It was a blank wall of stares.* Expressionless, voiceless. I vaguely recall taking *weeks* to get the students participating at the same level that my students already are here. Not only is it sort of scary, it’s also impossible to get feedback with a class that doesn’t respond.

## Let the students learn themselves

One of the other instructors brought up that even though the students *want* you to lecture at them as much as possible, it’s really best for them to be doing problems. Doing problems is what prepares them for the homework. I tried this out, and the students really taught themselves. They defined BigO notation and gave every answer and every explanation (with small exceptions). And I learned from them too. (Though to be fair, this might not be the best gauge, since the material was review of prerequisite material.)

This was not my approach when teaching 6.004. Instead, I covered a small fraction of the problems piece by piece — sometimes actively participating with me on the board, sometimes in small groups — and I spend a good chunk of the recitation storytelling. I call it storytelling, but it was basically a more interactive lecture, because my goal was to tie the super high level and abstract concepts presented in lecture to the very concrete and nitty gritty problems we were doing in recitation. I felt that it was possible to succeed in 6.004 without making the tie, but in doing so, the students may lose out on a lifetime of understanding (ok, maybe an exaggeration). I tried my best to show *why* we are doing something, rather than *how* we are doing it. I forewent most of the “recommended” problems, hoping that if the students had some *tangible* understanding of the lecture material after I tied up some loose ends, then they would be more able and engaged in tackling the remaining problems.

I can already see some opportunity for augmenting the lectures with a bit more content in recitation. Only time will tell, but I suspect that the lectures will be fairly well tied to the problems. I believe the opportunity this time around is in taking the time to make *precise* some material from lecture, instilling mathematical understanding in a bite-sized way, and perhaps filling in the gaps where the lecture glosses over motivation. Reduce the hand-waving, tie some knots. Prepare these kids for definitely rocking those interviews. Perhaps inspire them to take more theoretical and mathematical courses.

Well, I’m still on the fence for now. These approaches aren’t necessarily conflicting, but there is a trade-off in preparation time.

## Get the students comfortable..?

Too comfortable, perhaps? One of the students came up at the end and apologized for falling asleep and then asked a question. And then I learned that this is probably a tiring day for them all because it’s the day of the Spring career fair!