In a free market, the fair price is reached when supply equals demand. There is a shortage of programmers. Therefore, programmers are underpaid.

Why is obvious. Software has grown rapidly for many decades now. The skilled labor pool can’t adjust nearly as quickly, because our training system for skilled workers is FUBAR. Hence, the market wage for programming has grown rapidly. Wages are sticky, as employers don’t want to pay much more than what they see as historical norms. And so, when wages can’t rise fast enough to meet demand, we get shortages.