I teach UN5390: Scientific Computing during the school year and it uses FOSS101: Essentials of Free and Open Source Software as a reference for using the Linux Operating System at the command line. 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. Students are encouraged to use this course as a fail-safe platform to learn a programming language that is used in their research project(s) and 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.