INTERSECT – Research Software Engineering Training
INTERSECT aims to provide advanced software development and engineering training for intermediate and advanced computational researchers. The program targets the critical skill gap between basic programming knowledge and professional research software engineering.
Key Program Features:
- Expert-led training courses for intermediate and advanced developers
- Multi-day bootcamp targeting advanced students
- Focus on research software development best practices
- Open-source training platform for continued engagement
- Annual RSE-trainer workshops to build community and curate materials
INTERSECT Research Software Training Modules
1. Basics The module introduces fundamental principles of software design, focusing on creating high-quality, maintainable code. It covers critical concepts like technical debt, best practices for code organization, and strategies for developing robust software components. The module provides practical insights into effective coding techniques, helping participants understand how to structure code for improved readability, maintainability, and overall software quality.
2. Packaging This module explores creating Python packages from scratch, covering essential components like source code, tests, configuration files, metadata, documentation, and publication strategies, enabling researchers to effectively develop, distribute, and maintain their scientific software packages.
3. Collaborative Git
This module introduces version control and collaborative coding practices, focusing on the challenges of code sharing, branch management, pull requests, and effective Git workflows. It provides practical insights into enabling equal contribution, maintaining code versions, and implementing collaborative development strategies for research software projects.
4. Issue Tracking
This module introduces issue tracking, focusing on its importance in project management for organizing, collaborating, and tracking work. The module covers basic issue management, including creating, interacting with, and closing issues. It also explains labelling issues for better organization and filtering, as well as using issue templates to standardize issue creation.
5. Making Good PRs
The module provides a comprehensive overview of collaborative software development practices, covering the fundamentals of creating, managing, and reviewing code changes through Pull Requests. The course progresses through key topics including introduction to Pull Requests, basic implementation techniques, effective use of labels and templates, characteristics of high-quality Pull Requests, and in-depth code review strategies.
6. Licensing
This module covers the key concepts of intellectual property (IP) and software licensing, including the primary form of IP for software (copyright), the purpose of software licenses, and when copyright can be asserted. It explores the two basic categories of software licenses, the benefits of specifying a license, and the concept of open-source software, as defined by the Free Software Foundation's four freedoms. It further addresses the complexities of copyright and licensing with the rise of large language models (LLMs).
7. Code Review
This lesson focuses on the benefits of collaborative construction in software development. It explores pair programming, covering roles, its benefits, challenges, and when it's most helpful. The lesson also discusses formalized code reviews, differentiating between code read-throughs and walk-throughs, and highlights the benefits of structured reviews. Best practices for reviewing code are addressed, along with the challenges and opportunities encountered during a code review activity.
8. Building a Community
This module introduces basics of building a community around a software package. It explores the key elements of an effective and enjoyable development community, focusing on the benefits and challenges of collaborative work. It covers the importance of social aspects in building a collaborative environment and the socio-technical factors that contribute to successful teamwork.
9. Testing
This module introduces basics of systematic, automated testing. It introduces the concept of testing in scientific software development, covering topics such as the importance of testing, working with legacy code, and using test frameworks. It also explores Test Driven Development (TDD), refactoring methods for better testability, and strategies for testing large changes and interfaces.
10. CI/CD
The CI/CD module introduces Continuous Integration and Continuous Delivery/Deployment using GitHub Actions, focusing on automating code testing, integration, and deployment processes. The course covers key concepts including exit codes, YAML configuration, GitHub Actions workflow setup, Python package CI/CD implementation, multi-platform testing, and advanced topics like documentation and container deployment strategies.
11. Documentation
This module provides a comprehensive overview of software documentation. It covers the two main types of documentation—developer and user—with examples such as API documentation, installation guides, and troubleshooting manuals. The module discusses the benefits of good documentation, while also highlighting challenges such as time constraints, skill requirements, and process difficulties. It offers practical advice on creating effective documentation, addressing biases, and using tools like style guides and version control.
12. Project Management
The project management module focuses on the application of tools, techniques, and methodologies to efficiently manage and deliver projects. It covers the stages of software development, including requirements gathering, design, implementation, testing, deployment, and maintenance. The module introduces traditional approaches like the Waterfall model for well-defined projects and Agile methodologies for more dynamic, evolving requirements. It emphasizes the importance of structured management to ensure successful outcomes in complex projects.
To learn more, visit the INTERSECT Research Software Engineering Training website.
INTERESECT CURRICULUM