I’m looking for feedback on my computational physics coursePosted: June 28, 2012
This will be my first course in which I use some flavour of standards-based grading. This will also be the first time I have taught a computational physics course (or more accurately a computational thinking for physicists course). I do have some experience helping students develop some computational thinking skills from my Advanced Lab course, but I have never taught a full course dedicated to this topic. Fun!
The idea is that I will be getting them to work in Python and Mathematica in parallel. My main purpose behind this is to help the students see the platform-agnostic computational thinking which underlies their their computational tasks. A side benefit is that I can help Python and Mathematica put aside their differences and work toward a common goal.
This course will be based around a weekly cycle of
- Basic tasks, to be completed in both the Mathematica and Python computing environments; and
- Intermediate and advanced tasks, to be completed using either of the computing environments.
The grading part of SBG
Students will earn marks for each of the content standards and their final grade will come from points earned by demonstrating appropriate mastery of these standards. I will give the students example tasks that correlate to the standards, but the students will always have the option of performing any computational task that they wish that shows appropriate mastery of the standards.
Approximately 2/3rds of the way through the course, the students will start working on a project which models a complex physical system. I have two standards associated with this project (a physics one and a communication one) and I am planning to either weight these standards more heavily than the others or make them into a set of more fine-grained standards. I really haven’t decided on this.
Assessing an individual standard
I plan to assess each standard on a 0-4 scale. I’m not in love with my use of the term “completed” below when discussing tasks, but the idea is that the most important thing to me is that their programs do exactly what they are meant to do.
I think that I will be allowing students to partner up which means that I need a mechanism to assess the individual beyond just a working (and properly commented) program. I think that the individual assessment will be for them to orally run me through their properly working program. Students will be given the option of submitting screencasts to do this, but not all students will have access to a computer that has both a mic and Mathematica so I will need to keep the in-person explanations as a method.
Here’s a rough outline of how I plan to assess an individual standard, where each
- 4 – Exceeds expectations (student must make the case that they have exceeded expectations or have successfully completed an advanced task)
- 3 – Meets expectations (student has completed the relevant intermediate tasks or otherwise demonstrated intermediate-level mastery in either environment)
- 2 – Approaches expectations (student has completed the relevant basic tasks or otherwise demonstrated basic-level mastery in both environments)
- 1 – Doesn’t meet expectations (student has completed the relevant basic task or otherwise demonstrated basic-level mastery in one of the environments)
- 0 – Not yet assessed
- Environment is the general term to describe either Mathematica or Python.
- Program is the general term to describe a Python program/script or a Mathematica notebook.
- To get a 3 or 4 you need to have shown proficiency at the 2 level (basic) for both environments. If basic proficiency is only shown for one environment, the score on that standard is reduced by 1.
- To be eligible for reassessments, a 1 must be earned on a given standard within the first two weeks of the standard being opened.
- Right now the connections to physics are not built in, but that is in the long-term goals for the course.
Very loose weekly plans
We will spend roughly one week on each of the following broad themes.
- Introduction to the environment (functions, variable types)
- Iteration basics and animation (introductory modeling: similar to the early Matter and Interactions VPython stuff)
- File input/output, basics array manipulation and case structures
- Advanced list/array operations and manipulation
- Data visualization and plotting (histograms, scatter-plots, bar charts, error bars, etc)
- Data analysis (basic statistical analyses, fitting)
- Solving complex algebraic equations, integration and differentiation
- Solving differential equations
After the students have started working on their projects we will spend less than half of our class time working on non-project topics.
- Introduction to the physics modeling project
- Monte Carlo methods
- Numerical methods
- Linear algebra
These standards are based on a collection of computational physics learning goals that were put together by Andy Rundquist, Danny Caballero and Phil Wagner. I then went around to all the faculty in my own department and asked them what skills they would like to see the students develop as part of this course and folded the common ones in.
There are some standards marked as “[ungraded]”. The idea with these is that they are things which do not seem to be worth assessing for one reason or another, but are things that I still want to highlight for the students as being important.
Onto the standards…
- Environment fundamentals
- [ungraded] I can use online and built-in help resources
- Computer algebra fundamentals
- I can represent and perform common operations with complex numbers and vectors.
- I can use built-in integration and differentiation functions. This includes using assumptions for integration.
- I can access mathematical and physical constants or define these constants globally when not available.
- I can solve algebraic equations. This includes simplifying algebraic results and using a root finder. I can use graphical or other techniques to set appropriate neighborhoods for the root finder.
- Programming fundamentals
- [ungraded] I can assign and clear variables.
- I can write and use robust functions. The important characteristics of a robust function are (1) that they need no access to parameters outside of those which they were passed; (2) they are written such that they can easily be copied into any script or notebook and be used as intended; and (3) they can return information in the form of single parameters, vectors, arrays or other useful objects.
- I can use at least two different iteration methods to accomplish the same task.
- I can use case structures.
- Arrays and lists
- I can manipulate and slice arrays/lists. Slicing an array means to pick out columns or rows from larger arrays. Manipulation of an array includes transposing the array, replacing elements, and adding columns/rows to existing arrays
- [The wording needs work on this one] I can operate on entire arrays/lists instead of having to operate on the individual elements of the array/list.
- Numerical techniques
- I can write my own code (not call existing functions) to perform numerical integration with varying levels of precision (Trapezoidal rule, Simpson rule)
- Solving differential equations
- I can solve ODEs (1st Order, 2nd Order and Coupled) analytically. I can determine if an analytic solution exists.
- I can solve ODEs numerically. I can set initial conditions and the domain of the solution.
- I can solve a Partial Differential Equation and specify the boundary conditions appropriately.
- Data manipulation, input and output
- I can import data from a text file which has a standard format (e.g., comma-separated or tab-separated values).
- I can export data to a text file which has a standard format.
- I can filter and sort data.
- Plotting data, quantities and functions
- I can plot 1D and 2D continuous functions and discrete data. This includes being able to superimpose multiple plots on the same canvas (e.g., visual comparisons between data and models).
- I can use graphical solutions to solve problems, such as simultaneous equations problems.
- I can modify the important parameters needed to make a graph “nice”. This includes setting axis limits, adding axis labels, changing line or point styles, making semi-log and log-log plots, plotting error bars.
- I can create and interpret 2D, 3D, and density/image/false-colour plots.
- I can create vector-field plots.
- I can plot solutions to ODEs and PDEs.
- Data Analysis
- I can compute the average, standard deviation, median, etc., of a data set.
- I can fit a model (function) to data using weighted and unweighted chi-square minimization. I can extract the best fit parameters and their errors. I can use reduced chi-square and the scatter of the residuals to evaluate the “goodness of fit”.
- I can perform a Fast Fourier Transform (FFT). This includes being able to account for the Nyquist frequency, normalization of the FFT, converting a FFT into a power spectrum or spectral density and performing an inverse FFT.
- Monte-Carlo methods
- I can use Monte-Carlo methods to model systems which involve random processes.
- I can use Monte-Carlo methods to perform error propagation.
- I can use Monte-Carlo methods to perform integration
- I can animate a physical system.
- Linear algebra
- I can perform typical matrix operations such as addition, multiplication, transposition, etc.
- I can find eigenvalues and eigenvectors.
- I can perform matrix decomposition and reduction
- Mathematica-specific standards
- [ungraded] The “/.” command.
- I can use the Manipulate command.
- I can use patterns as part of recursion and case.
- Documentation (Portfolio-based: the student must choose and submit their three best examples for each documentation standard)
- I can document the use of a function. This is specific to only the details of what goes in and out of the function, not the nuts and bolts of what the function does.
- I can use sectioning and big-picture documentation to communicate the overall use of a program as well highlighting and describing the purpose of the major sections of the program.
- I can use documentation to clearly explain how a complex chunk of code (such as a function) works.
- Project [these are to be expanded into multiple or more heavily weighted standards]
- I can model a complicated physical system.
- I can write an effective project report using LaTeX.
Some issues with the above standards
- Some of the linear algebra stuff overlaps with some of the computer algebra stuff (vectors and matrices).
- I would like the standards to be similar in scope to each other, but they are nowhere near that right now.
The feedback I am looking for
I would love to hear any and all feedback you might have, either in the comments below, or you can comment on a google-docs version of this post that I made publicly commentable. Some specific things I have in mind are…
What are the most important or least important standards on the list? If you have any opinions on which ones seem less essential or which ones seem absolutely essential, I would love to hear about it.
How can I improve my proposed assessment of the standards? Do you have any suggestions for alternate ways of assessing the standards at the individual level for work done by a group in this context?
Not this round
I have a very heavy teaching load in the fall (3 new-to-me upper-division courses) so I am trying to figure out appropriately sized chunks of ambition for each. I have lots of ideas for each course, but there is no way that I am going to find the time to do a decent job of everything I have in mind. With that in mind, you will notice that there is no emphasis on sense-making or interpretation in the standards or in the way the standards are assessed. I think Danny Caballero and colleagues are doing some fantastic work with this at CU, and I really want to fold these thing into the course in the future, but for this round these are going to have to be things that I bring up repeatedly in class, but don’t explicitly build into the course. Baby steps Ives. Baby steps.