Tentative syllabus (20 lectures)

L1 Course overview. Getting started: working with UNIX at the command line

L2 Software version control with git and Bitbucket

L3-L6 Building scientific software with Python. Working with scipy and scikits

L7-L10 Modular programming with Fortran 90. Using popular libraries; interfacing Python and Fortran with f2Py

L11 Introduction to parallel computing: methods, tools, and performance

L12-14 OpenMP for parallel programming of shared-memory computers

L15-L17 MPI for programming on distributed-memory machines such as clusters

L18 Basic computer architecture; using makefiles with multifile codes

L19-20 Parallel computing in the “real world”: cloud computing, building a cluster in the cloud, GPU computing

Good programming practice: planning, unit testing, debugging, validation – to be integrated with the above topics and the programming assignments