Curriculum for Concentrations in
Computer Science

Contents


Introduction

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.


Program Overview

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.


Curriculum for B.S. and B.A. Degrees

Pre-Major Requirements

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.

James Allen teaching a class

Core Courses

To satisfy the requirements for the B.S. or B.A. degree, students must take the following core courses:

For the B.S. degree, students must take the following additional 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.

Advanced Course Requirements for the B.S. Degree

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.

Honors Research in Computer Science

The Computer Science Honors Research program, leading to the "honors in research", "high honors in research" or "highest honors in research" honor at graduation [note 1], is a version of the B.S. degree program in which honors-level coursework and a senior research thesis are required. The curricular component of the research honors program is the courses CSC200H, either CSC391H or 393H, and CSC395H. Each of these courses will be 4.0 credit hours.

Steps to complete the program are as follows.

[note 1] The degree of honors awarded is determined by the Computer Science faculty in consultation with the student's honors committee. The quality of the thesis, its presentation, and other CS research and publications throughout the student's undergraduate career are all considered.

[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.

student interacting with Mabel the Robot

Advanced Course Requirements for the B.A. Degree

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.

Upper-Level Writing Requirement for Computer Science Majors

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.

Computer Science Minor

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.

3-2 Program

The 3-2 Program allows undergraduate students to complete both the Bachelors and Masters Degree in Computer Science in five years. The program assumes the completion of all undergraduate Bachelor's requirements and most likely some of the graduate course requirements within the first 4 years. Ideally the fifth year is devoted to graduate courses, research, and a final exam, thesis, or equivalent. For more information about the requirements for the 3-2 program, please go to 3-2 Program.

Industry Practicum

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.

Clusters

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.

Departmental Distinction

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).

Sample B.S. Programs

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#."

1st Year
Fall: CSC 171 (Pre), MTH 150 (Pre), 2 electives;
Spring: CSC 172 (Pre), MTH 161 (Pre), 2 electives.
2nd Year
Fall: CSC 173 (Pre), MTH 162 (Pre), 2 electives;
Spring: CSC 252 (Core), CSC280 (Core) or CSC200 (BS), 2 electives.
3rd Year
Fall: CSC 282 (Core), MTH 165 (BS), CSC 254 (Core), 1 elective;
Spring: CSC 280 (Core), or CSC200 (BS), CSC 242 (Core), 2 electives.
4th Year
Fall: CSC257 (AC1), CSC 256 (AC2), 2 electives;
Spring: CSC 258 (AC3), CSC 393 (BS), 2 electives.

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.

1st Year
Fall: CSC 171 (Pre), MTH 150 (Pre), 2 electives;
Spring: CSC 172 (Pre), MTH 161 (Pre), 2 electives.
2nd Year
Fall: CSC 173 (Pre), MTH 162 (Pre), 2 electives;
Spring: CSC 252 (Core) or CSC200 (BS), CSC280 (Core), 2 electives.
3rd Year
Fall: CSC 282 (Core), CSC 286 (AC1) , 2 electives;
Spring: CSC 252 (Core), or CSC200 (BS), CSC 284 (AC2), 2 electives.
4th Year
Fall: CSC 254 (Core), CSC 287 (AC3), 2 electives;
Spring: MTH 165 (BS), CSC 242 (Core), CSC 393 (BS), 1 elective.

Similarly, for a concentration in artificial intelligence:

1st Year
Fall: CSC 171 (Pre), MTH 150 (Pre), 2 electives;
Spring: CSC 172 (Pre), MTH 161 (Pre), 2 electives.
2nd Year
Fall: CSC 173 (Pre), MTH 162 (Pre), 2 electives;
Spring: CSC 242 (Core), CSC 200 (BS) or CSC280 (Core),2 electives.
3rd Year
Fall: CSC 282 (Core), MTH 165 (BS), 2 electives;
Spring: CSC 280 (Core) or CSC 200 (BS), CSC 252 (Core), 2 electives.
4th Year
Fall: CSC 244 (AC1), CSC 254 (Core), 2 electives;
Spring: CSC 249 (AC2), CSC 246 (AC3), CSC 393 (BS),1 elective.

Sample B.A. Program

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. It assumes a specialization in systmes, but any computer Science course beyond the 200 level may be substituted for a course marked with an "AC#".

1st Year
Fall: CSC 171 (Pre), MTH 150 (Pre), 2 electives;
Spring: CSC 172 (Pre), MTH 161 (Pre), 2 electives.
2nd Year
Fall: CSC 173 (Pre), MTH 162 (Pre), 2 electives;
Spring: CSC 252 (Core), CSC 280 (Core), 2 electives.
3rd Year
Fall: CSC 282 (Core), CSC 254 (Core), 2 electives;
Spring: CSC 242 (Core), CSC 290 (AC1), 2 electives.
4th Year
Fall: CSC 257 (AC2), 3 electives;
Spring: 4 electives.

Late-Start B.A. Program

Options are somewhat limited with this late a start. This particular track contains a sampling of courses from each area, with no explicit specialization.

1st Year
Fall: 4 electives;
Spring; 4 electives.
2nd Year
Fall: CSC 171 (Pre), MTH 150 (Pre), 2 electives;
Spring: CSC 172 (Pre), MTH 161 (Pre), 2 electives.
3rd Year
Fall: CSC 173 (Pre), MTH 162 (Pre), 2 electives;
Spring: CSC 252 (Core), CSC 280 (Core), 2 electives.
4th Year
Fall: CSC 290 (AC1), CSC 282 (Core), CSC 254 (Core),2 electives;
Spring: CSC 242 (Core), CSC 255 (AC2), 2 electives.

Gentle-Start B.A. Program

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.

1st Year
Fall: MTH 150 (Pre), CSC 108 2 electives;
Spring; CSC 170, MTH 141 (Pre), 2 electives.
2nd Year
Fall: CSC 171 (Pre), MTH 142 (Pre), 2 electives;
Spring: CSC 172 (Pre), MTH 143 (Pre), 2 electives.
3rd Year
Fall: CSC 173 (Pre), CSC 282 (Core), 2 electives;
Spring: CSC 280 (Core), CSC 252 (Core), 2 electives.
4th Year
Fall: CSC 290 (AC1), CSC 254 (Core), 2 electives;
Spring: CSC 242 (Core), CSC 255 (AC2), 2 electives.

Prerequisite Chart

  
Figure: Prerequisite Chart

References

1
David Gries. Teaching calculation and discrimination: A more effective curriculum. Communications of the ACM, pages 45--55, March 1991.

2
Allen B. Tucker. Computing curricula 1991. Communications of the ACM, pages 68--84, June 1991.

Department of Computer Science
PO Box 270226
Rochester, NY 14627-0226
marty@cs.rochester.edu
Phone: (585) 275-4505
Last changed 2/7/08 by Marty Guenther