This detailed introduction presents the underlying theory and describes how to design and implement practical iterative codes.