One primary goal of the Algorithms course that I am currently teaching is to teach problem-solving. That is normally done by example, going through a diverse array of algorithmic problems that come up in computer science. However, my way of teaching that has changed a little bit in recent years, with a shift to the meta-level.

Many methods I use to attack problem come without thinking. Through taking courses, reading papers, and collaborating with other researchers, I have absorbed certain ways of going about solving problems, and now I reproduce them in the hope that students will absorb them in turn. However, one of my former PhD students, Warren Schudy, systematically tried to bring out the meta-principle behind our discussions. He would be very explicit about it, reflecting aloud: "So, to no longer be stuck on this question, you are suggesting to try out some small concrete examples; that's your guiding principle" - and I would think: "Yes, of course he's right, that's what I'm doing!" Eventually I started to see the value of making explicit the guidelines that guide how we try to solve problems.

That adds a new element to my teaching: in class, I now try to not only solve the problem of the day, but also add a parenthetical comment to be more explicit about the path we took to problem-solving, the "guiding principle". It does not come naturally, since it can feel like pontificating, but it seems to have some value. Perhaps it helps demystify the "creative" steps and show that much can be achieved simply by systematically following a natural path of exploration - natural, once you have acquired enough experience to know what you're doing. I do not always remember to do it, but, following Warren's example, I try, at the end of each piece of algorithmic design or analysis, to reflect back on how we achieved it, and on the meta-tools that led us to the solution.

Sounds a bit like "la morale de cette histoire est..." (dunno if there's something equivalent in English).

ReplyDeleteWould you be willing to post them here for the benefit of other students? Thanks.

ReplyDeleteA really nice exercise for the students (maybe not for an undergrad course but possibly for students wanting grad credit or a grad course) would be to do a writeup of the techniques used to find a certain algorithm or to analyze an algorithm and then post them on a website like tricki.org

ReplyDeleteDM: yes, exactly!

ReplyDeleteAnonymous 10:45: good idea. I will try.

Anonymous 12:41: mmmm. For graduate credit, I'm already going to ask students to create wikipedia web pages. That's enough for me for this semester!

In math, this reminds me of the "we take epsilon = sqrt(1/48*n^(7/12))..." which always seemed to be pulled out the instructor's ass, frustrating me to no end. It might seem trivial (and slightly off-target) but I believe that sort of thing is usually one of the earliest examples of a "predigested" proof given to students, which give them absolutely no insight on how to tackle a problem on their own.

ReplyDeleteSo it's good to have this sort of meta-discussion with students.

It reminds me for instance of Dominique Rossin who is well-known among Masters students in Paris, for his universal guiding principle that solving ANY problem should begin with small --- but large enough --- instance. Typically, on problems with permutations, he would suggest looking at permutations of sizes up to n=4 and n=5, instead of sticking to the usual n=3 that the typical student for think of.

"It does not come naturally, since it can feel like pontificating, but it seems to have some value." I'm glad you pontificate! It seems like pontificating because you've already internalized the guiding principles. For students like me, explicitly stating the guiding principles is the best way to crystallize the new knowledge.

ReplyDelete