This book provides a seamless approach to numerical algorithms, modern programming techniques, and parallel computing. Such concepts and tools are often taught serially across different courses and different textbooks, and hence the interconnection between them is not immediately apparent.The book includes both basic as well as advanced topics and places equal emphasis on the discretization of partial differential equations and on solvers. Some of the advanced topics include wavelets, high-order methods, non-symmetric systems, and parallelization of sparse systems.