This lesson is being piloted (Beta version)
If you teach this lesson, please tell the authors and provide feedback by opening an issue in the source repository

Oops! We cannot find that page.

Our apologies!

We cannot seem to find the page you are looking for. Try going back to the previous page or navigate to any other page using the navigation bar above or the schedule below. If you got here by clicking on a link in the lesson, please report this link to the lesson developers.

Schedule

Setup Download and setup software required for the course
00:00 Setting the Scene What are we teaching in this course?
What motivated the selection of topics covered in the course?
Section 1 00:00 Section 1: Setting Up Environment For Collaborative Code Development What tools are needed to collaborate on code development effectively?
00:10 Introduction to Our Software Project What is the design architecture of our example software project?
Why is splitting code into smaller functional units (modules) good when designing software?
00:40 Virtual Environments For Software Development What are virtual environments in software development and why you should use them?
How can we manage Python virtual environments and external (third-party) libraries?
01:10 Integrated Software Development Environments What are Integrated Development Environments (IDEs)?
What are the advantages of using IDEs for software development?
01:45 Software Development Using Git and GitHub What are Git branches and why are they useful for code development?
What are some best practices when developing software collaboratively using Git?
02:20 Python Code Style Conventions Why should you follow software code style conventions?
Who is setting code style conventions?
What code style conventions exist for Python?
03:00 Verifying Code Style Using Linters What tools can help with maintaining a consistent code style?
How can we automate code style checking?
03:20 Section end
Section 2 00:00 Section 2: Ensuring Correctness of Software at Scale What should we do to ensure our code is correct?
00:05 Automatically Testing Software Does the code we develop work the way it should do?
Can we (and others) verify these assertions for themselves?
To what extent are we confident of the accuracy of results that are generated by code and appear in publications?
00:50 Scaling Up Unit Testing How can we make it easier to write lots of tests?
How can we know how much of our code is being tested?
01:05 Continuous Integration for Automated Testing How can I automate the testing of my repository’s code in a way that scales well?
What can I do to make testing across multiple platforms easier?
01:50 Diagnosing Issues and Improving Robustness Once we know our program has errors, how can we locate them in the code?
How can we make our programs more resilient to failure?
02:35 Section end
Section 3 00:00 Section 3: Software Development as a Process How can we design and write ‘good’ software that meets its goals and requirements?
00:05 Software Requirements Where do we start when beginning a new software project?
How can we capture and organise what is required for software to function as intended?
00:50 Software Architecture and Design What should we consider when designing software?
How can we make sure the components of our software are reusable?
01:25 Programming Paradigms How does the structure of a problem affect the structure of our code?
How can we use common software paradigms to improve the quality of our software?
01:35 Functional Programming What is functional programming?
Which situations/problems is functional programming well suited for?
02:45 Object Oriented Programming How can we use code to describe the structure of data?
How should the relationships between structures be described?
03:50 Architecture Revisited: Extending Software How can we extend our software within the constraints of the MVC architecture?
04:05 Section end
Section 4 00:00 Section 4: Collaborative Software Development for Reuse What practices help us develop software collaboratively that will make it easier for us and others to further develop and reuse it?
00:05 Developing Software In a Team: Code Review How do we develop software in a team?
What is code review and how it can improve the quality of code?
01:05 Preparing Software for Reuse and Release What can we do to make our programs reusable by others?
How should we document and license our code?
01:55 Packaging Code for Release and Distribution How do we prepare our code for sharing as a Python package?
How do we release our project for other people to install and reuse?
02:15 Section end
Section 5 00:00 Section 5: Managing and Improving Software Over Its Lifetime How do we manage the process of developing and improving our software?
How do we ensure we reuse other people’s code while maintaining the sustainability of our own software?
00:05 Managing a Collaborative Software Project How can we keep track of identified issues and the list of tasks the team has to do?
How can we communicate within a team on code-related issues and share responsibilities?
How can we plan, prioritise and manage tasks for future development?
00:40 Assessing Software for Suitability and Improvement What makes good code actually good?
What should we look for when selecting software to reuse?
01:25 Software Improvement Through Feedback How should we handle feedback on our software?
How, and to what extent, should we provide support to our users?
02:35 Section end
00:00 Wrap-up Looking back at what was covered and how different pieces fit together
Where are some advanced topics and further reading available?
00:15 Finish

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.