This paper examines the history of channel coding, progressing from Shannon's 1948 theorem and Hamming codes to modern capacity-approaching codes. The focus is on advancements improving performance relative to complexity, especially for the AWGN channel. It explains why algebraic block codes fell short of achieving the Shannon limit, and details the development of crucial predecessors to today's high-performance codes: convolutional codes, concatenated codes, and other probabilistic methods. The paper concludes with a brief overview of practical applications.