Category:Pragmatic Programming

=Rationale=

"Pragmatic Programming" is a course which was designed for new postgraduate students postdocs and members of staff alike.

It is designed to address two key issues:


 * The first pertains to the word 'science' and the key tenet of reproducibility. A well engineered model will be robust to a change of hardware or compiler.  Too often, however, we find that running a model developed by one research group on the systems of another yields different results.  How much are we to trust results which we cannot replicate?  Not to mention the time wasted trying to track down the cause of the discrepancy.  This considerations carry particular weight when model results are used to inform environmental policy in the face of climate change.


 * The second reason is that we simply cannot bear the cost of an ill-considered approach to model development. Time is money and grappling with poorly engineered, or simply un-designed models wastes huge amounts of time.  One science experiment is often a slight variant upon another.  Well engineered code can be quickly adapted for a following experiment.  However, a change to Heath Robinson style creations which we often witness can present an impasse which requires huge efforts to overcome.  Imagine this situation repeated hundreds of times over and a sobering waste of resources comes to mind.  And this is before we contemplate the cost of tracking down bugs.

=Course content=

Foundations

 * Linux1: Linux for beginners
 * Linux2: More advanced Linux
 * Linux3: Starting administration

languages

 * Starting Python
 * Starting MATLAB
 * Starting R
 * Fortran1: Fortran for beginners
 * Fortran2: Intermediate Fortran
 * StartingC: C for beginners
 * CtoC++: Progressing from C to C++
 * Polyglot: Mixed language programming

Tools

 * Subversion: The Subversion version control system
 * Make: Project building using Make

Topics

 * Working with data
 * Performance Analysis
 * Debugging
 * Parallel: Parallel programming using OpenMP
 * Numerical methods for solving PDEs