This document provides an overview of shader programming in OpenGL and GLSL. It discusses how shaders have evolved over the past 20 years to allow for more customization of vertex and fragment processing. It introduces the basic concepts of vertex and fragment shaders, and how they are used together in a shader program to control the graphics pipeline. It also covers the GLSL language syntax and basics types like vectors and matrices that can be used in shaders.