Syllabus

Please note that these schedules are tentative and they may be modified if needed.

Week 1:
Introduction to Unix/Linux basics including basic tools for programming – editors, compilers, libraries, Makefiles, config files, ssh/scp/sftp, version control, code publication, etc.
Week 2-3:
Introduction to basic algorithm development and program structures (e.g., data types, data structures, IF, DO, and WHILE constructs, functions, subroutines, arrays, modules, etc.) common to many languages but using Fortran (90 and above) as the primary example language.
Week 4:
More advanced programming in Fortran (Fortran 90 or above), e.g. modular programming, dynamic array allocation, user typed structures, I/O, debugging, etc.
Week 5-6:
Introduction to flexible interpreted languages for interfaces using Python programming as the example.
Week 7:
Introduction to object-oriented programming concepts through compare-and-contrast of Python, C/C++ and Fortran.
Week 8:
Basics of computer architecture (chip architecture, cache, network infrastructure, file systems, etc) with a view to understanding code optimization, bottlenecks, debugging, etc.
Week 9:
Data analysis and visualization: Introduction to basic analysis and visualization tools; good practices for running codes in production mode.
Week 10:
Introduction to good software engineering practices; code validation and verification.