why software engineers are highly paid