Giving Computer Science Students Freedom

After my post about how I stopped grading, Eric Chown, who teaches computer science at Bowdoin, said he did something similar. In upper division courses, he wrote, “All that matters is student engagement. When students are engaged . . .  my job is to stay out of their way.” I asked him for details. His reply:

Independent Study: I run a lot of them. Many are in areas that I’m not an expert in. This started out of necessity – some of our students wanted to learn things that we simply do not have in our curriculum and if they were exceptional students I knew they’d be able to learn those things on their own. Over the years I’ve come to see that all any of our students need to succeed in an independent study is a high level of motivation. I make sure they have picked a useful topic and are sufficiently motivated and have a general plan. After that I turn them loose. I meet with them once a week to see where they are. I rarely give them explicit assignments. I’m almost never disappointed by what they learn and accomplish.

Projects: I teach a Projects course. The goal of the course is engagement pure and simple. Students choose a project at the start of the term (approved by me). There are no lectures in the course nor any required reading. Course time is used for 1) sweekly short (5-10 minute) student presentations on where they are, what problems they are having, etc., 2) to meet with each other if they are working in groups, 3) to share ideas. Students hand in weekly “work logs” (which I don’t grade). As the course goes on, I encourage the students not only to present on their project, but also on the process of the project. Themes always emerge, particularly “what I expected to accomplish versus what I actually accomplished” and “how I learned to motivate myself”. At the end of the term they do traditional presentations of their projects and hand in their software and a short paper about it. Student projects have become so central to our curriculum that we now require that all majors take at least one project-centric course to graduate. Probably more than half of our upper level courses have migrated in this direction.

Mobile Computing: Last year I started teaching a course on Mobile Computing. I had zero experience in this area. My goal was to try and stay about a week ahead of the class. . . . I told them that as computer scientists they should be able to do what I was doing — figure stuff out on the fly and learn where to look to find answers. Most of the grade for the course was based on a large project (no tests and a couple of easy warm up assignments). Students absolutely didn’t care that I wasn’t an expert, they were simply thrilled to have an opportunity to work in an area they were excited about. Many have since told me that it was their favorite course at Bowdoin. My experience as a computer scientist was all the expertise that they required. I’m teaching it again this term and while I’m more of an expert now I doubt the course will be more successful. If anything, my increased expertise may be a little more threatening to them. Around the college people are amazed that I would try something like this (I suspect some folks are even offended that I would teach outside my training). It has been great and has helped energize me.

Cognitive Architecture: I base what I do in this course largely on how my advisor taught at Michigan. I assign readings for each class but never lecture. A lot of the course is about the advantages of “Active Learning” and I try to put it into practice in how I run the course. When we come to class I have the students make a list of questions inspired by the reading. Class is spent discussing those questions. As the semester goes along the choice of readings becomes more and more influenced by the particular interest of the students. I give students a choice between a project and a final. The only constraint on the project is that it should have something to do with the topics of the course and that I’d like them to connect those topics to their major (I get a lot of Neuroscience and Psych majors). Sometimes the biggest problem with the projects is that students simply get too involved. That happened this term with a group that made a robot boat based on Braitenberg’s “Vehicles” using Arduino [open-source prototyping]. Neither they nor I knew anything about Arduino ahead of time, but they had an absolute blast with it. Not only did they learn a lot more about Braitenberg’s ideas, but they learned about Arduino and even how to solder! By the end of their project I found myself reminding them that they had other classes.

RoboCup: I’m head of the Bowdoin RoboCup team. RoboCup is a worldwide competition where robots play soccer against each other. I started teaching robotics to get students interested in Computer Science. My knowledge of robotics going in was basically that one of my best friends in graduate school was a roboticist and I helped him implement some cognitive theories on a mobile robot. I told my students that RoboCup looked like fun and I didn’t see why Bowdoin couldn’t have a team (I had an NSF grant to start a robotics lab). That was in 2005. By 2007 we had won the world championship, beating teams like Carnegie Mellon. We’re still competing almost 10 years later. My best students still know more about robotics than I do. What I know is how to engage them, how to put them on tasks that suit their particular talents and how to see the big picture. I’m a huge believer in the idea of “ownership” so I absolutely give the students ownership of the team. When they make choices that I disagree with I simply make my opinion known. Sometimes I am proven right, often I am proven wrong. We are competing with the top engineering schools in the world as a dinky (1800 students) undergraduate college of liberal arts students. My students on the team (typically from 8-12 at any given time) learn way more doing RoboCup than they do in their classes. Mostly they do this in their free time. Occasionally they can work on it as part of one of my classes or an independent study. They want to learn and they do. I give them opportunity. A steady stream of them are ending up in graduate school at CMU, Georgia Tech, Michigan, etc. [When I was 8 years old, I learned the concept of college major. I asked my mother: "What did you major in?" "Extracurricular activities," she said. She spent more time on the student paper than on her classes. -- Seth]

I asked him how his approach differs from what other computer science teachers do.

Here are some differences:

1) I don’t see my job as trying to transplant my knowledge to my students. I see my job as a facilitator and guide.

2) I tell my students ahead of time in some of my courses that I’m not going to tell them everything they need to know. Instead I’m going to try and teach them what to do when they don’t have all of the knowledge they need.

3) I try to adjust what I do on the fly to the students I have (this is easier at a small school). If I can get the students to come to key material through their own means (normally projects) it will be far more meaningful to them and they will learn it much better.

4) I’m not afraid of not knowing everything. If I only teach what I know everything about, it really limits what my students can get from me.

5) Fairly open ended projects are a great way for students to learn, and they don’t have to be a time sink for me. However, even the most motivated students need “nudges.” Part of my job is to figure out (or help them figure out) what nudge any given student needs. Weekly logs, frequent short presentations, etc. seem to work well.

Computer Science lends itself well to projects. However, many or most CS courses are typically taught either through a series of small, well-defined programs, or by standard projects where everyone in the class has the same goal. Most people in the field cling tenaciously to a core of material that they feel absolutely must be taught. Sometimes I think we’re headed in a direction where half of the people teaching CS will use the same Power Point slides for their lectures (which helps explain the appeal of things like Coursera). My feeling is that if I can get a student excited about just about anything within the field they will naturally encounter the important stuff in the course of engaging their interests.

3 Responses to “Giving Computer Science Students Freedom”

  1. Ed Says:

    Thank you for posting this. This style of teaching sounds like it would do well for an online or online/ in person mix type of class structure, where the teacher would meet with the student one on one online, instead of the typical one to many power point presentation.

    Do you think that this style of teaching could happen online?

    Thanks

  2. Eric Says:

    RE: Ed.

    Yes, I think it could work online. Of course most of the interest in online learning comes from the idea of scale. I get a bit of scale in what I do in that I can do more independent studies and so forth than most professors, but that pales when compared to the kind of scaling people are excited about for things like Coursera.

  3. TomGinTX Says:

    Forgive me for stating the obvious, but this is a lot more like the actual day-to-day work that computer scientists do. Traditional courses surely have their place for teaching the basics and getting a student started, but the project-based courses sound like a great idea.