Differential evolution was conceived as an evolutionary algorithm designed to optimize single-objective functions with continuous domains. It was motivated by the need to solve the Chebyshev Polynomial fitting problem proposed by Rainer Storn. Differential evolution algorithm is simple to program and demand low computational resources, features that make it interesting for practitioners. This chapter introduces the reader to differential evolution algorithm and to some of its variations, providing the background needed for their implementation and application to practical optimization problems. The presentation is complemented with examples and Python code.