job description of hardware engineer