A student graduating from Middlebury College with a Computer Science major will:

  1. Have critical thinking skills to solve problems by developing and implementing algorithms.
  2. Be able to analyze the inherent complexity of computational problems as well as the complexities of their solutions.
  3. Be able to design, implement and test computer programs that solve substantial computational problems.
  4. Be able to communicate clearly in written and oral form.
  5. Be able to work effectively on a team.
  6. Be able to recognize, identify, and make informed judgments about societal and ethical issues that arise from the uses and development of computing technology.

A student graduating from Middlebury College with a Computer Science major will also have a solid knowledge and understanding of the following concepts:

  1. Abstraction to manage complexity.
  2. Algorithmic problem-solving: an ability to design, code, analyze, and prove the correctness of algorithms using recursive divide-and-conquer, dynamic programming, and greedy approaches.
  3. The conceptual organization of computers—including both computer architecture (the hardware level) and operating system issues.
  4. Data storage on a computer—including the digitization of analog information.
  5. Computer programming—including working knowledge of at least two programming languages in different paradigms.
  6. Models of computation—including NP-completeness and computability and the practical significance of both.
  7. Recursion and induction.
  8. Data structures: an ability to use and implement fundamental abstract data types including queues, stacks, balanced search trees, hash tables, and graphs.
  9. Applications of computing: an understanding of how computers, algorithms, programs, and/or data structures are used in several application areas.
  10. Responsible computing: an understanding of the societal context of computing, including bias within models and algorithms, the impact of a lack of diversity within datasets and development teams, and the overall role of algorithms in shaping daily life.