This is more expensive, both in terms of the number of function calls and how the hardware handles it.
What I would like to see is full separation of program objects (compiled/linked programs) from program object state (uniforms, etc).