In this course, you will move beyond programming, to learn how to construct reliable, readable, efficient research software in a collaborative environment. The emphasis is on practical techniques, tips, and technologies to effectively build and maintain complex code. This is a intensive, practical course.
- Why use scripting languages?
- Python. IPython and the Jupyter notebook.
- Programming with lists. Data structures: arrays, dictionaries, and sets.
- Duck typing.
- Modules.
- Collaborating around code. Version control.
- Git. Github. Issue tracking.
- Code review.
- Merging.
- Software licensing and releases.
- Testing.
- Unit testing and regression testing.
- Test driven design.
- Exceptions and assertions.
- Mocking.
- Automated and interactive testing.
- Build-and-test servers.
- Negative testing and defensive programming.
- Profiling and debugging.
- Coverage.
- Using libraries.
- The Python package index.
- Packaging with setuptools.
- Working with files and the OS.
- Working with the web
- Working with command line arguments
- Brief introduction to functional programming
- Best practice in construction.
- Comments.
- Coding conventions.
- Basic object-oriented python
- Refactoring.
- Design and development.
- Documentation with Sphinx.
- Further object-oriented python.
- Object oriented design.
- Software as engineering.
- Pragmatic use of diagram languages.
- Requirements engineering.
- Agile and Waterfall.
- Functional and architectural design.
- Tricks for not repeating yourself
- Iterables and generators
- Exceptions
- Functional python.
- Operator Overloading
- Map and reduce.
- Context managers and decorators.
- Metaprogramming
- IDEs and editors
- Logging.
- Performance programming
- Numpy.
- Container asymptotic performance performance
- Cython and linking C to Python
- Further git
- Rebasing
- Branching
- GitHub pages
- Creating servers
- Solutions to exercises
Prior knowledge of at least one programming language, including variables, control flow, and functions.
Examples and exercises for this course will be provided in Python.
Python will be introduced during this course, but we will assume you can already
program. That means that you may find supplementary python content useful.
You are required to bring your own laptop to the course as the classrooms we are using do not have desktop computers.
We have provided setup instructions for installing the software needed for the course on your computer.