The last course that I taught at UFV before taking a job at UBC was an online Computation Physics course. I previously posted the mini-project videos from when I ran the course in the fall and you can check that previous post to learn more about the context of these mini-projects. The overall level of creativity seems like it was a bit lower this time than last and that might be in part due to the online nature of the course, where it was in person the last time the course ran. Last time, people would show up to the computer lab and see what others were working on and the stakes would become raised. I think if I did this type of course online again, I would get people to submit regular progress videos so that there was the virtual equivalent of people showing up in the lab and feeling the stakes be raised.
This past year I taught two sections (fall and summer) of Computational Physics at UFV, which is quite a rare thing to happen at a school where we typically run 3rd and 4th year courses every other year. The course was structured so that students would get some initial exposure to both Python and Mathematica for the purposes of physics-related computational tasks, and then as the course went on they would be given more and more opportunities to choose between the two platforms when completing a task. This post looks at the choices made by the students on a per task basis and a per student basis. From a total of 297 choices, they chose Mathematica 62.6 ± 2.8% (standard error) of the time. Two things to note. First, there is a small additional bias toward Mathematica because two of the tasks are more Mathematica-friendly and only one of the tasks is more Python-friendly, as will be discussed. Second, there were students coming into the course with some previous experience using Mathematica or a strong computing background in Java or C++ and those students usually gravitated toward Mathematica or Python, respectively. But some students did the opposite and took advantage of the opportunity to become much more familiar with a new-to-them platform and tried to do as much of their work as possible using the new platform.
Task by task comparison
The general format of the course is that, for the first three weeks, the students are given very similar tasks that they must complete using Python and Mathematica. Examples include importing data and manipulating the resulting arrays/lists to do some plotting, and basic iterative (for/do) loops. Each of those weeks there is a third task (1.3 and 2.3 in Figure 1), where they build on those initial tasks and can choose to use either Python or Mathematica. In subsequent weeks, being forced to use both platforms goes away and they can choose which platform to use.
Figure 1 shows their choices for those tasks in which they could choose. In week 3 they learn how to do animations using the Euler-Kromer method in Mathematica and using VPython. Although Mathematica works wonders with animations when using NDSolve, it is really clunky for Euler-Kromer-based animations. Task 4.1 is a mini-project (examples) where they animate a collision and since they have only learned how to do this type of thing using Euler-Kromer at this point, VPython is the much friendlier platform to use for the mini-project. But as you can see in the third column in Figure 1, some students were already quite set on using Mathematica. Conversely, for tasks 8.2 and 8.3, Mathematica is the much more pleasant platform to be using and you can see that only a few diehards stuck to Python for those ones.
Student by student comparison
Figure 2 shows the breakdown of these choices by student or group. For those seven students that only used Python by choice once, it was for the mini-project. And the two students that only used Mathematica once used it for the Linear Algebra exercises.
After the course was completed, I asked the students for some feedback on various aspects of the course and one of the questions I asked was
How did you find that the mix of Mathematica and Python worked in this course?
Approximately half of the students submitted feedback and their responses were as follows
I would have preferred more emphasis on Mathematica 1 14% I would have preferred more emphasis on Python 0 0% The mix worked well 6 86%
And their comments
- Kinda hard to choose one of the above choices. I felt like I wish I could’ve done more stuff in python but I was happy with how proficient I became at using Mathematica. So I think the mix worked well, though I kinda wish I explored python a bit more.
- I think it was very valuable to see the strengths and weaknesses of both Mathematica and Python as well as to get familiar with both of them.
- It was cool to see things done in two languages. I’m sure that people less enthusiastic about programming would probably have preferred one language, but I thought it was good.
- Doing both to start followed by allowing us to pick a preferred system was great.
I ended up being quite happy with how the mix worked. I learned a ton in the process because I came in being only mildly proficient with each platform. I was also really happy to have the students come out of the course seeing Python as a viable alternative to Mathematica for a wide range of scientific computing tasks, and conversely getting to see some places where Mathematica really excels.
This past fall I had a revelation which I have yet to harness, but it is hiding out in my brain waiting to be incorporated into future courses. In two of my courses, I had the students work on mini-projects. This was the first time I had used mini-projects in a course and I was delighted with how independent the students were as compared to an overly prescribed task and I was also delighted with the quality of their work as compared to work from the regular prescribed tasks. Later in this post I have shared some videos of the comp-phys mini-projects, but I want to discuss a few things first.
In my digital electronics labs course they were asked to take the input from an analog sensor, apply some electronic decision-making to this input and provide some digital output related to the input. An example is to use a photoresistor to monitor room brightness and use 3 different colours of LED to provide feedback related to the room brightness: a red LED is lit if the room is dark, a yellow LED is lit if the room is of “standard” brightness and a green LED is lit if the room is extremely bright.
In my comp-phys course they were asked to make a collision simulation using Mathematica or Python where there has to be at least 3 different parameters which can be manipulated by the user (e.g., mass, velocity, coefficient of restitution, type of object) and at least one challenging piece of physics in the simulation (e.g., rolling friction, coefficient of restitution which varies between 0 and 1). Examples ideas that I provided included the ballistic pendulum or a 2D collision where you have to worry about the angle of attack.
In both cases, the task was designed to be something which should take approximately one week of the regular time that they are expected to put into the course. In both cases I had some small-in-scope expectations related to the documentation/presentation of the mini-project. For the digital mini-project, I asked them to submit a complete circuit diagram and a brief video of them walking me through how the mini-project works. For the comp-phys mini-project, I asked for well-documented code and a brief document which highlighted the physics being simulated and explained how it was implemented in the code.
Before I share the comp-phys mini-projects from the fall, I want to share an “in no particular order” list of things that I liked about the mini-projects above what I would see from a regular prescribed task or series of tasks:
- The students seemed much more willing to take on larger challenges with less support.
- The students were provided with the opportunity to bring some creativity into their work. There seems to be very few of these opportunities in most physics programs.
- The quality of student work was consistently higher than usual and competition played a small role in this. With the comp-phys mini-projects, students would show up to class and see what others had done and decide they had to step up their game by adding more bells and whistles than they had originally intended.
- The students had a lot more ownership of the learning task.
I suspect that Andy has seen a lot of these benefits since switching to SBG. A lot of the student submissions for standards that I have seen from his courses seem to involve some creativity and students taking on larger challenges that would normally be expected. The scope of those standards tends to be smaller than the mini-projects I am talking about here, but my experience with mini-projects certainly helps me appreciate even more how powerful SBG can be in terms of giving the students some choice in how they show their proficiency.
Below is a playlist of no-audio videos of the 10 mini-projects from the comp-phys course. Each of them is in the neighborhood of 30 seconds long of me playing around with the various controls and then running the simulation one or two times. Some of them were done by groups. They’re pretty tiny in the embedded player so I would suggest going full-screen.