One of the central topics in coding theory is the study of error detection and correction, where codes are used to ensure that the correct information can be extracted from a message or storage, even if an error occurs during transmission, or a storage device is damaged. We give an overview of the background of information theory, before learning the necessary theory to understand a communication system and the structure of codes. One central property of codes is the minimum distance, which determines how many errors a code can detect and correct. We learn about some important classifications of codes, like the linear codes, which have a more systematic way of finding the minimum distance. A subclass of the linear codes is the cyclic codes, which have more effective ways of construction by using polynomials. We look further into specific cyclic codes like the BCH codes, which is constructed by choosing a defining minimum distance, the Reed-Solomon codes, which is a special case of BCH code, and the Golay codes, which are examples of perfect codes.