The problem with fixed-function learning is that it stunts growth. Yes, if all you want to do is blast a triangle on the screen, it's easy. If all you want to do is apply some lighting to it, you can use simple rules. Even with a texture. But if you actually want to think
, if you want to do anything even slightly
unorthodox or out of the ordinary, welcome to ARB_texture_env_combine hell, where it takes over 10 lines of code for a simple multiply
This makes people want to avoid
doing interesting things. It forces them to think only in terms of the most basic, simple fixed-function functionality. Yes, you may learn fast initially, but you learn not to think for yourself, and you learn not to wander outside of the simple, fixed-function box. It gives you a false sense that you actually know
something, just because you were able to throw a lit, textured object onto the screen quickly.
When it comes time for them to learn what's actually going on, they have no idea how to do that. When it comes time for shaders, you have to basically start over
in teaching them. You may as well start off the right. It may be slower going initially, but it's great once you get the hang of it. And they have active agency in their learning and real understanding of what's going on.