Cartesian Genetic Programming is a form of genetic programming. It is increasing in popularity. It was developed by Julian Miller with Peter Thomson in 1997. In its classic form it uses a very simple integer based genetic representation of a program in the form of a directed graph. In a number of studies, it has been shown to be efficient in comparison with other GP techniques. Since then, the classical form of CGP has been enhanced in various ways by including automatically defined functions. Most recently, it has been developed by Julian Miller, Wolfgang Banzhaf and Simon Harding to include self-modification operators. This again has increased its efficiency. The tutorial will cover the basic technique, advanced developments and applications to a variety of problem domains.