This is a first graduate-level course in Coding Theory. We cover theory and practice for channel coding techniques from the inception by Hamming till today.