Software Engineering for Scientific Computing

Phil Colella, Lawrence Berkeley National Laboratory

Typically, graduate students in science and engineering (with the exception of computer science) enter graduate school with limited software skills – mainly programming in interpreted environments, such as MatLab. While these environments are quite useful for small-scale problems, they are not the best platform for building large software systems, particularly for high-performance computers. In this talk, I will give an overview of a course that Brian Van Straalen and I have developed at Berkeley intended to provide the basic software skills required to work effectively at this level. The areas that we cover in this course include: (i) Introduction to C++ class design; (ii) algorithms and data structures; (iii) the “plumbing” for large software projects, e.g. build systems, revision control, and debugging; and (iv) a smattering of information on how the hardware works. A recurring theme in this course are the seven “motifs” (Colella, 2004) that arise in scientific and engineering simulation.

Abstract Author(s): Phil Colella