Productive Research Software Development
The workshop will take place on five Mondays !
Schedule Summary (Tentative):
Day 1: "Build an Environment for Change". On this day, we'll lay the groundwork for software developers' ability to continuously experiment and extend their code: Version control systems and Code Review. Along the way, we'll discuss how long handoff times and scatter affect productivity over the lifetime of a project or even a research group. Topics covered: The Terminal, Version Control, Source Code Repositories, Pair Programming, Code Review, and IDEs
Day 2: "Make Your Learning Accessible". Before we improve our code's behavior, we first need to understand what our code even does in the first place--a time-wasting effort that swamps projects and builds walls between colleagues. Here we'll look at how to make the code itself more readable for yourself, your collaborators, and the community at large. Tools covered: Code Project Organization Structures, Style Guides, Linting Tools, Domain-Driven Design, Pseudoprogramming, Type Annotations, Static Code Analyzers, Literate Programming, and Extreme Programming.
Day 3: "Establish a Forward Flow of Work". Our code may be readable now, but what does it actually do? On this day, we'll focus on goal-oriented activities that ensure you can apply the bulk of your time to writing only the code that is valuable to you and your team, covering the core principles of Lean management and the Agile manifesto and seeing how they work together with software development. Topics covered: Value Stream Mapping, Kanban, Test-Driven Development, Integration Testing, Behavior-Driven Development, and Workflow Managers. Special Topic: Integrating Jupyter into code and data analysis projects.
Day 4: "Increase Feedback on Your Progress". We know what we want to do, but until we've done it, how do we know if we're getting close--or even if we are getting closer at all? On this day, we'll dive more deeply into the Test-Driven Development process, building Unit Tests that give us a more granular view of our code's behavior and get us quick feedback into when we've veered off-course. Topics Covered: Concurrent Engineering, Refactoring Processes, Unit Testing, Property-Based Testing, Test Coverage, and Testable Function Design.
Day 5: "Increase Your Workflow's Scope". As projects mature, it can sometimes become easy to lose a sense of how one's effort affects the project's output. On this day, we'll ensure that our automated development workflow works end-to-end, working reliably on others' computers and generating self-consistent figures and reproducible scientific papers. Topics Covered: Domain Boundaries, Data Validation, Code Dependency Management, Containerization, Continuous Integration, and Continuous Deployment.
Learning Goals for Participants:
· New mental models for their work, from a high-level project management scale down to a minute-by-minute problem solving scale, and from the initial research stage to data collection and publication, with techniques for reducing their time to publish.
· A working knowledge of the tools available to them to write data analysis code, applications, and libraries they can feel confident about and experience using those tools together in a single workflow.
· A new understanding of how to work collaboratively with their PIs, departmental colleagues, researcher collaborators, and the international scientific community at all stages of their project.
· Solutions for integrating good scientific practices and open science into their work
When? 16.03.2020, 23.03.2020, 30.03.2020, 06.04.2020 and 20.04.2020; each 10:00-18:00
- At least 3 months of programming experience.
- A laptop with free course software pre-installed (PyCharm, Python, Git, Miniconda/Anaconda, and Docker) brought to each session
- Some familiarity with the Python programming language will be helpful, as we will be writing and managing Python code during the course, but is not required and those familiar with other languages (e.g. Matlab, R, C, Java, Julia) will find plenty of useful approaches and correlating tools to their main work, as we will be focusing on the tools and working approaches that support development, rather than the code itself.
Software Introduced: Bash, Git, Github, PyCharm, PyFlake8, Black, MyPy, Jupyter Lab, PyTest, DocTest, SnakeMake, PaperMill, Hypothesis, Pip, Conda, Docker, Singularity, and Jenkins
Please note that attending the 5 sessions is mandatory to be eligible for the 2,5 ECTS !
Sign up per email: firstname.lastname@example.org