This course aims to teach a core set of established,
intermediate-level software development skills
and best practices for working as part of a team in a research environment
using Python as an example programming language
(see detailed learning objectives below).
The core set of skills we teach is not a comprehensive set of all-encompassing skills,
but a selective set of tried-and-tested collaborative development skills
that forms a firm foundation for continuing on your learning journey.
A typical learner for this course may be someone who
is working in a research environment,
needing to write some code,
has gained basic software development skills
either by self-learning or attending,
e.g., a novice Software Carpentry Python course.
They have been applying those skills in their domain of work by writing code for some time,
e.g. half a year or more.
However, their software development-related projects are now becoming larger
and are involving more researchers and other stakeholders (e.g. users), for example:
- Software is becoming more complex
and more collaborative development effort is needed to keep the software running
- Software is going further than just the small group developing and/or using the code -
there are more users and an increasing need to add new features
- ‘Technical debt’ is increasing
with demands to add new functionality
while ensuring previous development efforts remain functional and maintainable
They now need intermediate software engineering skills
to help them design more robust software code that goes
beyond a few thrown-together proof-of-concept scripts,
taking into consideration the lifecycle of software,
writing software for stakeholders,
team ethic
and applying a process to understanding, designing, building, releasing, and maintaining software.
Target Audience
This course is for you if:
- You have been writing software for a while,
which may be used by people other than yourself,
but it is currently undocumented or unstructured
- You want to learn:
- more intermediate software engineering techniques and tools
- how to collaborate with others to develop software
- how to prepare software for others to use
- You are currently comfortable with:
- basic Python programming
(though this may not be the main language you use)
and applying it to your work on a regular basis
- basic version control using Git
- command line interface (shell)
This course is not for you if:
- You have not yet started writing software
(in which case have a look at the
Software Carpentry course
or some other Python course for novices first)
- You have learned the basics of writing software but have not
applied that knowledge yet (or are unsure how to apply it) to your work.
In this case, we suggest you revisit the course
after you have been programming for at least 6 months
- You are well familiar with the
learning objectives of the course
and those of individual episodes
- The software you write is fully documented and well architected
::::::::::::::::::::::::::::::::::::: objectives
Learning Objectives
After going through this course, participants will be able to:
- Set up and use a suitable development environment
together with popular source code management infrastructure to develop software collaboratively
- Use a test framework to automate the verification of correct behaviour of code,
and employ parameterisation and continuous integration to scale and further automate code testing
- Design robust, extensible software through the application of suitable programming paradigms
and design techniques
- Understand the code review process and employ it to improve the quality of code
- Prepare and release software for reuse by others
- Manage software improvement from feedback through agile techniques
::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::: prereq
Prerequisites
Before joining this training, participants should meet the following criteria.
(You can use this short quiz to test your prerequisite knowledge.)
Git
- You are familiar with the concept of version control
- You have experience configuring Git for the first time and creating a local repository
- You have experience using Git to create and clone a repository
and add/commit changes to it and to push to/pull from a remote repository
- Optionally, you have experience comparing various versions of tracked files
or ignoring specific files
Python
- You have a basic knowledge of programming in Python
(using variables, lists, conditional statements,
functions and importing external libraries)
- You have previously written Python scripts or iPython/Jupyter notebooks
to accomplish tasks in your domain of work
Shell
- You have experience using a command line interface, such as Bash,
to navigate a UNIX-style file system and run commands with arguments
- Optionally, you have experience redirecting inputs and outputs from a command
::::::::::::::::::::::::::::::::::::::::::::::::::