About
Collaborative Scientific Programming
Overview
The course is intended to teach collaborative programming using modern tooling. After finishing the course the student should be able to write, edit, manage and use Python code written by themselves or others. The intention is not to teach any particular programming discipline, but rather cover ways of ensuring that maintainable, reusable software is written.
Prerequisites: Basic Python knowledge (for example, experience with LLM-generated code)
Duration: Approximately 60 hours of total course work (including sessions, reading and project work.)
Learning objectives
- Find, install, and use existing packages effectively
- Master version control workflows with Git
- Manage project dependencies and environments
- Package and distribute Python code
- Write maintainable, well-tested code
- Create documentation sites
Student Project
Students in small groups (2-3) work on a project based on their own research interests, that could be a package containing analysis/plotting tools for experimental data, a set of tools for calculating or simulating some relevant phenomenon, a command-line interface for some existing tools, or an interactive website show-casing some of their research etc.
Course Content
Using Existing Packages: Reading documentation, installing and using packages from PyPI and GitHub in isolated environments.
Version Control: Setting up and using git for version control, locally and with a remote repository.
Environment management: Dependency management with uv, reproducibility across machines.
Packaging & Distribution: Creating distributable packages and publishing to repositories (or PyPi).
Code Quality: Best practices in developing code intended for collaboration, testing (pytest), documentation (sphinx, mkdocs), code style (ruff), continuous integration, using LLMs.
Approach
Short lectures followed by hands-on sessions with exercises and integration of the topics covered into their projects.
Evaluation
Evaluation is based on the project they have developed, how well the covered concepts have been integrated and applied to their project. Complexity of the core code is not relevant.