The Undergraduate Program in Computer Science

Computer Science Department
University of Rochester
Rochester, NY  14627-0226
(585) 275-4505
http://www.cs.rochester.edu

(Revised 3/29/2013)

Contents

1. Introduction

2. Computer Science Advisors

3. Introductory Courses

4. Curriculum for B.S. Degree in Computer Science

4.1 Admission to the B.S. Program

4.2 Core Course Requirements for the B.S. Degree

4.3 Advanced Course Requirements for the B.S. Degree

4.4 Honors Research in Computer Science

4.5 Sample B.S. Programs

5. Curriculum for the B.A. Degree

5.1 Pre-Approved Tracks

5.2 Creating New Tracks

5.3. Getting Started in the BA

6. Upper-Level Writing Requirement for Computer Science Majors

7. Computer Science Minor

8. Clusters in Computer Science

9. Opportunities

9.1 KEY Scholars

9.2 3-2 Program

9.3 GEAR (Graduate Engineering At Rochester)

9.4 Industry Practicum

9.5 Departmental Distinction

10. Course Descriptions


 

1. Introduction

The Department of Computer Science at the University of Rochester was established in 1974 as a graduate research institution.  In 1995, the Department began its undergraduate program, offering Bachelor of Science, Bachelor of Arts, and Minor degrees.  It participates in the UniversityŐs 3-2 program, through which a qualifying student in the B.S. program can also earn a Master of Science degree by one additional year of study.

The B.S. curriculum provides a rigorous background in all core areas of computer science.  It is appropriate for students who aspire to achieve a high-level research and development position in the computer industry, who plan to go on to earn an M.S. or PhD. in computer science, or who simply wish to have the broadest and deepest knowledge of the field.

The B.A. curriculum is highly flexible, and can be customized to support students interested in the intersection of computer science with other disciplines, such as computational linguistics or computational biology.  The B.A. is good preparation for students aiming for an industrial career or graduate study in a computing-related discipline.  Because it has fewer requirements than the B.S., it is also a good option for students who wish to double-major in computer science and another subject, or who wish to specialize in a particular area of computer science.

The Minor in Computer Science can be earned by completing six courses above the 130 level, as described below.

The goal of all of our degree programs 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 principles of the design and analysis of computer systems. Our curriculum introduces students to these key concepts and skills early on, and builds on that foundation in subsequent specialized courses.  Our advanced courses cover topics such as computer architecture, operating systems, programming languages, complexity theory, human-computer interaction, artificial intelligence, machine learning, machine vision, and natural language processing.  Our students gain the life-long learning skills necessary to stay current in and help shape the rapidly growing world of computing.

Many of our students become intimately involved in the Department's research program. Students find opportunities to work closely with faculty members and their research groups through the Undergraduate Problem Seminar (CSC 200), our Honors degree program, joint undergraduate-graduate courses, summer internships with faculty members for course credit or for pay, and independent study courses.

In 2009, the Department of Computer Science moved from the College of Arts and Sciences to the College of Engineering and Applied Science.  While this change opens up new opportunities for our students, such as participation in the GEAR program, it has not diminished the departmentŐs commitment to a liberal-arts education.  As described below, our B.S. and B.A. degrees require two clusters, one each in humanities and social sciences. Three course clusters are minimum requirements.  More than half of the computer science majors supersede cluster requirements by majoring or minoring in another discipline.

2.2.  Computer Science Advisors

Each computer science student has four levels of advising they can take advantage of at any time: their faculty advisor, the department undergraduate advisor, the Undergraduate Program Director, and the Hajim DeanŐs office advising staff.  All serve different needs of the students and work together to help the student to complete all necessary requirements and deal with any personal issues that might arise.

Any student indicating that computer science will be his or her major will receive a faculty advisor in computer science.  Students and faculty advisors meet during Freshman/Transfer orientation and each subsequent semester to discuss course planning and selection.  Long term issues about career choices, graduate school and day-to-day needs may also be discussed.

Additionally, the department has an undergraduate advisor who is available to meet with students to keep them on track to graduation.  Most paperwork related to academic life can be obtained from this office.

Students meet with the undergraduate advisor  or the Undergraduate Program director to discuss 4-year course plans, declaring majors and minors, drop/add forms, transferring credits, and independent study forms, as well as options related to study abroad, 3-2 program, internships, fellowships, teaching assistantships, cluster exceptions, KEY scholars, honors research, Take 5 applications, etc. The Undergraduate Program Director must review and formally approve transfer courses and major declaration forms.  For questions regarding university requirements that are beyond the scope of the department, students meet with advisors in the Hajim School of Engineering and Applied Sciences DeanŐs office.

3. Introductory Courses

The department offers a number of introductory courses, where students can start exploring programming and computer science:

CSC 170 - Introduction to Programming and the Web

This course shows students what goes on behind the scenes to make web pages appear in your browser, and offers a taste of web programming.  This course is a good choice for any student who wants to do more than simply use computer applications, and come to understand how computers and software actually work. (Fall)

CSC 160 - Engineering Computing

This course provides an introduction to MATLAB programming, data collection hardware, and data analysis.  Exercises are based on problems from a variety of engineering disciplines, including electrical, mechanical, and chemical engineering.  Although this course was designed for freshman engineering majors, it is appropriate for students in any discipline interested in practical scientific programming and data analysis.  (Spring)

CSC 161 - The Art of Programming

This course offers a self-contained introduction to the programming language Python, which can be used for practical problem solving in the sciences and humanities.  Although Python is significantly easier to learn and use than Java, the concepts learned in this course also provide a good background for students going on to learn Java in CSC 171.  This course is a good choice for students who intend to pursue a B.A. in Computer Science, or who are undecided about their major. (Spring)

 

CSC 171 - The Science of Programming

This course introduces students to Java, a powerful programming language used in most of our advanced courses.  Students who know from the start that they will earn a B.S. in Computer Science usually begin with this course.  (Fall)

CSC 172 - The Science of Data Structures

This course introduces notions of abstraction and modularity in programming.  Students who have had a strong course in Java programming in high school usually begin with this course.  This course is required for both the B.S. and B.A. degrees. (Spring)

These courses are appropriate both for students intending to major in Computer Science and students intending to major in other disciplines. The chart below is designed to help a student choose an appropriate entrance point to our program, and shows the typical movement between courses.  The dashed lines indicate that students who do well in CSC 161 or CSC 160 and are willing to learn the basics of the Java language on their own may skip CSC 171 and move directly on to CSC 172.  Students interested in doing this should obtain permission from the undergraduate advisor.

Description: Slide01.jpg

Suggested entries and paths for introductory work in computer science. 

In addition to these introductory courses, other Computer Science courses that do not have prerequisites include:

CSC 190 to 199 - Issues in Computing

CSC 108 - Computer Applications

CSC 131 - Recreational Graphics

 

4. Curriculum for B.S. Degree in Computer Science

The B.S. curriculum is described in terms of qualifying, core, and advanced courses. No more than two 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 program undergraduate director.

4.1 Admission to the B.S. Program

Students qualify for entering the B.S. program by completing the following courses:

MTH 150 - Discrete Mathematics or MTH 150A Discrete Math Module

MTH 161* - Calculus I

MTH 162* - Calculus II

CSC 171 - The Science of Programming (or AP credit, or programming experience with approval of the undergraduate program director)

CSC 172  - The Science of Data Structures

*Calculus sequences of MTH 141-MTH 143, or MTH 171Q & MTH 172Q are also acceptable.

To be admitted into the B.S. program, a student must attain a grade of C- or higher in each of the above courses and a GPA of no lower than 2.0 in these courses, which must not be taken on a pass/fail basis. After the qualifying requirements are met, these courses are not included in the final GPA calculation for the B.S.  Students typically complete these qualifying courses in the freshman or sophomore year.

4.2 Core Course Requirements for the B.S. Degree

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

CSC 173 - Computation and Formal Systems

CSC 242 - Artificial Intelligence

CSC 252 - Computer Organization

CSC 254 - Programming Language Design & Implementation

CSC 280 - Computer Models and Limitations

CSC 282 - Design and Analysis of Efficient Algorithms

CSC 200/200H - Undergraduate Problem Seminar

MTH 165 - Linear Algebra with Differential Equations

Students who take MTH 173Q  or BOTH MTH 163 and MTH 235  may count these options as covering the MTH 165 requirement.

4.3 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 (courses numbered above 200, and not included in the core group above, and excluding CSC 390 - Supervised Teaching). Students should consult with their faculty advisor or the department undergraduate advisor in CSB 735 about their advanced course selection. Specialization is encouraged, though not mandatory.  It helps prepare for participation in research and for senior-year independent work.  In particular, students are encouraged to select a related set of courses that will prepare them for participation in one of the departmentŐs research projects and/or to complete a senior project. Areas of interest include the following:

      Ľ     Computer Systems—CSC 253, CSC255, CSC 256, CSC 257, CSC 258

      Ľ     Natural Language and Knowledge Representation—CSC 244, CSC 247, CSC 248

      Ľ     Vision and Robotics— CSC 246, CSC 249

      Ľ     Theory CSC 281, CSC283, CSC 284, CSC 286, CSC 287

á      Human Computer Interaction and Web — CSC 210, CSC 212

 

In addition to the three advanced courses, a B.S. candidate must complete one of the following:

CSC 393 - Senior Project, OR

A substitute for the senior project, which may include one of the following:

MTH 163, 164, 173, 174, or any additional Mathematics course numbered above 200

Courses 200 level or above in Electrical & Computer Engineering, Philosophy, Linguistics, Brain & Cognitive Sciences, or other computing-related discipline with advanced permission of the undergraduate program director. CIS 225 - Database Management may be used.  CIS 215 may not be used.

4.4 Honors Research in Computer Science

The Computer Science Honors Research program is a version of the B.S. degree program in which honors-level coursework and a senior research thesis are required.  The degree of honors awarded (Ňhonors in researchÓ,  Ňhigh honors in researchÓ, or Ňhighest honors in researchÓ) is determined by the Computer Science faculty in consultation with the student's honors committee. The quality of the thesis, its presentation, and other CSC research and publications throughout the student's undergraduate career are all considered. The curricular component of the research honors program consists of the courses CSC 200H, either CSC 391H or 393H, and CSC 395H.  Each of these courses is 4.0 credit hours.

Steps to complete the program are as follows:

1. Complete CSC 200H, usually in the sophomore year, as an introduction to computer science research.

2. Find and consult with a Computer Science faculty research advisor.  Formulate and refine a research topic.  Recruit one other Computer Science professor as a second thesis committee member.

3. Submit a thesis proposal to the thesis committee, and obtain a signed honors thesis approval form after whatever revisions result from the committee's advice.  This phase should be completed by (and preferably before) the Fall semester of the senior year. Register for independent study (CSC 391 - Honors Research) or senior project (CSC 393H - Honors Senior Project), and complete coursework.

4. Once the proposal is approved and related relevant coursework (including CSC 391H or CSC 393H) is completed, enroll in CSC 395H (Honors Thesis) by completing an independent study form and submitting it to the registrar.  Declare your intent to complete the honors curriculum by submitting the signed thesis approval form to the Undergraduate Liaison in the Undergraduate Program Office (CSB 735).  (Under special circumstances, CSC 391H or CSC 393H may be taken in the same semester as CSC 395H.)

5. In CSC 395H, write or complete an honors thesis in the style of a scientific journal article. The written thesis must be given to the thesis committee no later than April 15th of the graduating year.

6.  Present the thesis in a public seminar and successfully defend it in a private oral examination by (at least) the thesis committee and an additional faculty member chosen by the departmental chair.

7. Maintain a 3.3 GPA over the CSC B.S. concentration courses (the twelve courses the student has formally declared as the BS). Upper level writing courses are not included in this calculation though they appear on the concentration form.

4.5 Sample B.S. Programs

Following are three sample B.S. programs, emphasizing systems, theory, or AI in the advanced course selection (advanced courses are marked ŇACÓ below).  Note that these are only samples, and that other paths through the degree are possible.

Sample program with an advanced course emphasis in systems:

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 (B.S.), 2 electives.

 

3rd Year:         Fall: CSC 282 (Core), MTH 165 (B.S.), CSC 254 (Core), 1 elective;

                        Spring: CSC 200 (B.S.) or CSC 280 (Core), CSC 242 (Core), 2 electives.

 

4th Year:         Fall: CSC 257 (AC1), CSC 256 (AC2), 2 electives;

                        Spring: CSC 258(AC3), CSC 393 (B.S.), 2 electives.

Sample program with an advanced course emphasis in theory:

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 (B.S.), 2 electives.

 

3rd Year:         Fall: CSC282 (Core), CSC 286 (AC1), 2 elective;

                        Spring: CSC 252 (Core) or CSC200 (B.S.), CSC 284 (AC2), 2 electives.

 

4th Year:         Fall: CSC 254 (Core), CSC 287 (AC3), 2 electives;

                        Spring: MTH 165 (B.S.),  CSC 242 (Core), CSC 393 (B.S.), 1elective.

Sample program with an advanced course emphasis 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 (B.S.) or CSC 280 (Core), 2 electives.

 

3rd Year:         Fall: CSC 282 (Core), MTH 165 (B.S.). 2 electives;

                        Spring: CSC 280 (Core) or CSC 200 (B.S.), CSC 252 (Core), 2 electives.

 

4th Year:         Fall: CSC 244 (AC1), CSC 254 (Core), 2 electives;

                        Spring: CSC 246 (AC2), CSC 249 (AC3), CSC 393 (B.S.), 2 electives.

 

5. Curriculum for the B.A. Degree

The B.A. curriculum is described in terms of tracks.  A track is an approved set of at least three related advanced courses. Tracks allow students to focus their interests and to take advantage of the many other disciplines at UR (music, biology, political science, optics, brain and cognitive sciences, etc.) for which computing is a powerful enabler. In order to earn a B.A., a student must complete:

One approved track;

All of the prerequisite courses for the track; and

Additional courses as necessary in order to reach a total of 12 major courses. 

The set of 12 major courses includes all Computer Science courses taken by the student, subject to a limit of 2 independent study courses, and including up to 2 courses from other disciplines that appear in the studentŐs chosen track or track prerequisites. At least two of the twelve major courses taken for the degree must be CSC courses from the list ŇCore Course Requirements for the B.S. DegreeÓ (currently 173, 200, 242, 252, 254, 280, and 282). No more than two of the major courses in Computer Science may be numbered lower than CSC172. All of the track courses and courses counting toward the 12 major courses must be taken for a grade and not on a pass/fail basis.  All 12 will count toward their Computer Science GPA. No more than two of the 12 courses for the B.A. can be completed at other institutions. If transfer courses are taken while in residence, they must be pre-approved by the undergraduate program director.

There are no course requirements before entry into the program, but two CSC courses above the level of 130 must be passed in order to enjoy the full privileges of a CSC major (non-expiring accounts, lab space, free printing, etc.).

5.1 Pre-Approved Tracks

A student may chose one of the pre-approved tracks described in this section, or propose a new track for approval, as described in Sec 5.2.  The prerequisites for each Computer Science track course are noted after the course name below.  For prerequisites for non-Computer Science track courses, students should consult the appropriate department offering the course.

 

Artificial Intelligence and Machine Vision: (Choose three or more)

CSC 244 - Logical Foundations of AI: CSC 173, CSC 242

CSC 245 - Foundations of Vision (Cross-listed from BCS 222): MTH 162

CSC 246 – Machine Learning: CSC 242, MTH 165

CSC 249 – Machine Vision: CSC 242, MTH 161

CSC 29X - Robotics: CSC 242

 

Natural Language Understanding: (Choose three or more, including at least one CSC course)

CSC 244 - Logical Foundations of AI: CSC 173, CSC 242

CSC 246 – Machine Learning: CSC 242, MTH 165

CSC 247 - Natural Language Processing: CSC 242

CSC 248 - Statistical Speech and Language Processing: CSC 172, CSC 242

BCS 152 - Language and Psycholinguistics **

BCS 259 - Language Development **

BCS 261 - Language use and Understanding **

LIN 210 - Introduction to Language Sound Systems  **

LIN 220 - Introduction to Grammatical Systems **

 

Graphics and Human-Computer Interaction: (Choose three or more)

CSC 131 - Recreational Graphics

CSC 212 - Human-Computer Interaction: CSC 161 or CSC 171

CSC 210 - Web Programming: CSC 161 or CSC 171

MTH 215 - Fractals and Computer Graphics **

 

Theory of Computation: (Choose three or more)

CSC 284 - Advanced Algorithms: CSC 282

CSC 286 - Computational Complexity: CSC 280

CSC 287 - Advanced Modes of Computation: CSC 286

MTH 248 - Theory of Graphs  **

 

Computer Systems: (Choose three or more)

CSC 255 - Advanced Programming Systems: CSC 254

CSC 256 - Operating Systems: CSC 252

CSC 257 - Computer Networks: CSC 252

CSC 258 - Parallel and Distributed Systems: CSC 252

ECE 201 - Advanced Computer Architecture **

 

Computer Security: (Choose three or more)

CSC 257 - Computer Networks: CSC 252

CSC 281 - Cryptography: CSC 161 or CSC 171, CSC 280

CSC 29x - Introduction to Computer Security: CSC 172

CSC 299 - Social Implications of Computing

 

Computational Science: (Choose three or more, including at least one CSC course)

CSC 258 - Parallel and Distributed Computing: CSC 252

CSC 296 - Introduction to Database Systems: CSC 161 or CSC 171

 BIO 266 - Tree of Life **

PHY 256 - Computational Physics **

OPT 211 - Computational Methods in Optics **

ME 211 - Computational Methods in Engineering **

BME 221 - Biomedical Computation **

CHE 242 - Introduction to Molecular Simulation **

** No more than two non-CSC courses may count toward the 12 courses for the B.A., including prerequisites.

5.2 Creating New Tracks

In consultation with a faculty member or the departmentŐs undergraduate advisor, a student may design and propose a new track for approval by the undergraduate program director.  The general requirements for a new track are that it reflects a coherent area of study and contains at least three advanced courses.  The advanced courses that are in Computer Science must be outside our introductory courses (Sec. 2) and also outside our B.S. core courses (Sec. 3.2).  Note that the prerequisites for the advanced courses will, in general, involve some of our core courses.  Advanced courses for a new track from disciplines other than Computer Science should in general be at the 200 level or higher. Students together with the undergraduate department advisor may design and propose a new track for approval by the undergraduate program director.

5.3. Getting Started in the BA

Students begin the B.A. by taking an introductory sequence of Computer Science courses through CSC 172. 

We recommend that B.A. students take the following the three courses in order to obtain breadth in computer science, and because these courses appear in the prerequisites of many tracks:

CSC 242 - Artificial Intelligence

CSC 252 - Computer Organization

CSC 282 - Design and Analysis of Efficient Algorithms

Beyond these recommendations, students should plan their B.A. for an existing or new track in consultation with the departmentŐs undergraduate advisor.  After choosing a track, make a list of all of its courses and prerequisite courses in Computer Science and other departments.  Determine the semester you will take each required courses during your time in the major.  Finally, determine when you will have time to take any remaining major courses (needed to reach the total of 12 major courses) and electives.  Note that the special topics courses, CSC 190-199 and CSC 290-299, may be taken for credit more than once if the topics of the offerings differ.  New special topics offerings appear almost every semester.

6. Upper-Level Writing Requirement for Computer Science Majors

Every Computer Science major must develop, in consultation with his or her faculty 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:

á      Courses in other departments with a level of writing experience meeting the standard described above. Courses that other departments have labeled with a W as satisfying their departmental upper-level writing requirement are likely to be satisfactory, but must be checked for availability and may be vetoed by the advisor on the basis of insufficient or inappropriate content. Courses not labeled by other departments with a W may still be acceptable, but must be approved by the advisor as satisfying the Computer Science requirements.

á      Designated courses in Computer Science. Each semester the Computer Science Department Curriculum Committee may designate certain courses as satisfying the upper-level writing requirement. The set of such courses may vary from semester to semester, and from instructor to instructor. All such courses must meet the standard described above; designation by the Computer Science Curriculum Committee will simply relieve the advisor of the need for verification. Students may also register for CSC 391W (Writing in Computer Science), which is a .5 credit course that can be added to other CSC courses, with permission of instructor.  This will allow for separate grading of writing for any given course.

á      Creation of a research paper. A student may, under the supervision of a faculty member, be an author or a principal co-author of a research paper submitted (with the supervisorŐs approval) to a professional journal or conference, or published by the department as a technical report. Such reports of necessity require significant feedback and revision. Given the resulting level of quality, the advisor may waive the 25-page threshold.

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.

7. Computer Science Minor

The Minor requirements are satisfied by any six CSC courses above the level of 130 (except for CSC390 - Supervised Teaching).

8. Clusters in Computer Science

The Rochester curriculum includes clusters of three related courses in a discipline. Computer Science currently offers many such clusters. All courses in the college fall into the categories of Natural Science, Humanities, and Social Science. If your major is Computer Science (Natural Science), you will need a 3-course cluster in both the Humanities and Social Science areas. If you need a Natural Science cluster, the following CSC clusters will help you fulfill this requirement.

      Ľ     Foundations of Computer Science (N4CSC001): CSC 171, CSC 172, CSC 173. This is the main course sequence leading into the Computer Science B.S. degree.  It provides a thorough overview of foundational computer science techniques and issues. Prerequisite: none.

      Ľ     Computer Systems (N4CSC004): Either CSC 171 or CSC 173, plus CSC 172 and CSC 252. 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.

      Ľ     Business Computing (N4CSC002):  CSC 108 is required; Choose one: (CIS 215 or CSC 225); and choose one: (CSC 161, 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.

á      Computer Science and Art (N4CSC009): Choose one: (CSC108, CSC131); choose one: (CSC166, CSC198 (Console Game Programming), or CSC198 (Computational Models of Music)), and also choose one: (CSC161, CSC170 or CSC171). This cluster introduces students to the use of computers in visual art and music.

á      Computing for the Social Sciences (N4CSC010): Choose one: (CSC108, CSC199, CSC190B), and choose one: (CSC161, CSC170, CSC171) and choose one (PSC200, PSC201, STT211, STT212, STT213). This cluster introduces students to powerful software packages and fundamentals of computer programming.  There is a special emphasis on computation done in the context of the social sciences.

á      Algorithms (N4CSC011): Choose one: (MTH150, MTH162 or MTH172Q) and choose one: (CSC161, CSC171, CSC 160) and choose one: (CSC 281, CSC 282). Emphasizes algorithmic thought, use of data structures and the design and analysis of efficient algorithms, including cryptography.

á      Human Computer Interaction (N4CSC013): Required: Human Computer Interaction (CSC212 or the old number of CSC290):  Choose Two of the following: (CSC161, CSC171, CSC170, or CSC210). This cluster teaches the program and design tools for Human Computer Interaction.

á      Computer Graphics (N4CSC014):  Required: CSC108; Choose two (CSC131, CSC166/EAS106, CSC298). Teaches the use of modern computational systems as a tool for creative artistic expression.  Focuses on 3D computer graphics and animation techniques.  Suitable for students with an interest in creating animated video or interaction digital media (computer games).

á      Computational Problem Solving (N4CSC015):  CSC 108; either CSC 161 or CSC171; CSC 172. An introduction to problem solving through standard computer applications and computer programming.  Suitable for students in a wide variety of disciplines.

á      Management of Data (N4CSC016): Choose one: (CSC 161 or CSC171); Required: CSC172; choose one:  (CSC 29X Intro to Database Systems, CIS 215 or CIS 225).  Computer programming and software packages with an emphasis on the application of databases and information systems to problems in business and commerce.

9. Opportunities

There are several opportunities available for students in Computer Science

9.1 KEY Scholars

KEY (Kauffman Entrepreneurial Year) Scholars: The Kauffman Entrepreneurial Year (KEY) Program offers selected students a fifth, tuition-free, year of college to pursue entrepreneurial endeavors. Qualified UR students may propose to devote as much as an entire academic year to internships, special projects, business plan development, research into various facets of entrepreneurship, or analysis of how culture and public policy influence entrepreneurial activity. Students may apply from the time that they have been accepted into a major through the first semester of their senior year.

9.2 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 B.S. requirements, and possibly some of the graduate course requirements, within the first 4 years. The fifth year is devoted to graduate courses, research, and a final exam, thesis, or equivalent.

9.3 GEAR (Graduate Engineering at Rochester)

The GEAR program provides selected students with an assurance of admission into one of eight engineering master's programs at the Hajim School of Engineering and Applied Sciences: Biomedical Engineering, Chemical Engineering, Computer Science, Electrical and Computer Engineering, Materials Science, Mechanical Engineering, Optics, or Technical Entrepreneurship and Management (TEAM).

9.4 Industry Practicum

An elective industrial partnership program has been developed that allows students to spend six to eight  months (usually a summer and an adjacent semester) working in an industrial setting allowing students to integrate education with paid experience before graduation.  Graduation thus is delayed one semester. Interested students should meet with the departmentŐs undergraduate advisor to plan their studies to ensure that all their academic program requirements are met despite the semester away.

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

10. Course Descriptions

CSC 108. Computer Applications. An introduction to computer applications in business and graphic design. Students will begin by learning the basics and some advanced functions of Microsoft Word, Excel, and Powerpoint. The class then progresses through the Adobe graphic design applications Photoshop, After Effects, and Flash. In learning these applications, students are introduced to topics such as computer graphics, file compression, and animation.  Not open to officially declared CSC majors. No prerequisites (4 hours; Fall/Spring).

CSC131. Recreational Graphics I. A hands on introduction to 3D computer graphics and animation techniques taught from a user point of view. Topics include 3D modeling, animation, and simulation. Assessment based on projects. No written exams. No previous programming or graphics experience required. (4 hours, Spring).

CSC160. Engineering Computing. This course provides an introduction to MATLAB programming, data collection hardware, and data analysis.  Exercises are based on problems from a variety of engineering disciplines, including electrical, mechanical, and chemical engineering.  Although this course was designed for freshman engineering majors, it is appropriate for students in any discipline interested in practical scientific programming and data analysis.  (Spring)

CSC161. The Art of Programming. Organized thinking, creative problem solving, and the precise description of solutions are valuable skills in academia and life. The formulation and solution of problems using computers is increasingly important in all artistic and scholarly fields. We introduce core concepts and techniques of programming as a way to develop these skills, as basis for further CS study, and for application to other fields.  Lab required. No prerequisites (Fall and Spring).

CSC 166.  Video Game Programming. Do you like to play video games? Why not learn how to make one? This course is a hands-on lab based introduction to software engineering and computer programming using the development of computer/video games as the application area. The course is taught using the C# language with the XNA game development framework targeting applications for the XBOX360 game platform. Students will learn the basics of computer programming and the basics of the management and development processes of software engineering. This course is intended for students with little or no previous programming experience.

 

 CSC 170.  Introductory Computer Programming. The course is a hands-on introduction to computer programming using the JAVASCRIPT computer language in the context of web pages. You will be learning to program a computer by writing web pages that include computer programs. Topics covered will include Web 2.0 concepts, web browser basics, XHTML, CSS, Javascript, computer systems architecture, etc.   No prerequisites.  (4 hours; Fall)

CSC171.The Science of  Programming.   Discovering, formulating, and exploiting the structure of problems to aid in their solution by computer -- an introduction to algorithmic problem solving and computer programming in Java. Lab required. No prerequisites.  (Fall only)

CSC172.The Science of Data Structures. Abstract data types (e.g., sets, mappings, and graphs) and their implementation as concrete data structures in Java.  Analysis of the running times of programs operating on such data structures, and basic techniques for program design, analysis, and proof of correctness (e.g., induction and recursion).  Lab required. Prerequisite: CSC 171 or equivalent; MTH 150 is recommended.  (Fall only)

CSC 173: Computation and Formal Systems. We investigate several formal systems influential in computer science, and also some of their applications (e.g. inspiring and providing the foundation for a computer programming style, or providing the basis for solving important practical problems like communications protocols, compiling, systems analysis, graphics ...) In more detail, we study: propositional and predicate logic and applications like the Prolog language and circuit design; formal languages and automata theory (FLAT) and applications like scanners and parsers, using the C Language; lambda calculus and the Scheme language with an AI application; matrices and the Matlab language, with applications in robotics or graphics. Prerequisite: CSC 172.  (Fall)

CSC191-199.Issues in Computing. Rotating topics in computer science that do not require prior computing experience.  This course may be repeated for credit for different topics. . Prerequisite: none (Fall and Spring;) Courses have been separated by broad subject area and will be assigned individual course titles when offered:

á      191: Issues in Cognitive Science

á      192: Issues in Programming Languages

á      193: Issues in Programming Systems

á      194: Issues in Theory of Computation

á      195: Issues in Numerical Analysis

á      196: Issues in Applications of Computer Science

á      197: Issues in Artificial Intelligence

á      198: Issues in Digital Media

á      199: Issues in Computer Science (Other)

Fall 2013

Spring 2014

CSC 200/200H: Undergraduate Problem Seminar. Intensive seminar on cooperative problem solving. Overview of the subdisciplines and the research of the University of RochesterŐs computer science faculty. 200H required for the Honors B.S. in Computer Science; 200 required for the B.S. Students taking CSC 200H may have additional reading, assignments or projects. Prerequisites: all pre-major requirements.  (4 hours; Spring)

CSC 210:  Web Programming An introduction to the technology, design and science of web programming.  This course will cover the base material needed to create and deploy secure, usable database-driven web applications - including topics selected from programming, networking, databases, security, and usability.  Specific technologies and languages covered will include HTML, Javascript, Document Object Model (DOM), PHP, MySQL, Ruby on Rails, XML, AJAX, and Flash. Prerequisite:  CSC 161 or CSC 171 or permission of the instructor. (4 hours, Spring

CSC212/412:  Human Computer Interaction. This course will explore the design, implementation, and evaluation of user interfaces. Students will study the theoretical methods for interface design and evaluation, including requirements gathering, usability heuristics, user interface inspections, usability studies, information visualization, and prototyping. Case studies of interface successes and failures will augment theory with practical experiences. Students will apply this methodology to assignments in the design, implementation, and evaluation cycle. Students taking this course at the graduate level will have additional readings and assignments.  Prerequisite:  CSC 171 or permission of instructor. Programming experience is assumed.

CSC 242: Artificial Intelligence. Introduces fundamental principles and key applications of artificial intelligence, including heuristic search, automated reasoning, machine learning, neural networks and machine perception.  Programming project include building autonomous software agenst in a virtual world.  This course is a prerequisite for advanced AI courses. Prerequisites: MTH 150 and CSC 172. Same as BCS 232. (Spring)

CSC 244/444: Logical Foundations of Artificial Intelligence. An introduction to the logical foundations of AI, including first-order logic, search, knowledge representation, planning. Students taking this course at the 400 level will be required to complete additional readings and/or assignments, including a significant project or essay. Prerequisites: CSC 173 and 242. (4 hours; Fall)

CSC 246/446: Machine Learning. This course presents the mathematical foundations of AI, including probability, decision theory and machine learning. Prerequisites: CSC 242 and MTH 165. (Spring)

CSC 247/447: Natural Language Processing. An introduction to natural language processing: constructing computer programs that understand natural language. Topics include parsing, semantic analysis, and knowledge representation. CSC 447, a graduate-level course, requires additional readings and assignments. Prerequisite: CSC 242.  (4 hours; Spring or Fall; alternating years with CSC 248/448; cross-listed as BCS 235/535, LIN 247/447)

CSC 248/448: Statistical Speech and Language Processing. An introduction to statistical natural language processing and automatic speech recognition techniques.  This course presents the theory and practice behind the recently developed language processing technologies that enable applications such as speech-driven dictation systems, document search engines (e.g., finding web pages) and automatic machine translation. Students taking this course at the 400 level will be required to complete additional readings and/or assignments. Prerequisites: CSC 172 and CSC 242.  (4 hours; Fall or Spring;  Cross-listed with BCS 233/ BCS 533, LIN 248/448; alternating years with CSC 247/447)

CSC 249/449: Machine Vision. Fundamentals of computer vision, including image formation, elements of human vision, low-level image processing, and pattern recognition techniques. Advanced topics include modern visual features, graphical models, model-based and data-driven approaches, and contextual inference, as well as examples of successes and challenges in applications. Prerequisites: MTH 161 and CSC 242.  (4 hours; Fall or Spring; may not be offered every year; cross-listed as BCS 236/536)

CSC 252: Computer Organization. Introduction to computer architecture and the layering of hardware/software systems. Topics include instruction set design; logical building blocks; computer arithmetic; processor organization; the memory hierarchy (registers, caches, main memory, and secondary storage); I/O—buses, devices, and interrupts; microcode and assembly language; virtual machines; the roles of the assembler, linker, compiler, and operating system; technological trends and the future of computing hardware. Several programming assignments required. Prerequisites: MTH 150 and CSC 172.  (4 hours; Spring)

CSC 253/453 Dynamic Languages and Software Development. Modern software is increasingly constructed from existing components, dynamically composed and run in a networked environment.  The course teaches concepts, principles and practices of dynamic programming languages and modern software design. The topics include advanced techniques in procedural, functional, and object-oriented programming; composition of functions, objects and modules; design patterns; software process and agile methods; tools for collaborative software development; and select topics in mobile and on-line software development.  Course assignments consist of individual and group projects and presentations, including the development of collaborative software (groupware). Meets jointly with CSC 453, a graduate-level course that requires additional readings and assignments. Prerequisites:  CSC 252, CSC 254. Offer alternate years with CSC 255/455. (4 hours; Fall or Spring)

CSC 254/454: Programming Language Design & Implementation. Design and implementation of programming languages, with an emphasis on imperative languages and on implementation tradeoffs.  In-depth examination of "how programming languages work."  Topics include fundamental language concepts (names, values, types, abstraction, control flow); compilation and interpretation (syntactic and semantic analysis, code generation and optimization); major language paradigms (imperative, object-oriented, functional, logic-based, concurrent). Course projects include assignments in several different languages, with an emphasis on compilation issues. Meets jointly with CSC 454, a graduate-level course that requires additional readings and assignments.  Prerequisite: CSC 173; CSC 252 recommended.  (4 hours; Fall)

CSC 255/455:  Software Analysis and Improvement. Programming is the automation of information processing.  Program analysis and transformation is the automation of programming itself---how much a program can understand and improve other programs.  Because of the diversity and complexity of computer hardware, programmers increasingly depend on automation in compilers and other tools to deliver efficient and reliable software. This course combines fundamental principles and (hands-on) practical applications. Specific topics include data flow and dependence theories; static and dynamic program transformation including parallelization; memory and cache management; type checking and program verification; and performance analysis and modeling.  The knowledge and practice will help students to become experts in software performance and correctness.  Course projects include the design and implementation of program analysis and improvement tools. Meets jointly with CSC 455, a graduate-level course that requires additional readings and assignments.  Prerequisite:  CSC 254; CSC 252 recommended.  (4 hours; Spring)

CSC 256/456: Operating Systems Principles of operating system design, explored within the practical context of traditional, embedded, distributed, and real-time operating systems.  Topics include device management, process management, scheduling, synchronization principles, memory management and virtual memory, file management and remote files, protection and security, fault tolerance, networks, and distributed computing. CSC 456, a graduate-level course, requires additional readings and assignments. Prerequisite: CSC 252.  (4 hours; Spring)

CSC 257/457:  Computer Networks. Introduction to computer networks and computer communication: Architecture and Protocols:. Design of protocols for error recovery, reliable delivery, routing and congestion control. Store-and-forward networks, satellite networks, local area networks and locally distributed systems. Case studies of networks, protocols and protocol families. Emphasis on software design issues in computer communication.  Prerequisite: CSC 252 (4 hours; Fall or Spring)

CSC 258/458: Parallel and Distributed Systems. Principles of parallel and distributed systems, and the associated implementation and performance issues. Topics covered will include programming interfaces to parallel and distributed computing, interprocess communication, synchronization, and consistency models, fault tolerance and reliability, distributed process management, distributed file systems, multiprocessor architectures, parallel program optimization, and parallelizing compilers. Students taking this course at the 400 level will be required to complete additional readings and/or assignments.  Prerequisites: CSC 254, CSC 256, and consent of instructor.  (4 hours; Fall or Spring; may not be offered every year)

CSC 260/460:  Topics in Natural Language Dialog Systems.  This course will examine recent research in computational linguistics and artificial intelligence on natural language dialog systems.  Students will take turns leading the discussion of current research papers.  Undergraduates taking the course for credit will also be required to prepare a written review of one of the papers.  Graduates taking the course may have additional readings or assignments.  It may be repeated for credit with permission of the instructor. (Spring) Prereq.:  CSC 244 and CSC 247. 

CSC 266/466: CPU Parallel Programming Using C/C++ GPU micro-architecture, including global memory, constant memory, texture memory, SP, SM, scratchpad memory, L1 and L2 cache memory, multi-ported memory, register file, and task scheduler. Parallel programming applications to parallel sorting, reduction, numeric iterations, fundamental graphics operations such as ray tracing. Desktop GPU programming using Nvidia's CUDA (Compute-Uniform Device Architecture). CPU/GPU cooperative scheduling of partially serial/partially parallel tasks. No midterms or written exams. Course consists of seven hands-on projects using CUDA. (Fall Crosslisted as ECE 206/406) Prerequisites: ECE 200, or ECE 216, or ECE 201/401, or equivalent. Familiarity with assembly language and C programming language. Instructor approval.

CSC 280: Computer Models and Limitations. This course studies fundamental computer models and their computational limitations. Finite-state machines and pumping lemmas, the Chomsky hierarchy, Turing machines and algorithmic universality, noncomputability and undecidability, tradeoffs between power and formal tractability. Prerequisites: CSC 162 OR CSC 172 OR MTH 172. (4 hours; Spring)

CSC 281/481: Intro to Cryptography. The modern study of cryptography investigates techniques for facilitating interactions between distrustful entities. With the advent of large-scale networked systems such as the Internet, such techniques have become indispensable---enabling, for instance, electronic voting, privacy-preserving auctions, internet banking, satellite radio/television and more. In this course we introduce some of the fundamental concepts of this study. Emphasis will be placed on the foundations of cryptography and in particular on precise definitions and proof techniques. Prerequisites: (MTH150 OR MTH162) AND (CSC171 or programming experience)

CSC 282: Design and Analysis of Efficient Algorithms. How does one design programs and ascertain their efficiency? Divide-and-conquer techniques, string processing, graph algorithms, mathematical algorithms. Advanced data structures such as balanced tree schemes. Introduction to NP-completeness and intractable combinatorial search, optimization, and decision problems. Prerequisites CSC 162 OR CSC 172 OR MTH 172.  (4 hours; Fall)

CSC 284/484: Advanced Algorithms. Advanced study of design and analysis of algorithms. Topics typically include: growth of functions; recurrences; probabilistic analysis and randomized algorithms; maximum flow; sorting networks; expander graphs; matrix operations; linear programming; discrete Fourier transform; number-theoretic algorithms; string matching; computational geometry; NP-completeness; approximation algorithms.  Students taking this course at the 400 level may be required to complete additional tests, readings or assignments. Prerequisite: CSC 282.  (4 hours; Spring)

CSC 286/486: Computational Complexity. The difference between computable and uncomputable problems and between feasible and infeasible problems.  Regarding the latter, what properties of a problem make it computationally simple?  What properties of a problem may preclude its having efficient algorithms? How computationally hard are problems?  Complete sets and low information content; P=NP?; unambiguous computation, one-way functions, and cryptography; reductions relating the complexity of problems; complexity classes and hierarchies.  Students taking this course at the 400 level may be required to complete additional tests, readings, or assignments. Prerequisite:  CSC280.

CSC 287/487:Advanced Modes of Computation. Advanced modes of computation such as probabilistic computation, counting-based computation, semi-feasible computation, nondeterminism, computation trees, and parallel access. CSC 487, a graduate-level course, requires additional readings and assignments. Prerequisite: CSC 284 or CSC 286.  (4 hours; Fall or Spring; may not be offered every year)

CSC 291-299: Topics in Computer Science. This course covers special topics of current interest and usually differs each time it is offered. Courses have been separated by broad subject area and will be assigned individual course titles when offered: Prerequisite: varies with topic.  (4 hours; Fall and/or Spring; may not be offered every semester)

á      291: Topics in Cognitive Science

á      292: Topics in Programming Languages

á      293: Topics in Programming Systems

á      294: Topics in Theory of Computation

á      295: Topics in Numerical Analysis

á      296: Topics in Applications of Computer Science

á      297: Topics in Artificial Intelligence

á      298: Topics in Digital Media

á      299: Topics in Computer Science (Other)

Fall 2013

á       (297) Introduction to Data Mining. Fundamental concepts and techniques of data mining, including data attributes, data visualization, data pre-processing, mining frequent patterns, association and correlation, classification methods, and cluster analysis. Advanced topics include outlier detection, stream mining, and social media data mining. CSC 577, a graduate-level course, requires additional readings and a course project. 

 

á      (299) Creative Computing. Quick! How much would a tunnel under Lake Ontario cost? How many people probably touched that orange you just bought at Wegmans? Can the military's satellites really read your license plate from orbit? Explores the creative use computational mechanisms and information sources to obtain rough estimates and feasibility analyses for interesting questions practical problems, and looks at the technological basis of the art of measurement.

Spring 2014

á       (293) Advanced Topics in Memory Systems. Advanced topics in the organization, architecture, and implementation of modern memory subsystems. Topics include power, performance, reliability, and QoS issues in DRAM memory systems and Flash-based SSDs; high-performance memory controllers and interfaces; memory system design for datacenters and enterprise systems; and an introduction to emerging resistive memory technologies. Prerequisites:  CSC 252 and ECE 201/401, or permission of instructor.

 

á      (296) Database Systems. This course presents the fundamental concepts of database design and use. It provides a study of data models, data description languages, and query facilities including relational algebra and SQL, data normalization, transactions and their properties, physical data organization and indexing, security issues and object databases. It also looks at the new trends in databases. The knowledge of the above topics will be applied in the design and implementation of a database application using a target database management system as part of a semester-long group project.

CSC 390: Supervised Teaching.

CSC 391: Independent Study in Computer Science. Special work arranged individually with a faculty member.  (Fall and Spring)

CSC 391H:  Honors Independent Study in Computer Science. Special work for Honors B.S. arranged individually with a faculty member.  (Fall and Spring)

CSC 393: Senior Project. A one-semester senior project for computer science majors. Each project is arranged individually with a faculty advisor. Prerequisite: consent of the advisor.

CSC393H: Honors Senior Project. A one-semester senior project for computer science majors completing the Honors B.S.. Each project is arranged individually with a faculty advisor. Prerequisite: consent of the advisor.

CSC 394: Internship.

CSC 395: Research in Computer Science. Special problems may be arranged for advanced students wishing to do individual research. Requires consent of the Department.

CSC 395H:  Honors Thesis Writing. 

CSC 396: Research in Computer Science. Fellowship program for summer research, typically off-campus. Special application required; deadline February 15. Permission of instructor required.