CS Major
The major in Computer Science prepares students for careers in Computer Science. Apart from formal coursework, students also have an opportunity to engage with faculty members in research or doing a project. The ORC page is the best place for all requirements, however, we provide a summary below.
Major Degree Requirements
To become a CS Major, a student has to:
- Fulfill the prerequisite courses (COSC 1, COSC 10)
- Take two courses in each of the three pillars: (30-49) (50-69) (70-89)
- Take three elective courses (30-89), at most one of which can be COSC 94 or a MATH course 20 or higher (but not MATH 22/24)
- Finish a culminating experience
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.