Supercomputing has been an integral part of the DOE mission since the advent of the computer in the 1950s. This talk gives a history of the various eras of High Performance Computing as defined by the dominant platforms, starting with mainframes and continuing through vector architectures, massively parallel architectures, and the current emerging trends that will define the upcoming exascale era. Basic terminology will be introduced for important HPC concepts including scalability, shared vs distributed memory, Amdahl's law, Dennard scaling, data locality, burst buffers (I/O), heterogenous computing, and co-design. Programming models such as MPI, OpenMP, and emerging PGAS and task-based approaches will be discussed as they apply to targeting these various platforms.