Curriculum#
Version control is an essential tool in software development. It enables the tracking of changes in the code source and the management of multiple versions. Git is a version control system that allows asynchronous development and is currently the most popular version control system.
Collaborative development is a software development approach that can help researchers organise their software projects, foster collaboration among their peers and create a community around open-source research software. Researchers involved or expecting to be involved in developing research software can benefit greatly from mastering the basics of collaborative development.
Prerequisites#
Knowledge and experience in using the command-line interface (CLI) with Unix Shell to perform the following tasks:
to navigate and visualise the content of directories (folders);
to create, copy, move and delete files and directories;
to edit files with terminal-based text editors (such as Nano, vim, emacs, etc);
to visualise hidden files and directories;
to redirect and append a command output to a file.
Tools and Materials#
Unix Shell.
Git.
GitHub account or account on a similar platform.
A laptop with administrative privileges running MacOS, Linux or Windows.
Course Units#
This course is organised into lessons, episodes and topics. The course consists of Lessons. Each Lesson is divided into Episodes and then into Topics. The order in which lessons, episodes and topic is organised is the result of extensive discussions on the best way to deliver the course to an audience with little to intermediate previous experience and knowledge and the experience gathered from providing the course to two groups of mostly PhD candidates.
Learning Objectives:
Understand the basics of version control.
Use Git to create repositories and commit changes.
Apply Git operations to track, reverse and delete changes in working documents.
Organise tracked changes in the Git history.
Topics
Episode |
Topic |
---|---|
1.1 |
Git repositories for version control |
Introduction to Git |
|
Git command syntax and getting help |
|
Creating an empty repository |
|
1.2 |
Tracking changes in working documents |
Tracking changes with the index |
|
Not tracking and stop tracking |
|
Undoing changes with the index |
|
Deleting and renaming tracked files and directories |
|
1.3 |
Organising tracked changes in a history |
Committing changes with a configured identity and a message |
|
Inspecting changes using the history |
|
Undoing changes with the history |
|
Marking the history using tags |
Learning Objectives:
Understand the concept of branches in Git repositories.
Apply Git operations to create and merge branches in a local Git repository.
Understand the concepts of bare and remote Git repositories.
Clone and push changes to remote Gir repositories.
Synchronise changes between local and remote Git repositories.
Topics
Episode |
Topic |
---|---|
2.1 |
Branching |
— |
Create, rename, change, and delete branches |
— |
Develop and compare branches |
— |
Visualise and merge branches and resolve conflicts |
2.2 |
Operations with remotes |
— |
Create a bare repositories |
— |
Cloning and pushing to upstreams |
— |
Syncing changes between repositories |
Learning Objectives:
Collaborate on software projects using one of the Git repository platforms such as GitHub.
Understand the principles of managing research software projects.
Organise a software development team by assigning roles and responsibilities.
Contribute to the development of research software using a collaborative approach.
Understand the difference between centralised and shared collaborative workflow and when to use them.
Contribute to open or close software projects using features such as issues, code changes, and pull/merge requests.
Topics
Episode |
Topic |
---|---|
3.1 |
Collaborative Platforms |
— |
Connecting to code repositories |
— |
Exploring the GitHub GUI |
— |
Collaborating |
3.2 |
Collaborative Development for Research Software |
— |
Introduction to collaboration in software projects |
— |
Managing research software projects |
— |
Organising research teams for collaborative development |
3.3 |
Collaborative Workflows |
— |
Documenting issues |
— |
Centralise workflow: branching |
— |
Pull requests |
— |
Shared workflow: forking |
Learning Objectives:
Understand the importance of contribution guidelines and best practices to manage collaboration in research software projects.
Organise a software team independently to work on activities related to collaborative software development.
Understand the impact of code reviews and best practices on software quality.
Perform code reviews as part of a research software team.
Apply best practices when conducting code reviews.
Describe best practices related to licensing, citation, semantic versioning, and releases or software.
Topics
Episode |
Topic |
---|---|
4.1 |
Managing collaboration |
— |
Code Reviews |
— |
Contributing Guidelines |
4.2 |
Licensing and Citation |
— |
Open Source Licenses |
— |
Software Citation |
4.3 |
Releasing Software |
— |
Semantic Versioning |
— |
Software Releases |