Binding VBOs to attributes is one of the most often called functions when rendering a frame. That can add up to several thousand times per frame. These function calls must be as fast as possible. Doing a hash-lookup followed by a string-comparison _will_ be slower than just using an index.

Just try it for yourself. For example, remove any caching of uniform-locations in your renderer and do a glGetUniformLocation() every time you want to update a uniform.

All the problems related to aliasing of built-in attributes are essentially gone since the last fixed function hardware went away. The hardware has to be able to accept any kind of attribute data at any attribute slot and can't make any assumptions about the data and format that is bound to certain attributes.

I never had any problems with fixed attribute locations, maybe because I never made (ab-)use of aliasing attributes. And with the introduction of GL3.0 / GLSL 1.30 the whole aliasing thing has become a non-issue anyway because there are no built in attributes anymore.

Btw, I find the "Clockworkcoders Tutorials" kind of funny. It shows buggy code and a "misuse of color". What is any beginner supposed to learn from that?