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

Beginner level

Module Description Status Authors Repo Site/Material
The Unix Shell Introduction to the unix command line/shell authors
Advanced Shell E.g. SSH        
Version controlling with git   authors
Advanced git          
Programming with python   authors
Basic C++          
Build systems: cmake   authors
Distributed file systems and grid computing          
ROOT          
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

Intermediate

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
CI/CD Continous integration and deployment with gitlab authors  

Advanced

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