These requirements ensure that a computer science student has a solid foundation in computer science and supporting mathematics, and has explored some of the more advanced areas of computer science. This is a basic summary, for a more in-depth description of the requirements, please reference the Department/Program Curriculum found on the Registrar’s page.

#### Required Courses in Computer Science

INTRODUCTORY COURSES

There are other introductory courses that aren’t required, but could be of interest to majors.

- CSCI 134: Introduction to Computer Science
- CSCI 136: Data Structures and Advanced Programming (placement required)

Students with some prior programming experience should consider CSCI 135: Diving into the Deluge of Data as an alternative to CSCI 134.

CORE COURSES

Potential majors are strongly urged to complete all or most of the core courses by the end of their junior year in order to ensure that they have the appropriate prerequisites for the electives.

- CSCI 237: Computer Organization
- CSCI 256: Algorithm Design and Analysis
- CSCI 334: Principles of Programming Languages
- CSCI 361: Theory of Computation

ELECTIVES

Two or more electives (bringing the total number of Computer Science courses to at least 8) chosen from 300- or 400-level courses in Computer Science. Computer Science courses with 9 as the middle digit (reading, research, and thesis courses) will normally not be used to satisfy the elective requirements. Students may petition the department to waive this restriction with good reason.

#### Required Courses in Mathematics

Any Mathematics or Statistics course at the 200-level or higher except for MATH 200

#### Required Proficiency in Discrete Mathematics

Students must demonstrate proficiency in discrete mathematics by either passing the departmental Discrete Mathematics Proficiency Exam or by earning a passing grade in MATH 200. For more information on the Discrete Mathematics Proficiency Exam, follow this link: Required Proficiency In Discrete Mathematics.

Students considering pursuing a major in Computer Science are urged to take Computer Science 134 and to begin satisfying their mathematics requirements early. Note in particular that the Discrete Mathematics Proficiency requirement is a prerequisite for many advanced courses.

Students who take Computer Science 102T, 107, or 109 may use that course as one of the two electives required for the major in Computer Science. Those who count Computer Science 109 toward the major must select an elective different from Computer Science 371 (Computational Graphics) if they want elective credit. Computer Science 102T, 107, 109, and 134 are not open to students who have taken a Computer Science course numbered 136 or higher.

To be eligible for admission to the major, a student must normally have completed Computer Science 136 as well as fulfilled the Discrete Mathematics Proficiency Requirement by the end of the sophomore year. A Mathematics course at the 200-level or higher (except for MATH 200) must be completed by the end of the junior year. Students are urged to have completed two of the four core courses (Computer Science 237, 256, 334, and 361) by the end of the sophomore year and must normally have completed at least three out of the four core courses by the end of the junior year.

With the advance permission of the department, two appropriate mathematics or statistics courses may be substituted for one Computer Science elective. Appropriate mathematics classes are those numbered 300 or above, and appropriate statistics courses are those numbered 200 or above. Other variations in the required courses, adapting the requirements to the special needs and interests of the individual student, may be arranged in consultation with the department.

#### Admission to the Major

To be eligible for admission to the major, a student must have completed CSCI 134: Introduction to Computer Science (or CSCI 135: Diving into the Deluge of Data) and CSCI 136: Data Structures and Advanced Programming, as well as MATH 200: Discrete Mathematics, by the end of the sophomore year. The second math course should be completed by the end of the junior year. While any 200-level or higher math course suffices, you should be aware that MATH 211: Linear Algebra is recommended for CSCI 371: Computational Graphics. Students are urged to have completed 2 of the 4 core courses (CSCI 237, CSCI 256, CSCI 334, and CSCI 361) by the end of the sophomore year and at least 3 out of the 4 core courses by the end of the junior year.

With the advance permission of the department, two appropriate mathematics or statistics courses may be substituted for one Computer Science elective. Appropriate mathematics classes are those numbered 300 or above, and appropriate statistics courses are those numbered 200 or above. Other variations in the required courses, adapting the requirements to the special needs and interests of the individual student, may be arranged in consultation with the department.

#### The Computer Science Colloquium

The department sponsors a weekly Computer Science Colloquium intended for all majors. All Computer Science majors must attend at least 20 Computer Science colloquia, Juniors and Seniors are encouraged to attend at least 5 during each semester they are present on campus. We highly recommended others attend as well. The colloquia consist of talks on areas of computer science not normally covered in our curriculum. In particular, many of the speakers will be discussing their recent research in computer science. The speakers include Williams faculty, faculty from other institutions, computer scientists from industry, and current Williams computer science majors talking on their own work or other areas of interest to them. Every year additional sessions focus on such topics as computer ethics, computer-related jobs, and computer science graduate schools.

## Main Social Nav