- Create and demonstrate software that correctly solves realistic problems with open-ended scope.
- Use empirical methods to analyze computational systems and models.
- Employ multiple levels of algorithmic and data abstraction to manage system complexity.
- Employ mathematical ideas in a computing context.
- Create, implement, and evaluate software abstractions that model complex phenomena.
- Create, apply, and understand the software abstractions that manage interaction with hardware.
- As part of a team, develop robust software artifacts that successfully enable their users to achieve their goals.
- Employ written and oral communication in both technical and nontechnical settings.
- Understand the social and ethical context of computing.
- Employ the methodologies used in mathematics, including calculation, proof, discovery of new mathematics, and application.
- Understand basic content and principles in each of the broad divisions within mathematics: discrete (algebra and combinatorics), continuous (calculus and analysis), and geometric (linear algebra and topology).
- Master at least one field of mathematics to a depth beyond that typical of a single advanced undergraduate course in the topic.
- Understand the motivation and aesthetics underlying mathematics, including the historical and cultural context in which it was developed.
- Communicate mathematical ideas in written papers, oral presentations, and group discussions. Possess the ability to argue mathematical proof validity in both written and oral work.