Toggle navigation sidebar
Toggle in-page Table of Contents
Research Software Engineering with Python
Research Software Engineering with Python
Prerequisites
Installation Instructions
Git & GitHub
Python
Text Editor
Course Contents in Jupyter
Course contents
1. Introduction to Python
1.0 Introduction to Python
1.1 Variables
1.2 Using Functions
1.3 Types
1.4 Containers
1.5 Dictionaries
1.6 Data structures
1.7 Control and Flow
1.8 Iteration
1.9 Classroom Exercises
2. Intermediate Python
2.0 Comprehensions
2.1 Functions
2.2 Using Libraries
2.3 Working with files
2.4 Getting data from the Internet
2.5 Data analysis example
2.6 Defining your own classes
2.7 Data analysis with classes
2.7 Classroom Exercises
3. Research Data in Python
3.0 Scientific Python
3.1 Field and Record Data
3.2 Structured Data
3.3 Plotting with Matplotlib
3.4 NumPy
3.5 Advanced NumPy
3.6 The Boids!
3.7 Classroom Exercises
4. Version Control
4.0 Introduction to version control
4.1 Solo work with git
4.2 Fixing mistakes
4.3 Publishing
4.4 Collaboration
4.5 Fork and Pull
4.6 Git Theory
4.7 Branches
4.8 Advanced git concepts
4.9 Publishing from GitHub
4.10 Rebasing
4.11 Debugging With git bisect
4.12 Working with multiple remotes
5. Testing
5.0 Testing
5.1 How to test
5.2 Testing frameworks
5.3 Classroom exercise: energy calculation
5.4 Mocking
5.5 Using a debugger
5.6 Continuous Integration
Recap example: Monte-Carlo
6. Software Projects
6.0 Libraries
6.1 Installing libraries
6.2 Managing Dependencies
6.3 Python outside the notebook
6.4 Packaging
6.5 Documentation
6.6 Software Project Management
6.7 Software Licensing
6.8 Managing software issues
6.9 Exercise: Packaging Troll Treasure
7. Construction and Design
7.0 Construction
7.1 Comments
7.2 Coding conventions
7.3 Linting
7.4 Refactoring
7.5 Object-Oriented Design
7.6 Class design
7.7 Design Patterns
7.8 Exercise: Refactoring The Bad Boids
8. Advanced Programming Techniques
8.0 Advanced Python Programming
8.1 Functional programming
8.2 Iterators and Generators
8.3 Exceptions
8.4 Operator overloading
8.5 Metaprogramming
8.6 Advanced operator overloading
9. Programming for Speed
9.0 Performance Programming
9.2 Optimising with NumPy
9.3.0 How to Build Cython Code
9.4 Optimising with Numba
9.5 Performance Scaling for Containers and Algorithms
10. Scientific file formats
10.0 Serialising and normalising data
10.1 Using databases
10.2 Deserialisation
10.3 Binary formats
10.4 Markup Languages
10.5 Larger datasets - beyond pandas and CSV
10.6 Processing in parallel
10.7 Geospatial data
10.x.0 (OPTIONAL): Domain specific languages
10.x.1 (OPTIONAL): Controlled Vocabularies
10.x.2 (OPTIONAL): Semantic file formats
Solutions
Exercise Solutions
Module 1
Module 02
Module 03
Module 04
Module 05
Module 06: Troll Treasure
Module 07: Bad Boids
Module 08
Module 09
Module 10
Binder
repository
open issue
suggest edit
.ipynb
.pdf
Module 09
Module 09
#