This book will present an introduction to the mathematical aspects of the theory of error-correcting codes. This theory is applied in many situations which have as a common feature that information coming from some source is transmitted over a noisy communication channel to a receiver. Examples are telephone conversations, storage devices like magnetic tape units which feed some stored information to the computer, telegraph, etc. The following is a typical recent example. Many readers will have seen the excellent pictures which were taken of Mars, Saturn and other planets by satellites such as the Mariners, Voyagers, etc. In order to transmit these pictures to Earth a fine grid is placed on the picture and for each square of the grid the degree of blackness is measured, say in a scale of 0 to 63. These numbers are expressed in the binary system, i.e. each square produces a string of six Os and Is. The Os and 1 s are transmitted as two different signals to the receiver station on Earth (the Jet Propulsion Laboratory of the California Institute of Technology in Pasadena). On arrival the signal is very weak and it must be amplified. Due to the effect of thermal noise it happens occasionally that a signal which was transmitted as a 0 is interpreted by the receiver as a 1, and vice versa. If the 6-tuples of Os and Is that we mentioned above were transmitted as such, then the errors made by the receiver would have great effect on the pictures. In order to prevent this, so-called redundancy is built into the signal, i.e. the transmitted sequence consists of more than the necessary information. We are all familiar with the principle of redundancy from everyday language. The words of our language form a small part of all possible strings of letters (symbols). Consequently a misprint in a long(!) word is recognized because the word is changed into something that resembles the correct word more than it resembles any other word we know. This is the essence of the theory to be treated in this book. In the previous example the reader corrects the misprint. A more modest example of coding for noisy channels is the system used on paper tape for computers. In order to represent 32 distinct symbols one can use 5-tuples of Os and is (i.e. the integers 0 to 31 in binary). In practice, one redundant bit (= binary digit) is added to the 5-tuple in such a way that the resulting 6-tuple has an even number of 1s. A failure of the machines that use these tapes occurs very rarely but it is possible that an occasional incorrect bit occurs. The result is incorrect parity of the 6-tuple, i.e. it will have an odd number of ones. In this case the machine stops because it detects an error. This is an example of what is called a single-error-detecting-code.