Professional Documents
Culture Documents
Schedule
Time: Tue/Thu, 11a12:20p
Place: McDonnell A01
Overview
This course discusses elements of software engineering, geared towards beginning
graduate students interested in scientific computing. Some previous knowledge of
numerical analysis is helpful, but not necessary.
Syllabus
The following is a tentative week-by-week outline of topics covered. It includes
references to the books listed above.
1. Motivation and boot camp
Examples of good and bad software design in scientific computing.
Brief language overview: C, C++, Fortran 90, Matlab, Python
Compilers, linkers, loaders, shared libraries
2. Unix tools and version control systems
Using the shell, bash; awk; make; job schedulers (Condor, PBS)
Version control using git
3. C and Fortran
C: structs, pointers, malloc
Fortran 90/95/03/08: modules, arrays, derived types
4. C++
Classes, inheritance
Private data and encapsulation
Templates
Overview of the Standard Template Library (STL)
5. Python; Interfaces
Python: classes, inheritance, dynamic typing
Style: writing readable code (Ch 1 of TPOP)
Programming to an interface, not an implementation (Ch 4 of TPOP)
6. Interfaces; Design patterns
Column 13 of PP
Documentation (Doxygen)
Design patterns: strategy, template method, decorator, composite, abstract factory, prototype, singleton
7. Debugging and automated testing
Debuggers (lldb)
Ch 5 and 6 in TPOP
Column 5 in PP
8. Hardware architectures
Supercomputing
Intro to GPUs/many-core architecture
9. Profiling and improving performance
Ch 7 in TPOP
2
Column 6 in PP
Column 9 in PP
10. Introduction to parallel computing
Overview of OpenMP
Overview of MPI
11. Portability
Ch 8 in TPOP
Portable data formats: ASCII vs. binary, HDF5
12. Mixing languages
Combining C/Fortran with Python/Matlab
ctypes, cython, SWIG, boost::python, f2py, mex