Department Learning Goals

The computer science curriculum is designed to encourage students to:

  • Develop the critical thinking skills to solve problems by designing and implementing algorithms.

  • Develop the analytical skills for reasoning about algorithmic complexity.

  • Be able to design, implement, test, and document computer programs that solve substantial computational problems.

  • Build skills for developing a working understanding of a complex code base and ability to effectively modify it.

  • Be able to think at multiple levels of detail and abstraction.

  • Develop a foundation that allows and encourages learning new and relevant skills and technologies as the field evolves.

  • Understand the interplay between theory and practice.

  • Understand the interplay between software and hardware.

  • Be able to communicate clearly in written and oral form.

  • Be able to work effectively on a team.

More specifically, students are expected to master the following concepts:

  • Computer programming—including working knowledge of at least two programming languages in different paradigms.

  • Data structures: an ability to use and implement fundamental abstract data types including queues, stacks, balanced search trees, hash tables, and graphs.

  • Abstraction to manage complexity.

  • Recursion and induction.

  • 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.

  • The conceptual organization of computers—including both computer architecture (the hardware level) and operating system issues.

  • Data storage on a computer.

  • Applications of computing: an understanding of how computers, algorithms, programs, and/or data structures are used in several application areas.