Towards a HEP Software Training curriculum

Idea

Training in software and computing are essential ingredients for the success of any HEP experiment. As most experiments have similar basic prerequisites (Unix shell, Python, C++, …) we want to join our efforts and create one introductory software training curriculum that serves HEP newcomers the software skills needed as they enter the field, and in parallel, instill best practices for writing software.

The curriculum is comprised of a set of standardized modules, so that students can focus on what is most relevant to them.

The modules

Basics

The UNIX Shell
A guide through the basics of the file systems and the shell.
Start learning now! Contribute!
Version controlling with git
Track code changes, undo mistakes, collaborate. This module is a must.
Start learning now! Contribute!
Programming with python
Get started with an incredibly popular programming language.
Start learning now! Contribute!
SSH
Introduction to the Secure Shell (SSH)
Status: Early development
Start learning now! Contribute!

Software Development and Deployment

Version controlling with git
Track code changes, undo mistakes, collaborate. This module is a must.
Start learning now! Contribute!
Docker
Introduction to the docker container image system
Start learning now! Watch the videos! Contribute!
Unit testing
Unit testing in python
Status: Beta testing
Start learning now! Contribute!

C++ corner

Basic Modern C++
Status: Early development
Start learning now! Contribute!
Build systems: cmake
Start learning now! Contribute!

Machine learning and other analysis tools

HEP specific tools

uproot
Reading and writing ROOT files without having to install ROOT.
Status: Beta testing
Start learning now! Contribute!

Miscellaneous

A simple analysis
A simple analysis using CMS open data
Start learning now! Watch the videos! Contribute!

Planned or in early development

ROOT
Status: Early development
Advanced git
Working with branches and more
Status: Early development
Contribute!
Distributed file systems and grid computing
Status: Early development
Parallel programming
Status: Early development
alpaka
alpaka is a header-only C++ abstraction library for accelerator development
Status: Early development
Contribute!
Workflows & reproducability
E.g. yadage and reana
Status: Early development
Documentation
sphinx, doxygen, etc.
Status: Early development
Event generation and MC
pythia, sherpa, madgraph, etc.
Status: Early development
Matplotlib for HEP
Status: Early development
Start learning now! Contribute!

Further reads