This textbook teaches finite element methods from a computational point of view. It focuses on how to develop flexible computer programs with Python, a programming language in which a combination of symbolic and numerical tools is used to achieve an explicit and practical derivation of finite element algorithms. The finite element library FEniCS is used throughout the book, but the content is provided in sufficient detail to ensure that students with less mathematical background or mixed programming-language experience will equally benefit. All program examples are available on the Internet.Preface -- Quick overview of the finite element method -- Function approximation by global functions -- Function approximation by finite elements -- Var...