Every useful computer program takes some input data, performs a number of operations on that data, and outputs the results. The data that the program works with is stored in variables of various types. Different languages handle different types with different strictness. Fortran, being a strongly typed language, is quite strict about how you pass input arguments to functions and subroutines. Specifically, the data types of arguments between the procedure invocation and definition must match, or else the compiler will abort with an error message. This strong typing discipline has its pros and cons. On the one hand, it can be tedious to have to write the same procedure for multiple different data types. On the other hand, Fortran’s strong typing pushes you to write correct and robust code. Fortunately, Fortran provides a mechanism to use the same procedure name to invoke different specific procedures that operate on different data types. This mechanism is the generic procedure, which is also the main topic of this chapter.