Courses

I enjoy passing on my knowledge of various technical topics and have many ideas of courses I would like to give. The currently most well-developed course is the one on Version Control with Git.

Version Control with Git

This is a complete rework of a course I once gave about Version control with Git and Subversion and focussed now only on Git.

The rough course outline includes these topics:

  • Introduction to Git and version control systems
  • Installing Git
  • Creating a first repository
  • Getting help
  • Tracking/staging/committing
  • Configuring repositories
  • General workflow
  • Getting repository information
  • Working with others
  • Using branches and tags
  • Rewriting history
  • Contributing to Open Source projects

Draft versions of the slides are available in the “Releases” section of the course’s GitHub repository.

Learning computational physics with Python

The idea here is to create a course aimed at introducing computational physics and numerical methods techniques to advanced high-school or early university-level students. It is very much in the “work in progress” phase.

The idea sprang from tutoring a very enthusiastic high-school student in physics, who wanted to know if one can learn physics by programming in Python. That’s most certainly possible (it doesn’t have to be Python, although it does the job well), hence I started thinking of topics to investigate. I ended up with more ideas than necessary, but I don’t reckon that’s a problem: more choice is better. Beyond the fun teaching aspect, this would be an interesting thing to do just for the simple pleasure of gaining a deeper understanding of these topics.

Here’s a rough outline of what I’d like to cover:

  • Programming environment setup
  • Crash course in programming basics and plotting
  • Numerical differentiation
  • Projectile motion (introduce e.g. Euler’s method)
  • Simple harmonic motion
  • Planetary motion (introduce e.g. RK4, adaptive timesteps)
  • Curve fitting (e.g. linear regression, polynomial fit)
  • Spectral analysis (FFT)
  • Pseudo-random numbers
  • Molecular dynamics
  • Chaos
  • Wave propagation
  • Schrödinger’s equation
  • Heat equation
  • Advection equation
  • Diffusion equation (introduce e.g. spectral methods)
  • Simulated annealing
  • Parallel programming

Clearly, this is a lot and is more than a single semester or maybe even a year of study. For an actual course at university, one would need to pick and choose the most appropriate topics to cover within the available time.

One idea I had was to make the course project-based. This way, it’s easier to motivate why a given numerical technique is necessary: it would be needed to solve the given physical problem.