"Global variables and Interface Blocks can be declared with the uniform qualifier. This means that the value does not change between multiple executions of a shader during the rendering of a primitive (ie: during a glDraw* call). These values are set by the user from the OpenGL API. They are constant, but not compile-time constant (so not const)."
http://www.opengl.org/wiki/Type_Qualifier_(GLSL)#Storage_qualifier
I guess I'm asking why the uniform variables cannot just be constant at compile time as well.
_<func_name>_<var_name>_0
and assigns them uniform locations. – Andon M. Coleman