We will explore the theoretical and historical motivation behind modern error control coding, particularly algebraic block coding. Linear codes, both block and convolutional, will be introduced, followed by a description of the algebraic tools necessary to describe and implement Reed-Solomon codes. Modern algrebraic concepts including Galois fields will be presented, along with circuit implementations. Also, convolutional codes and trellis-coded modulation will be covered, along with the Viterbi algorithm for decoding. Low-density parity check codes and Turbo codes will be covered, as time permits. Much of the learning will be expressed in formal (theorem/proof) format to develop rigor.