Scientists spend more and more time writing, maintaining, and debugging software. While techniques for doing this efficiently have evolved,
only few scientists have been trained to use them. As a result, instead of doing their research, they spend far too much time writing deficient code and
reinventing the wheel. In this course we will present a selection of advanced programming techniques and best practices which are standard in industry,
but especially tailored to the needs of a programming scientist. Lectures are devised to be interactive and to give the students enough time to acquire
direct hands-on experience with the materials. Students will work in pairs throughout the school and will team up to practice the newly learned skills in a
real programming project — an entertaining computer game.

We use the Python programming language for the entire course. Python works as a simple programming language for beginners, but more
importantly, it also works great in scientific simulations and data analysis. We show how clean language design, ease of extensibility, and the
great wealth of open source libraries for scientific computing and data visualization are driving Python to become a standard tool for the
programming scientist.

This school is targeted at Master or PhD students and Post-docs from all areas of science. Competence in Python or in another language such as Java,
C/C++, MATLAB, or Mathematica is absolutely required. Basic knowledge of Python and of a version control system such as git, subversion, mercurial,
or bazaar is assumed. Participants without any prior experience with Python and/or git should work through the proposed 
[[introductory_material|introductory material]] **before** the course.

We are striving hard to get a pool of students which is international and gender-balanced.  

<del>You can [[applications|apply online]].</del>

[[faculty|Preliminary faculty]] and [[faculty#organisers|organisers]].


==== Date & Location =====
**January 14-21, 2018**. [[http://neuroscience.unimelb.edu.au/|Melbourne Neuroscience Institute]], The University of Melbourne, Australia. {{:flags:au.png|Greece}}

==== Program =====
**Best Programming Practices**
  * Best practices for scientific programming
  * Version control with git and how to contribute to open source projects with GitHub
  * Best practices in data visualization

**Software Carpentry**
  * Test-driven development
  * Debugging with a debuggger
  * Profiling code

**Scientific Tools for Python**
  * Advanced NumPy

**Advanced Python**
  * Decorators
  * Context managers
  * Generators

**The Quest for Speed**
  * Writing parallel applications
  * Interfacing to C with Cython
  * Memory-bound problems and memory profiling
  * Data containers: storage and fast access to large data

**Practical Software Development**
  * Group project

Also see the [[schedule|detailed day-by-day schedule]].
==== Materials from previous years ====
See the [[archives]].

==== Sponsors ====

Organising institutions:
  * [[https://www.melbournebioinformatics.org.au|Melbourne Bioinformatics]] at the [[http://unimelb.edu.au|University of Melbourne]]
  * The [[https://www.incf.org/|International Neuroinformatics Coordinating Facility (INCF)]]
  * The [[https://www.florey.edu.au/|Florey Institute of Neuroscience & Mental Health]]
