I teach UN5390: Scientific Computing during the school year, and it requires completing a free online course – FOSS101: Essentials of Free and Open Source Software – prior to start of instruction. The students are offered an opportunity to choose a programming language of that is best suited for their research endeavors. This opportunity, however, comes with the responsbility to learn the chosen language. If not already used in research, students are encouraged to use this course as a fail-safe platform to learn a programming language that lends itself to parallelization (C, C++, FORTRAN, Julia, MATLAB, Python, R, etc.).

The course begins with an introduction to revision control system (Git and GitHub), program compilation with and without Makefile, various sources of errors, debugging and profiling techniques, and developing (semi) automated computational and visualization workflows using shell scripts. Later discussions include numerical methods, writing checkpointed programs with predictive power to solve science and engineering problems, and OpenMP-style parallel programming. The course concludes with a four-week long term project in line with the student’s research interests, and the emphasis is on the readability, clarity and efficiency of the written code.