Although devoted to constructions of good codes for error control, secrecy or data compression, the emphasis is on the first direction. Introduces a number of important classes of error--detecting and error--correcting codes as well as their decoding methods. Background material on modern algebra is presented where required. The role of error--correcting codes in modern cryptography is treated as are data compression and other topics related to information theory. The definition--theorem proof style used in mathematics texts is employed through the book but formalism is avoided wherever possible.