Major Degree Requirements

To become a CS Major, a student has to:

Information on the courses mentioned above are detailed under Courses.

Learning Outcomes

  • Theory and analysis: Students will have a clear understanding of what “efficient computation” means, mathematically; easy-vs-hard-vs-intractable-vs-undecidable. Students will be able to analyze an algorithm given as pseudocode and describe the asymptotic run-time complexity.
  • Algorithms: Students will be familiar with the canon of fundamental algorithms and data structures, and their uses and limitations.
  • Software design: Students will gain experience with more than one programming paradigm, and with writing good and efficient code. Students will gain experience with large-scale software design and implementation.
  • Systems knowledge: Students will have an understanding of operating system infrastructure and services, and the interface between hardware and software.
  • Numerical methods: Students will gain familiar with the mathematical tools (e.g., vectors, matrices, systems of linear equations, eigenvalues, eigenvectors, subspaces, and matrix decompositions) used in application-specific domains, and as the underpinnings for machine learning methods.
  • Synthesis, Applications, and Impact: Beyond core courses (30, 31, 50, and 70, as well as the introductory 1 and 10), majors take additional courses in each of the three pillars: theory and algorithms, systems, and applications (including courses like computer vision, robotics, and machine learning) to develop a depth of knowledge of cutting-edge tools and techniques in at least one of the pillars.