Shader program should be easily changable, its half the point of the pipeline. ATM there is not method to change the shader, we need a setter for program. Should program also be optional in the constructor?