Overview and syllabus
This course will cover a large number of topics in a somewhat superficial
manner. The main goals are to:
- Introduce a number of concepts related to machine architecture,
programming languages, etc. that necessary to understand if one plans to
write computer programs beyond simple exercises, where it is important
that they run efficiently.
- Introduce a variety of software tools that are useful to programmers
working in scientific computing.
- Gain a bit of hands on experience with these tools so that at the end
of the quarter students will be able to continue working with them and
be in a good position to learn more on their own from available
resources.
Some topics
Many topics will be covered in a non-linear fashion, jumping around between
topics to tie things together.
- Using the Virtual Machine
- Unix / Linux
- Version control systems
- Using Git and Bitbucket.
- Basic Python
- Ipython and the IPython notebook
- NumPy and Scipy
- Debugging Python
- Compiled vs. interpreted languages
- Introduction to Fortran 90
- Makefiles
- Computer architecture: CPU, memory access, cache hierachy, pipelining
- Optimizing Fortran
- BLAS and LAPACK routines
- Parallel computing
- OpenMP with Fortran
- MPI with Fortran
- Parallel Python
- Graphics and visualization
- I/O, Binary output
- Mixed language programming