Software engineers apply the principles of computer science and mathematical analysis to the design, development, testing, and evaluation of the software and systems that make computers work. The tasks evolve quickly, reflecting new areas of specialization or changes in technology, as well as the preferences and practices of employers.