Skip to content

Latest commit

 

History

History
121 lines (90 loc) · 2.68 KB

intro.md

File metadata and controls

121 lines (90 loc) · 2.68 KB

Introduction

Purpose

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.

Synopsis

Lesson 1

  • Why use scripting languages?
  • Python. IPython and the Jupyter notebook.
  • Programming with lists. Data structures: arrays, dictionaries, and sets.
  • Duck typing.
  • Modules.

Lesson 2

  • Collaborating around code. Version control.
  • Git. Github. Issue tracking.
  • Code review.
  • Merging.
  • Software licensing and releases.

Lesson 3

  • 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.

Lesson 4

  • 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

Lesson 5

  • Best practice in construction.
  • Comments.
  • Coding conventions.
  • Basic object-oriented python
  • Refactoring.
  • Design and development.
  • Documentation with Sphinx.

Lesson 6

  • Further object-oriented python.
  • Object oriented design.
  • Software as engineering.
  • Pragmatic use of diagram languages.
  • Requirements engineering.
  • Agile and Waterfall.
  • Functional and architectural design.

Lesson 7

  • 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.

Lesson 8

  • Performance programming
  • Numpy.
  • Container asymptotic performance performance
  • Cython and linking C to Python

Lesson 9

  • Further git
  • Rebasing
  • Branching
  • GitHub pages
  • Creating servers

Lesson 10

  • Solutions to exercises

Course processes

Prerequisites

Prior knowledge of at least one programming language, including variables, control flow, and functions.

Exercises

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.

Setup

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.