This course is aimed at teaching a core set of established best practice software development skills for working as part of a team in a research environment (see detailed learning objectives below) using Python as an example programming language. 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 finished an undergraduate degree and, moving into academic research and needing to write some code, gained basic software development skills either by self-learning or attending, e.g., a novice Software Carpentry course (shell, Python, Git). However, their software development-related projects are now becoming more complex, larger, and 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 that just the small group developing and/or using the code - there are more users and the increasing need to add new features and support collaborations with others
- Increased ‘technical debt’ and demands to add new functionality while ensuring previous development efforts remain functional and maintainable
This course is for you if:
- You write software, which may be used by people other than yourself
- The software you write currently is 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)
- 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 for novices first)
- You are well familiar with learning objectives of episodes
- The software you write is fully documented and well architected
To attend this course you should have either previously attended a Software Carpentry workshop within the last year, or meet the following criteria. You can also test your prerequisite knowledge by taking this short quiz.
- 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
- Optionally, you have experience using Git to push to or pull from a remote repository
- Optionally, you have experience comparing various versions of tracked files or ignoring specific files
- You have basic knowledge and experience of programming in Python, for example using: variables, lists, conditional statements, functions and importing and using external libraries.
- You have previously written at least a basic Python script or an iPython/Jupyter notebook to accomplish a task
- You have experience using a command line interface (shell), such as Bash under Linux/Windows 10 or Git Bash under Windows to navigate a UNIX-style file system and run commands with arguments.
- Optionally, you have experience redirecting inputs and outputs from a command.
- know how to set up and use a number of tools and own virtual environment to develop software collaboratively in a team
- know how to set up a test framework to verify the correct behaviour of code
- be able to design and write robust software
- know how to publish and release your software