My students had their first programming experience this week, and it went reasonably well. I perhaps gave too much background on programming, resulting in only a small amount of class time being devoted to have the students write code. In fact, here is an outline of the day:

- I showed them how to use codepad.org.
- I showed them if/elif/else statements in Python.
- I showed them for loops in Python.
- We created a program that would add two single-digit numbers in base six.

This took the entire class period, leaving the students almost no time to start writing a program that would add two four-digit numbers in base six.

Finishing that program was one of several ways students could get credit in the course. As I expected, some students decided to do the coding, although most did not.

I had been wondering about the worth of doing this in a class for elementary education courses. I am attempting to focus on why these algorithms work, whereas the programming seems to only help with understanding how to do the algorithms. I am still undecided for this class, although Ed Dubinsky and Robert Moses wrote an interesting article for this month’s AMS Notices (I also recommend reading Beckmann’s article and Wu’s article).

In short, Dubinsky and Moses write about APOS theory, which roughly (I am not an expert) says that students progress through several stages of understanding any sort of mathematical idea:

- Action: a student can do a particular mathematical “move,” but cannot really reflect on that move. For instance, a student could cube a given number.
- Procedure: a student can reflect on the action, and consider it abstractly. For instance, a student could imagine cubing a number without actually doing it. Now, for instance, a student might be able to think of how you one might attempt to find an inverse to cubing a number.
- Object: a student things of the former action/procedure as a “thing,” and realizes that he/she can act on it. For instance, the student could imagine taking , and transforming it by taking the derivative. The former action/process becomes more “tangible.”
- Schema: I am particularly hazy on this one, but it seems to me like a student is able to abstract the object and consider other actions and procedures that are related to it. My best guess is that the student might realize that fits into a larger category called
*functions*, and one can add/compose/differentiate this type of object.

To be sure, students do not progress through these four stages in a step-like manner; it is messier than that (it is sometimes useful to think of something as a Process, and other times it is useful to think of it as an Object). I would also welcome people to correct my inevitable misconceptions on APOS theory in the comments.

Anyway, Dubinsky and Moses wrote that computer programming can help students rapidly ascend through these four steps. Once the student has already internalized a mathematical idea into an Action, having the student write a computer program is a great help to turn that idea into a Process. Having the student code a different program that calls the first program turns that idea into an Object. “Going back and forth between object and process conceptualizations of a mathematical idea, so necessary in doing mathematics, resulted from this pedagogy almost effortlessly (Weller et al., 2003).”

This makes me think that requiring my elementary education students to code might be a good idea, since it would seem that they would definitely need to view addition, say, as a Process (rather than solely as an Action).

Comments on the programming project’s worth in my class an on APOS Theory in general are welcome.

Tags: Elementary Education, Learning Theories, Pedagogy, Python

March 5, 2011 at 2:13 am |

Thinking of teaching programming to that audience makes me shudder a little. I’ve so often experienced the pain of dealing with syntax issues in class when I want to talk about algorithms. Are they taking to it? My students will say “I get what needs to be done but I can’t keep track of the semicolons.” Sometimes I just resort to doing pseudocode on the board with them. I’m never sure if I have the right balance. With more advanced students I know they need to know the syntax eventually because I’ll require its use in future courses but that doesn’t seem to be true with the students in your course.

March 7, 2011 at 2:25 am |

Hi Andy,

I am shuddering a little as we speak. But—at the risk of bragging a bit—I was a little smart about how I tried it. The key is that I made it truly optional. This might not be smart to do in the future, but I am happy that I have an “out” for my first time teaching this.

You are correct that these students will not “need” to know how to program beyond this course (although I really think that everyone should know how to do a little bit of coding, and I told them so). Frankly, some have taken to it, and some are not giving it a chance. This is completely reasonable of them to do, since it is an optional assignment. However, I have been pleasantly surprised by the number of students who are attempting it. This is just a guess, but I would say that 10-20% of students are doing the assignment in earnest (again, these are elementary education majors who will not need to know this beyond this course).

I am hoping to start using this in most every course, although I first need to learn how to teach coding; I am a complete novice at that. It sounds like you have done it already—advice is welcome.