Is it fair that you can have two similarly-skilled, similarly-trained, similarly-experienced programmers working side by side but they have a difference in pay?
The problem there is people often have an inflated sense of self-worth, or skill in any particular area. I remember reading one study that showed that when asked a large pool of people how well they knew a subject, the people that rated themselves the highest actually knew the least. As people actually get better at their field, they understood better what they didn't actually know, and rated themselves much lower.
I have really never met two similarly skilled, similarly trained, similarly experience programmers working in the same place. That however, didn't stop one of them from thinking they were as good, and often much better than the other one.
Some people don't like that, and want everyone to be paid based on a standardized table of years of work experience and years of education; look up where they cross, that is your salary.
And usually the people that I find that advocate that type of arrangement are the absolute worst of the bunch. Just because they went to school, and learned nothing (or things that are mostly irrelevant), and sat in a chair in front of a computer for 20 years does not make them better than the guy next to him that lives and breathes it 24x7 for the past 5.