I teach UN5390: Scientific Computing during the school year and it uses FOSS101: Essentials of Free and Open Source Software as a pre-requisite and 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 responsibility to learn the chosen language. Students are encouraged to use this course as a fail-safe platform to learn a programming language 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), code hygiene (clarity, readability and sustainability), 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. Sprinkled throughout the semester are discussions and examples that demonstrate the (in)efficacy of Artificial Intelligence (AI) and ChatGPT for computing endeavors. The course concludes with a 4-week long term project in line with the student’s research interests with an added emphasis on the efficiency of the written code.