Partial differential equations (PDEs) arise in the mathematical modeling of many real world phenomena, e.g., in material science, fluid dynamics, biomechanics, ... For the simulation of related processes these equations are typically solved approximately using numerical algorithms. A crucial requirement for the implementation of these methods is "efficiency" in various forms. On the one hand the size of the resulting problems requires "runtime efficiency", i.e., programs should run as fast as possible. On the other hand implementations should be modular, reusable, and easy to understand in order to achieve "implementations efficiency". In this lecture we will discuss how modern C++ can be used to develop modular numerical software for PDEs with fine-grained interfaces without sacrificing runtime performance. We will concentrate on DUNE, a scientific framework developed as a shared effort by several groups in Europe. DUNE has shown its flexibility and efficiency in a broad range of applications and settings, ranging from small prototype implementations to high performance computing applications.