The CS faculty revised the curriculum, because computer science has become too large to learn in four years. The faculty decided that the best response is to reduce the set of classes that students are required to take, so as to enable students to pursue their interests by choosing upper-division elective courses. The old curriculum had eleven CS courses that students were required to take, leaving little time for electives. The new curriculum has only six. This gives students the opportunity to dive into concentration areas, or to study computer science more broadly by sampling from various subareas.


Our Entry-Level courses and prerequisites require students to take our CS courses in a specific order for their first few semesters. You can see the flowchart below:

Undergraduate course flow graphic

Core CS Classes

All CS students are required to take six core classes, two of each in Programming, Systems and Theory:


1) CS 312 Intro to Programming
2) CS 314 Data Structures or CS 314H Data Structures: Honors


3) CS 429 Computer Organization & Architecture or CS 429H Computer Organization & Architecture:Honors
4) CS 439 Principles of Computer Systems or CS 439H Principles of Computer Systems: Honors


5) CS 311* Discrete Mathematics for Computer Science or CS 311H* Discrete Mathematics for Computer Science: Honors
6) CS 331* Algorithms & Complexity or CS 331H* Algorithms & Complexity: Honors

*Starting in Fall 2013, CS 311 and CS 311H replace the old CS 313K Logic, Sets and Functions and CS 313H Logic, Sets and Functions. Also, CS 331 and CS 331H replace the old CS 378 Algorithms and Complexity and CS 378H Algorithms and Complexity: Honors.