This introductory textbook on error-correcting codes is aimed at senior undergraduates or graduate students of computer science, electrical engineering and mathematics. Starting from the basics of symmetric binary channels and linear codes, the author introduces the first part of necessary material about finite fields and proceeds straight on to Reed-Solomon codes. It is followed by a chapter on finite fields containing material about minimal polynomials and cyclotomic cosets needed for a detailed treatment of cyclic codes and BCH codes. The pillars of the book are three chapters on GRS codes. The last three chapters discuss concatenated codes, graph codes and convolutional codes. There is also a chapter on combinatorial bounds. The material of the first eight chapters (finishing with cyclic codes) can be used as an introductory course on error-correcting codes for students with a background in probability, linear algebra, modern algebra and combinatorics.