Towards a HEP Software Training curriculum


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

Beginner level

Module Description Status Authors Repo Site/Material
The Unix Shell Introduction to the unix command line/shell authors
SSH Introduction to the Secure Shell (SSH) α authors  
Version controlling with git   authors
Advanced git   α authors  
Programming with python   authors
HEP C++ Course   Sebastien Ponce  
Basic Modern C++   α authors
Build systems: cmake   authors
Distributed file systems and grid computing          
uproot Reading and writing ROOT files without having to install ROOT. β authors
A simple analysis A simple analysis using CMS open data authors  
Unit testing Unit testing in python β authors
Matplotlib for HEP   α authors


Module Description Status Authors Repo Site/Material
Parallel programming          
Docker Introduction to the docker container image system authors  
Workflows & reproducability E.g. yadage and reana        
Machine learning   authors  
Machine learning on GPU   authors  
CI/CD Continous integration and deployment with gitlab authors  
CI/CD github Continous integration and deployment with github actions β authors


Module Description Status Authors Repo Site/Material
Documentation sphinx, doxygen, etc.        
Event generation and MC pythia, sherpa, madgraph, etc.        
alpaka alpaka is a header-only C++ abstraction library for accelerator development α authors  

Further reads