The Department of Computer Science at the University of Rochester was established in the Fall of 1974 as a research department. The first curriculum was a graduate program leading to the Ph.D. In the Fall of 1995, the Department began offering a B.A. and a B.S. in Computer Science that builds on its more than thirty years of world class research at the graduate level.
The degree programs are a B.S. in Computer Science, a B.A. in Computer Science, and a minor in Computer Science. They are designed to be flexible enough to satisfy the needs of all students in the College interested in computer science. Their goals are twofold: (1) to give students a solid and rigorous background in computer science principles, including the requisite mathematical foundations, and (2) to expose students to the problems and solution techniques used in the various areas of the discipline.
This document describes the degrees, the course offerings that support the degrees, and the courses's prerequisites. It also shows some possible routes to completion of the majors.
The goal of our program is to produce, within the context of a liberal arts education, computer scientists. A computer scientist is one who is fluent in algorithmic thought and in the widely agreed upon core skills and concepts used in algorithmic thought: abstraction, formalization, reasoning about correctness, complexity analysis, and implementation techniques. Our curriculum introduces students to these key concepts and skills early on, and builds on that foundation in subsequent specialized courses. This approach to a broad education in the conceptual and mathematical foundations of computer science has been adopted by many of the country's top computer science departments, and is one that has been heartily endorsed by the professional association of computer scientists (ACM), and by experts on the teaching of computer science 1,2.
During the first two years of the program, students are introduced to the notion of an algorithm, a computational metaphor that has revolutionized our approach to subjects as diverse as the human mind and the nature of mathematical proof, and learn the basic principles that guide our understanding of the creation and analysis of algorithms. These themes will continue through the later years of a student's undergraduate education, and, indeed, will resonate throughout the student's lifetime in computer science or other related scientific or engineering disciplines. In the final two years of the program, students will develop a broad understanding of all three areas of modern computer science (theory, systems, and artificial intelligence) via courses in the "core curriculum." Students will also have the opportunity to explore these areas in greater depth through advanced specialization in courses, independent study, and research.
We expect that many of the B.S. students will become intimately involved in the Department's research program during their junior and senior years. Through the Undergraduate Problem Seminar (CSC 200), the joint undergraduate-graduate courses, and the optional senior project, students will find opportunities to work closely with a faculty member and that faculty member's research group of graduate students, post-doctoral fellows, and visitors. Especially talented students will be offered summer research internships, funded by the NSF REU program, with which we have been very successful. Students will be exposed to the research atmosphere in the Department, and will be encouraged, taught, and ultimately expected to be critical and original, to go beyond a structured learning environment, and to become a self-motivated creative force. Students will have, and indeed require, full access to the Department's research laboratory facilities.
Access to the Department's research laboratory, faculty, and research projects will benefit the B.S. students, whether they move directly into industry or continue their education in graduate school. The computer industry and graduate admissions committees of top schools both seek students who have become "insiders" in a research group. In most departments, only a lucky few undergraduates become insiders; we expect that many of the B.S. students will become insiders. Of course, the Department's research programs will benefit as well; advanced undergraduates will usually become insiders in exactly the area in which they have the greatest aptitude, interest, and---via their specialization track and advanced courses---knowledge.
We hope the result for all participating students (Computer Science minors, B.A. majors, and B.S. majors) will be a broad grounding in the conceptual and mathematical foundations of the field---enduring foundations whose relevance is not tied to a particular decade, technology, or activity (such as programming). Additionally, all Computer Science majors will be given a broad and relatively advanced exposure to the subareas of computer science. Finally, all B.S. majors will be given truly exceptional participatory access to advanced courses, to a faculty composed of prominent researchers, and to state-of-the-art facilities.
The B.S. and B.A. programs and the minor in computer science require a set of pre-major courses that must be completed before acceptance into the program. The following six courses cover the formal foundations of computer science and the basic techniques of programming:
To be admitted into one of the computer science degree programs, a student must attain a grade of C- or higher in each of the above six courses and a GPA of no lower than 2.0 in these courses. Students who plan to complete a computer science major or minor must not take these courses on a pass/fail basis. However, marginal performance in any pre-major course is a strong predictor of unsatisfactory performance in future computer science courses. Computer science faculty rely primarily on pre-major course performance in advising prospective majors and minors. After the pre-major requirements are met, these courses are not included in the final GPA calculation for the B.S., the B.A. or the minor.
The pre-major requirements can be completed in the sophomore year in most circumstances. The program is flexible enough to accommodate those who start their computer science courses in the sophomore year. No more than 2 core or advanced courses can be completed at other institutions. If transfer courses are taken while in residence, they must be pre-approved by the computer science undergraduate advisor.
To satisfy the requirements for the B.S. or B.A. degree, students must take the following core courses:
* CSC 200H is required for the honors B.S. degree. CSC 200 has been reinstated as a requirement for B.S. students class of '09 and later. B.S. students in '07 & '08 may take either CSC 200 or an additional upper level CSC course (200 level or above) in place of CSC 200.
It is the Department's current policy to allow students who take both MTH 163 and MTH 235 to count this two-course sequence as covering the MTH 165 requirement.
In addition to the core courses, the B.S. degree requires three additional advanced courses in computer science (numbered above 200). Specialization is encouraged, though not mandatory: It helps prepare for participation in research and for senior-year independent work. Specialized tracks can be constructed from the following course topic groups; consult the advisor about track choice.
Students must also complete either a one-semester senior project (CSC 393) in one of the areas listed above or one additional advanced course in computer science (numbered 200 or higher) or mathematics (MTH 163, 164, 173, 174, or any additional mathematics course numbered above 200). Especially appropriate are the mathematics courses in probability, linear programming and game theory, chaos and fractals, discrete mathematics, logic, number theory and cryptology, combinatorics, and graph theory. Courses 200 level or above in other related disciplines (e.g., philosophy, linguistics, brain and cognitive science, or electrical engineering) will also be accepted. CIS 225 will be accepted (CIS 215 will no longer be allowed). Supervised teaching (CSC 390) may not count toward advanced course requirements.
Steps to complete the program are as follows.
[note 2] Under special circumstances, CSC391H or CSC393H may be taken in the same semester as CSC395H.
[note 3] That is, the GPA of the eleven courses the student has formally declared as the BS concentration (5 core, 3 Advanced, MTH 165, CSC 200 or substitute, Senior Project or substitute). Upper level writing courses are not included in this calculation though they appear on the concentration form.

In addition to the core courses, students must complete two advanced courses in computer science (courses numbered 200 or higher), mathematics (MTH 163, 164, 173, 174, or any course numbered above 200), or other related disciplines (e.g., philosophy, linguistics, electrical engineering). CIS 225 is allowed, but CIS 215 is no longer allowed. One of these advanced courses must be in computer science. No more than 2 computer core or advanced courses can be completed at other institutions. If transfer courses are taken while in residence, they must be pre-approved by the computer science undergraduate advisor. Supervised teaching (CSC 390) may not count toward advanced course requirements.
Every Computer Science major must develop, in consultation with his or her advisor, a plan that includes two upper-level writing "experiences." Each experience must generate at least 25 pages of expository prose, with substantial feedback on content and form, and revision of the work. (The 25 pages may be in the form of a single major paper or a series of smaller papers in a coherent context, e.g., a course.) The plan must be described in writing, on a form signed by both the student and the advisor. Acceptable writing experiences include (but at the advisor's discretion are not limited to) the following:
For any writing experience other than a course, the student must file evidence of completion with the department's undergraduate program administrator. The administrator will verify satisfaction of the upper-level writing requirement as part of the pre-graduation program review.
A minor in Computer Science requires all of the pre-major requirements (formal foundations and basic programming techniques) and three of the core courses in computer science ( CSC 242, CSC 252, CSC254, CSC 280, CSC 282). The minor can be arranged to provide general competence or can follow a specialized track.
An elective industrial partnershp program is being developed that allows students to spend up to six months (usually a summer and an adjacent semester) working in an industrial setting. Graduation thus is delayed one semester. Interested students should plan their studies to ensure that all their academic program requirements are met despite the semester away.
The Rochester curriculum includes clusters of three related courses in a discipline. Computer Science currently offers several such clusters, and is planning more. Courses fall into the categories of Natural Science, Humanities, and Social Science. If your major is Computer Science (Natural Science) you will need clusters in Humanities and Social Science. If you need a Natural Science cluster, the following CS clusters will help you fulfill this requirement.
Theory of Computation (N1CSC008): CSC 172, CSC 173, CSC 280 Emphasizes mathematical models of the computational process, limitations on what is computable, the inherent complexity of practical problems. Prerequisite: familiarity with a high-level language like Java, equivalent to CSC 171.
Computer Systems (N1CSC004): CSC 172, CSC 252 and either CSC 173 or CSC 171. Covers the internal organization of computers and its relation to recent computer hardware developments as well as to classical topics in computer software such as compilers and operating systems. Prerequisite: familiarity with a high-level language like Java, equivalent to CSC 171.
Business Computing (N1CSC002): Three courses with the following choices: CSC 108, either CIS 215 or CIS 225, and either CSC 170 or CSC 171. An introduction to software packages, computing, and computerized business systems analysis. The mixture of programming skills and powerful analysis packages like EXCEL is a strong foundation for serious applications. Prerequisite: none.
Computer Science and Art (N1CSC009): CSC 108, AH100 or CSC190 (Recreational Graphics I & II (2 credits each)), and either CSC 170 or CSC 171. This cluster introduces students to the use of computers in visual art.
Departmental distinction in Computer Science, for both the B.A. and B.S. degrees, will be determined by the student's GPA on the courses that constitute the program of study for the concentration. The minimum scores for the three levels of distinction will be 3.3 (Distinction), 3.5 (High Distinction), and 3.7 (Highest Distinction).
Here is a sample four-year course of study for the B.S. degree in Computer Science. This sample program's selection of advanced courses assumes that the student specializes in computer systems; however, any Computer Science courses beyond the 200 level may be substituted for a course marked with an "AC#."
The B.S. degree with a concentration in theory has the same courses in the first three semesters with distinct advanced course selections in the later semesters.
Similarly, for a concentration in artificial intelligence:
Here is a sample four-year course of study for the B.A. degree in Computer Science, which includes 10 courses in computer science and 3 in mathematics, reserving 19 courses for electives and general College requirements.
Options are somewhat limited with this late a start. This particular track contains a sampling of courses from each area, with no explicit specialization.
A large number of options exist in designing any student's individual program. The program below includes the MTH 141-142-143 sequence, which is also acceptable for fulfillment of the premajor mathematics requirement. This program also includes CSC 108 as an early suggested elective. Students with limited computer-related experience may find this program better suited to their needs.
Department of Computer Science