This course will cover the basics of the finite volume method for incompressible flows on two-dimensional Cartesian grids. Topics include the discretization procedure, interpolation techniques, boundary conditions, flow visualization using ParaView, and CFD errors and uncertainty. Students will write three codes; the first code solves a pure diffusion problem, the second solves a pure convection problem, and the third solves the Navier-Stokes equations using the SIMPLE pressure-velocity coupling procedure. The Navier-Stokes solver will be used to solve the "driven cavity" problem, and a problem involving the developing flow in a channel. These three codes are also available for download to, for instance, study the solution procedure, or help in debugging a student written code. (Both Fortran and Python versions of the codes are available for students to download.) Upon completion of the course students will be familiar with the basics of the finite volume method, enabling a more effective use of a commercial CFD solver, and possess the background necessary to study more advanced CFD techniques. To get the most benefit from the course, a student should be familiar with fluid dynamics as taught at the university undergraduate level, and be comfortable working with Fortran, Python, or a comparable scientific programming language.