Genetic programming is an optimization technique inspired by biological evolution that uses techniques like mutation, crossover, fitness functions and multiple generations to evolve programs that can solve complex problems. It works by initializing a random population of computer programs and then applying genetic operations to the fittest programs each generation to evolve increasingly better solutions over time without needing human guidance. Common applications of genetic programming include automatic programming, symbolic regression, data modeling, engineering design, game strategies and more.