This is a graduate course on research computing, covering techniques and methods for reliable and efficient computational programming. It includes best practices for developing software as it applies to scientific computations, common numerical techniques and packages, and aspects of high performance computing. Topics include version control, modular programming, file handling, debugging, profiling, floating point computations, linear algebra, fast Fourier transforms, solving differential equations, parallel programming and using shared compute clusters. Students are required to have some programming experience in a compiled language (Fortran, C, C++). The course uses C++ as the programming language.