Introduction to set-up process
Set-up instructions for Linux
Set-up instructions for Mac OSX
Set-up instructions for Windows
What is version control and why is it needed?
Using Git when working alone
Fixing mistakes
Using GitHub
Using Git when working with others
Introduction to working collaboratively
Key concepts and levels of Git
Introduction to branches
Additional useful Git commands
Introduction to GitHub pages
Introduction to working with multiple remotes
What is rebasing and why would you do it.
Introduction to debugging with Git Bisect
Introduction to testing
How to design tests
Introduction to the PyTest framework
What is mocking and how to use it.
Using a debugger
Introduction to continuous integration
Testing example
Introduction to libraries
How to write a library
What is Argparse and how to use it
Introduction to packaging
Introduction to documentation
Introduction to software project management
Introduction to issues and issue tracking
Introduction to software licensing
Introduction to software construction
Introduction to coding conventions and why they are important
What are comments and why are they important
What is re-factoring and when should it be done
Introduction to object-oriented design
Introduction to class design
Introduction to inheritance and polymorphism
Introduction to design patterns
Introduction to advanced Python programming
What is functional programming and why is it used
Introduction to iterators and generators
Introduction to exceptions
What is operator overloading and when would you use it.
Applying operator overloading to create your own symbolic algebra system..
Introduction to metaprogramming
What is Performance programming
Exploring code performance
Introduction to using NumPy for performance
What is Cython and why would you use it
Introduction to scaling for containers and algorithms