开发工程师具备哪些技能