  We describe a method of automatic feedback provision for students learning
programming and computational methods in Python. We have implemented, used and
refined this system since 2009 for growing student numbers, and summarise the
design and experience of using it. The core idea is to use a unit testing
framework: the teacher creates a set of unit tests, and the student code is
tested by running these tests. With our implementation, students typically
submit work for assessment, and receive feedback by email within a few minutes
after submission. The choice of tests and the reporting back to the student is
chosen to optimise the educational value for the students. The system very
significantly reduces the staff time required to establish whether a student's
solution is correct, and shifts the emphasis of computing laboratory student
contact time from assessing correctness to providing guidance. The self-paced
nature of the automatic feedback provision supports a student-centred learning
approach. Students can re-submit their work repeatedly and iteratively improve
their solution, and enjoy using the system. We include an evaluation of the
system and data from using it in a class of 425 students.
