Error Control Codes (ECC) course owes its beginnings to the pioneering work of Claude Shannon in 1948 on achieving reliable communication over a noisy transmission channel. Shannon's central theme was that if the signaling rate of the system is less than the channel capacity, reliable communication can be achieved if one chooses proper encoding and decoding techniques. The design of good codes and of efficient decoding methods, initiated by Hamming, Slepian, and others in the early 1950s, has occupied the energies of many researchers since then. Much of this work is highly mathematical in nature, and requires an extensive background in modern algebra and probability theory to understand. This has acted as an impediment to many practicing engineers and computer scientists, who are interested in applying these techniques to real systems. One of the purposes of this book is to present the essentials of this highly complex material in such a manner that it can be understood and applied with only a minimum of mathematical background.