Welcome to the Casimir Programming Course!#

This is a Casimir Research School course offered to PhD students and postdocs to learn the basics of scientific programming in Python, as well as other core skills. It primarily targets physicists, but should be suitable for researchers from other disciplines.

After running the course in person for several years, we converted it to an asynchronous format where you can make progress at your own pace while being helped by your mentor and the course team.

Why this course exists#

  • Programming, and especially programming efficiently improves research productivity and quality for an overwhelming majority of researchers

  • Good programming practices are not a common part of the physics curriculum

  • There is an accumulated evidence that intensive courses similar to this one help people to improve their software workflow.

  • While our course is strongly influenced by other existing initiatives, especially Software Carpentry, it also has a lot of adjustments (topic selection, duration, workflow) that should suit our local needs.

The learning goals of this course#

The in-person surveys of the course participants show that the prior skills vary greatly

skills of course participants

…and so do the end goals:

  • General programming (debugging, structuring code, efficiency)

  • Python (basic or advanced)

  • Data analysis

  • Hardware

  • HPC (parallel, multiple programming languages)

  • Scientific Python (plotting)

  • Shell

  • Specialized topics (machine learning, GIS)

  • Version control (+contributing to other software)

Our constraints#

  • For some of you everything will be new, for some everything will be obvious

  • A week is not enough time to learn anything in depth

The course goal#

  • Inform everyone about programming tools and practices that can help your research.

  • Provide entry-level practical skill in each of those tools and practices.

  • Give enough information for participants to continue learning on their own.

  • Provide participants an opportunity to ask questions and discuss open problems

How the course is organized#

  • The course runs in a self-paced format.

  • Participants work in teams, supported by their mentor, and the course coordinators.

  • To ensure that everyone has the same environment we provide a cloud computational environment. We use it to configure and distribute course materials, and to provide a place to run the exercises.

  • This website introduces the course topics and exercises, but the primary way to interact with the course is to use these as jupyter notebooks, execute the code, and run the exercises.

How to enroll#

To join as a mentor or course participant, follow the course instructions.

How you can help#

  • Leave feedback, contribute ideas (the course materials are here): suggest edits or open an issue if you see something that we can improve.

  • Join us in teaching your colleagues programming!