If a company isn't meeting your salary expectations then leaving for a better offer is itself a negotiating tactic in a way.
Instead: being good at doing interviews including "looking the part", being strong negotiators, changing jobs often.
Likewise a OK programmer at their present job is worth maybe half a year to 2 year in salary in company or narrow product specific knowledge, for the company.
The way changing company gives raises doesn't make sense for the company losing an employee. The employee is worth more for the prior employer than the new. And the new employer's present employees are worth more than the new.