skills required by developers