When I last left off my series of posts about computational and algorithmic thinking, I had settled on python as a powerful, yet easy to use programming language that students could use to begin to explore computational problems.

I also identified Matter and Interactions as a wonderful template for how to go about incorporating computational thinking into a traditional course. But surely I couldn’t just take an approach from a calculus based college level text and give it to high school freshmen…could I?

In this post, I want to go into a bit of detail about what I wanted my students to be able to do with computational and algorithmic thinking.

First, I have to give incredible credit to Danny Caballero, a fifth year grad student at Georgia Tech. Danny has been instrumental in implementing M&I in the freshman Georgia Tech physics sequence, and the development of our Atlanta Area Physics Teachers Network. Danny and I have had a number of conversations about bringing the ideas from M&I, especially computational modeling down to a 9th grade physics course, and I even played around last year a bit with a couple of very interested students. The early results were great—I even had one student go on to write a program to model a solid 3x3x3 lattice of balls and springs. Still, I didn’t feel like I was bringing every student along, and the vpython programming wasn’t deeply integrated into my course, so kids were viewing it as something totally unrelated to what we were doing every day.

This summer, Danny and I got to talking and he raised the idea of how we could teach computational modeling in the way M&I does it to students starting in the 9th grade, and I mentioned that one of the chief difficulties my students have in understanding early physics is motion maps, a staple of the modeling curriculum. If you’re unfamiliar with modeling instruction (reminder to self: write an intro to modeling post sometime), it is a wonderful curriculum that teaches the students to understand scientific models, sets related of ideas (Constant Velocity, Constant Acceleration, Balanced Forces, etc) that we use to explain and make predictions about the world around us. The key question of the curriculum is helping students to recognize when a model is applicable to a given situation, and the limitations of a model. And a model is more than just a single equation, or a graph, it is a set of ideas (verbal descriptions, graphs, diagrams, and algebraic equations) that are woven tightly together to form a powerfully coherent description.

One important tool in the modeling arsenal is the the motion map. Take a strobe photo:

A strobe photograph of a dancer. When is she moving fastest/slowest?

This is a rather complicated motion, and physicists love to simplify things, so lets abstract this photo a bit and imagine the dancer as a single dot. We could represent her position as a dot along a number line, and her velocity as an arrow, like this:

A simple motion map

It should be pretty clear to see how this object is moving at a constant velocity to the right. Nevertheless, this is a diagram that is fraught with pitfalls for students. First of all, we are plotting position along the horiztontal axis, and this is just shortly after working hard to understand position vs time graphs, where position, x, is plotted along the vertical axis. And secondly, time is marked off in discrete units, rather than being plotted along a continuous axis. But at the same time, when you really understand a motion map, you have a powerful tool for describing motion.

So I mentioned to Danny that it would be great to put together a module in vpython that would take care of drawing a axis and breadcrumbs as objects move, so that you could generate dynamic motion maps, and boy, did he ever come through. Danny, along with Balachandra Suri, another grad student at Georgia Tech put together the motionmodel.py package, which takes care of making motion maps when you create object in vpython and animate them. I’ll write more of the details on how you actually use motionmodel.py later, but I first want to show you what it can do.

Did you see how you can watch the motion map be created live? And you can move and zoom around the animation to get a better sense of what’s going on. These are just the first hints of something truly awesome.

Now imagine the classic bus chase problem, the bane on 1-D kinematics problems for most students (of course, most of this is because they never solve it with a graph).

A student is running at his top speed of 6 m/s to catch a school bus, when she is just 10 meters away, the bus leaves the bus stop, accelerating at $1\frac{\textrm{m}}{\textrm{s}^2}$ Does she catch the bus?

What if you could solve the problem by doing creating a program that produced this?

Did you see how the program dropped a big orange arrow right when you catch the bus? Can you imagine going back and playing with the acceleration, velocity and starting point to figure all sorts of things like the farthest you can be from the bus initially and still catch it?

And for the record, this second program took 9 more lines of code than the previous one (which was only 22 lines in the first place). If you wanted to add a velocity or position graph, that would require only a couple more lines.

Of course, the real thinking involved is in students figuring out how you write a program to move the person a fixed distance each time interval (constant velocity), but make the distance moved by during each time interval bus increase increased by a fixed amount (constant acceleration). Can implementing this code actually teach you more about what acceleration really means?

And in my next post, I’ll get into the nitty gritty of how to do just that.