Software engineers design, develop and test programs, such as phone apps and large-scale business software, which can range from simulation software to mining applications. They liaise with clients to understand their software needs and translate these needs into applications written in modern programming languages.