This book introduces the basic ideas to build discontinuous Galerkin methods and, at the same time, incorporates several recent mathematical developments. The presentation is to a large extent self-contained and is intended for graduate students and researchers in numerical analysis. The material covers a wide range of model problems, both steady and unsteady, elaborating from advection-reaction and diffusion problems up to the Navier-Stokes equations and Friedrichs' systems. Both finite element and finite volume viewpoints are exploited to convey the main ideas underlying the design of the approximation. The analysis is presented in a rigorous mathematical setting where discrete counterparts of the key properties of the continuous problem are identified. The framework encompasses fairly general meshes regarding element shapes and hanging nodes. Salient implementation issues are also addressed.