This book covers two main aspects of working with OpenFOAM: using the applications and developing and extending the library code. In the first part of the book, we chose a few utilities and applications to describe the OpenFOAM work flow. This information should provide a sufficient starting point for the reader, who can investigate his/her interests further by following the provided instructions in a similar way for another solver or application. We have also provided an often missed general overview of the interplay between different toolkit elements involved in a CFD simulation using OpenFOAM in hope to produce a top-view perspective of this complex CFD software to the reader. The second part of the book describes how one can program with the OpenFOAM library in a sustainable way using often encountered programming examples. We have tried to present the numerical background and software design of the specific programming example, together with its solution, hoping that the deeper understanding of the example will prepare the reader for other future programming tasks he or she may encounter.