Above a certain point, and most programming jobs are above that point, there is no fixed position with a fixed value. The right person in the right place can easily be worth 2x or more than originally anticipated for an opening. There's no way to predict that in advance, so at best the employer could give an ideal range and let candidates demonstrate their value if they want to exceed the range.
Just pay what the position is worth to you. The only reason to negotiate is to pay less than the position is worth if possible.