We expect computer science majors to graduate with the following knowledge and skills:
- To be able to apply abstraction and algorithmic reasoning to the task of solving problems and to communicate those solutions clearly and effectively.
- To be able to design, implement, and evaluate computer programs that solve significant computational problems.
- To recognize, and know when to apply, a standard body of algorithms, data structures, and algorithm paradigms. To be able to reason about problem complexity and design new algorithmic solutions when faced with new problems.
- To understand how modern hardware and software systems are organized and why they are built that way. To be able to work through the implications of specific design decisions regarding computer architecture, operating systems, and memory structures, and to evaluate those decisions.
- To work with a variety of approaches to computational problem-solving via our elective courses. This experience may include: developing deeper understanding of theoretical aspects of computation; working with a variety of languages and language paradigms; understanding concurrency and network-based models of computation; and mastering techniques of specific problem areas such as artificial intelligence, graphics, optimization, and language and compiler design.