When information is transmitted over a noisy communication channel, errors may be introduced. Detecting and correcting the errors require adding redundancy to the information sent which in turn increases the cost of transmitting the information. Coding theory searches for efficient methods to achieve error-correction without increasing the cost too much. The applications are endless: wireless communication, CD recording, data transmission from spacecrafts, packet transmission over the Internet, data transfer through modem, ... In this talk, we will work through examples of error-detection and error-correction methods. We will then provide the ultimate limit on how good a code can be: the Shannon bound.