Ever been to the point where even little improvements require large refactoring efforts or dirty hacks? If only one had made the right choices on the way!
This course discusses programming paradigms (functional vs object oriented, imperative vs declarative programming, ...) and introduces common design patterns (reusable solutions to common problems). While theory alone is unlikely to make you a better developer, having an overview of common principles paired with the vocabulary to describe them will make it easier to come up with the right solutions.
In the exercises, we refactor various code snippets using the ideas of the lecture. Different approaches and their applicability to HEP problems are being discussed. Basic familiarity with Python is advised for the exercises.
This series is aimed at scientists with little formal training in software engineering, but veterans are always welcome to join for additional input in the discussions!