| Compact Course "AI in research software: Best practices for developing and using ML models" Dr. Inga Ulusoy
The AI revolution is moving even more rapidly than the digital revolution and leads to the emergence of completely new tools and technologies that affect the scientific process. In this course, we will learn about data-based research software, tools and communities that are relevant in creating and sharing such software, and about best practices in training machine-learning models. Research software that is based on ML models requires an additional layer of best practices in the implementation, including testing of non-deterministic processes. Security aspects as well as bad examples are discussed to highlight the importance of adhering to a best practices code of conduct. | |
| Compact Course "Data Exploration with Python and Jupyter" Dr. Liam Keegan
Jupyter notebooks are a great tool for exploring and interacting with data using the Python programming language and its rich ecosystem of libraries. In this course we will cover basic usage of the Pandas library to download a dataset, explore its contents, clean up missing or invalid data, filter the data according to different criteria, and plot visualizations of the data. | |
| Compact Course "Continuous Integration with Github Actions" Dr. Dominic Kempf
Continuous Integration (CI) is one of the cornerstones of agile development processes: Before changes are included into the mainline, a number of tests is run automatically to ensure the quality of the software. In this course, we explain how this process is implemented on GitHub.com (GitHub Actions). After a general introduction, participants will work on setting up Github Actions for their own projects. The SSC is available for follow-up consultation work on the CI workflows developed during this course. | |
| Compact Course "Containers in Science: Using Docker and Singularity" Dr. Dominic Kempf
Container technologies (e.g. Docker containers) have emerged as a fundamental tool of the cloud computing era. In scientific applications, containerization is used to encapsulate the complex execution environment of research software with a number of goals in mind: Setting up user landscapes for Continuous Integration testing, ensuring reproducibility of execution environments and packaging code to run on an HPC system. The workshop involves live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Generative AI for writing (research) software" Dr. Inga Ulusoy
Generative AI is emerging as a major creative force that supports humans in content creation. Specifically trained models can support software developers with their software projects and lead to time savings and a shift in what aspects of generating software are more important on a day-to-day basis. In this course, we will learn about GitHub Copilot, the differences to ChatGPT, and how to set up and use GitHub Copilot in coding projects. Best practices in using Copilot, as well as recommendations how to use it efficiently and safely will be introduced. | |
| Compact Course "Python Best Practices" Dr. Inga Ulusoy
Python has rapidly advanced to the most popular programming language in science and research. From data analysis to simulation and preparation of publications, all can be done in Python with appropriate libraries and implementing own modules. We will discuss Python Enhancement Proposals (PEP) and how these can help you write cleaner code. Common pitfalls in Python will be explained with examples. We will demonstrate typical "bad programming" and how to code the examples in a more pythonic way. | |
| Compact Course "Introduction to Python Testing" Dr. Liam Keegan
An automated test suite makes it much easier to maintain, extend and debug your Python code. In this course we will learn how to write automated tests in Python using the pytest library. After introducing the key concepts, the majority of the course will be hands-on, writing and running tests. | |
| Compact Course "Effective Software Testing" Dr. Liam Keegan
A good test suite makes extending, maintaining and debugging a codebase both easier and faster. In this course we will look at the different kinds of tests, and understand how to write good tests. We will also cover different testing strategies, such as test-driven-design when writing new code, or acceptance testing when working with legacy code that doesn't have a good test suite. Code samples will use the Python testing framework pytest but the concepts also apply to other frameworks and languages. | |
| Compact Course "Data Exploration with Python and Jupyter" Dr. Liam Keegan
Jupyter notebooks are a great tool for exploring and interacting with data using the Python programming language and its rich ecosystem of libraries. In this course we will cover basic usage of the Pandas library to download a dataset, explore its contents, clean up missing or invalid data, filter the data according to different criteria, and plot visualizations of the data. | |
| Compact Course "AI in research software: Best practices for developing and using ML models" Dr. Inga Ulusoy
The AI revolution is moving even more rapidly than the digital revolution and leads to the emergence of completely new tools and technologies that affect the scientific process. In this course, we will learn about data-based research software, tools and communities that are relevant in creating and sharing such software, and about best practices in training machine-learning models. Research software that is based on ML models requires an additional layer of best practices in the implementation, including testing of non-deterministic processes. Security aspects as well as bad examples are discussed to highlight the importance of adhering to a best practices code of conduct. | |
| Compact Course "Generative AI for writing (research) software" Dr. Inga Ulusoy
Generative AI is emerging as a major creative force that supports humans in content creation. Specifically trained models can support software developers with their software projects and lead to time savings and a shift in what aspects of generating software are more important on a day-to-day basis. In this course, we will learn about GitHub Copilot, the differences to ChatGPT, and how to set up and use GitHub Copilot in coding projects. Best practices in using Copilot, as well as recommendations how to use it efficiently and safely will be introduced. | |
| Compact Course "Python Best Practices" Dr. Inga Ulusoy
Python has rapidly advanced to the most popular programming language in science and research. From data analysis to simulation and preparation of publications, all can be done in Python with appropriate libraries and implementing own modules. We will discuss Python Enhancement Proposals (PEP) and how these can help you write cleaner code. Common pitfalls in Python will be explained with examples. We will demonstrate typical "bad programming" and how to code the examples in a more pythonic way. | |
| Compact Course "Expert Topics in Version Control with Git" Dr. Dominic Kempf
Applying version control can be a game changer for a collaborative research software project. However, even in projects that already successfully use Git, there is often room for improvement of the employed Git workflows. This workshop explores some advanced topics that increase the participants' repertoire of Git workflows: Bisection, Worktrees, Submodules, Large File Storage and Pre-commit Hooks. Additionally, we showcase invasive methods of modifying a Git repository via Rebase. | |
| Compact Course "Intermediate Topics in Version Control with Git" Dr. Dominic Kempf
Applying version control can be a game changer for a collaborative research software project. However, even in projects that already successfully use Git, there is often room for improvement of the employed Git workflows. This workshop tries to delve into collaborative workflows using Git branches and discuss their strengths. Special emphasis is given to the resolution of merge conflicts that may be required in the process of dealing with diverging branches. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Python Packaging" Dr. Liam Keegan
In this course we will learn how to package a Python library, how to publish it on PyPI and on conda-forge, as well as look at more advanced topics like building pre-compiled wheels including c++ extensions using pybind11, and automatically publishing new releases using continuous integration and cibuildwheel. | |
22.01.2024 | Block Course "Scientific Software Development" Dr. Inga Ulusoy
In this course, you will learn how to develop scientific software in a way that enables reproducible research and sustainable software. Sustainable scientific software leaves room for further, subsequent implementations and method development, and saves time and effort in the long run; additionally, a sustainable approach follows good scientific practice through making results reproducible. This course is aimed at researchers, doctoral and master students who develop scientific software to carry out their research. |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Introduction to Python Testing" Dr. Liam Keegan
An automated test suite makes it much easier to maintain, extend and debug your Python code. In this course we will learn how to write automated tests in Python using the pytest library. After introducing the key concepts, the majority of the course will be hands-on, writing and running tests. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Python Best Practices" Dr. Inga Ulusoy
Python has rapidly advanced to the most popular programming language in science and research. From data analysis to simulation and preparation of publications, all can be done in Python with appropriate libraries and implementing own modules. We will discuss Python Enhancement Proposals (PEP) and how these can help you write cleaner code. Common pitfalls in Python will be explained with examples. We will demonstrate typical "bad programming" and how to code the examples in a more pythonic way. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "A short tour of sustainable software development" Dr. Dominic Kempf
The course will give a brief overview of best practices for the sustainable development of research software.Areas covered are e.g. version control, development workflows, licensing, documentation, software testing, CI/CD, packaging, static code analysis, clean code. The course will emphasize the importance of these topics for the development process, give opinionated tooling recommendations and share experiences. The primary goal of the course is to enable the participants to formulate a roadmap of courses and self-learning activities to further improve their software development skills. | |
28.02.2023 | Block Course "Scientific Software Development" Dr. Inga Ulusoy
In this course, you will learn how to develop scientific software in a way that enables reproducible research and sustainable software. Sustainable scientific software leaves room for further, subsequent implementations and method development, and saves time and effort in the long run; additionally, a sustainable approach follows good scientific practice through making results reproducible. This course is aimed at researchers, doctoral and master students who develop scientific software to carry out their research. |
| Compact Course "Effective Software Testing" Dr. Liam Keegan
A good test suite makes extending, maintaining and debugging a codebase both easier and faster. In this course we will look at the different kinds of tests, and understand how to write good tests. We will also cover different testing strategies, such as test-driven-design when writing new code, or acceptance testing when working with legacy code that doesn't have a good test suite. Code samples will use the Python testing framework pytest but the concepts also apply to other frameworks and languages. | |
| Compact Course "Containers in Science: Using Docker and Singularity" Dr. Dominic Kempf
Container technologies (e.g. Docker containers) have emerged as a fundamental tool of the cloud computing era. In scientific applications, containerization is used to encapsulate the complex execution environment of research software with a number of goals in mind: Setting up user landscapes for Continuous Integration testing, ensuring reproducibility of execution environments and packaging code to run on an HPC system. The workshop involves live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Python Best Practices" Dr. Inga Ulusoy
Python has rapidly advanced to the most popular programming language in science and research. From data analysis to simulation and preparation of publications, all can be done in Python with appropriate libraries and implementing own modules. We will discuss Python Enhancement Proposals (PEP) and how these can help you write cleaner code. Common pitfalls in Python will be explained with examples. We will demonstrate typical "bad programming" and how to code the examples in a more pythonic way. | |
| Compact Course "Open Source Licensing" Dr. Dominic Kempf
Software licenses set the legal terms about using and reusing software. For a software project to be usable by others, a license is absolutely required. The course will introduce popular open source licenses and discuss the differences between them. Using real world examples, we study the licensing constraints that may arise from distributing a software project including its dependencies (both for compiled and interpreted languages). Furthermore, the course gives an overview of licenses for documentation and data. This course intends to enable participants to make their own informed decisions - no legal advice can be given during the course. | |
| Compact Course "High Performance C++" Dr. Liam Keegan
In this course we will look at how the choice of algorithms, data structures and hardware influences the performance of our C++ applications. We will cover some performance best practices which are always applicable, as well as some possible optimizations for more specific scenarios. We will also discuss when not to optimize, for example sacrificing readability and maintainability for a minimal performance gain, or preventing the compiler from doing a different and possibly better optimization. Finally we will apply this knowledge to optimize example code in a series of hands-on exercises. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Data Exploration with Python and Jupyter" Dr. Liam Keegan
Jupyter notebooks are a great tool for exploring and interacting with data using the Python programming language and its rich ecosystem of libraries. In this course we will cover basic usage of the Pandas library to download a dataset, explore its contents, clean up missing or invalid data, filter the data according to different criteria, and plot visualizations of the data. | |
01.03.2022 | Block Course "Scientific Software Development" Dr. Inga Ulusoy
In this course, you will learn how to develop scientific software in a way that enables reproducible research and sustainable software. Sustainable scientific software leaves room for further, subsequent implementations and method development, and saves time and effort in the long run; additionally, a sustainable approach follows good scientific practice through making results reproducible. This course is aimed at researchers, doctoral and master students who develop scientific software to carry out their research. |
| Compact Course "Performance benchmarking C++ applications" Dr. Liam Keegan
We use C++ to get good performance, so measuring and understanding the performance characteristics of our code is vital, for example to identify bottlenecks or to determine if a change to the code actually improves the performance. Unfortunately it is also complicated. In this course we will cover three different ways to benchmark our code, and discuss the pros and cons of each method. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Containers in Science: Using Docker and Singularity" Dr. Dominic Kempf
Container technologies (e.g. Docker containers) have emerged as a fundamental tool of the cloud computing era. In scientific applications, containerization is used to encapsulate the complex execution environment of research software with a number of goals in mind: Setting up user landscapes for Continuous Integration testing, ensuring reproducibility of execution environments and packaging code to run on an HPC system. The workshop involves live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Data Exploration with Python and Jupyter" Dr. Liam Keegan
Jupyter notebooks are a great tool for exploring and interacting with data using the Python programming language and its rich ecosystem of libraries. In this course we will cover basic usage of the Pandas library to download a dataset, explore its contents, clean up missing or invalid data, filter the data according to different criteria, and plot visualizations of the data. | |
| Compact Course "Containers in Science: Using Docker and Singularity" Dr. Dominic Kempf
Container technologies (e.g. Docker containers) have emerged as a fundamental tool of the cloud computing era. In scientific applications, containerization is used to encapsulate the complex execution environment of research software with a number of goals in mind: Setting up user landscapes for Continuous Integration testing, ensuring reproducibility of execution environments and packaging code to run on an HPC system. The workshop involves live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "Version Control with Git" Dr. Dominic Kempf
Version control is the lab notebook of the digital world: it is used to keep track of what was done and to collaborate with other people. Its use is the state of the art in software development projects of all scales. However, it is not limited to software: books, papers, small data sets, and anything that changes over time or needs to be shared can and should be stored in a version control system. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |
| Compact Course "The Unix Shell" Dr. Dominic Kempf
The Unix shell is a powerful tool that allows people to do complex things with just a few keystrokes. More importantly, it helps them combine existing programs in new ways and automate repetitive tasks so they aren't typing the same things over and over again. Use of the shell is fundamental to using a wide range of other powerful tools and computing resources. The course will include hands-on live coding sessions where participants exercise the learned commands on their own computers. | |