The Undergraduate Program
in Computer Science
Computer Science Department
University of Rochester
Rochester, NY 14627-0226
(585) 275-4505
http://www.cs.rochester.edu
(Updated 8/12/09)
1. 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-five 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 principles or practice. The B.S. gives students a solid and rigorous background in computer science principles, including the requisite mathematical foundations, problems, and solution techniques used in the various areas of the discipline. The B.A. and Minor are inherently highly flexible and encourage customization to fit individual needs and interests.
This document describes the degrees, the course offerings that support the degrees, and the course pre-requisites. It also shows some possible routes to completion of the majors.
2. Program Overview
The goal of our Bachelor of Science degree 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.
During the first two years of the B.S. 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.
Our Bachelor of Arts and Minor degrees are flexible in their course content. Computing can be a useful tool in any area of arts, sciences, engineering, and humanities. The B.A. and Minor support students who have strong interests in the computational aspects of another field. They can also serve students who want to focus on particular aspects of CSC without committing to the breadth inherent in the B.S. degree.
We expect that many of students will become intimately involved in the Department's research program. Through the Undergraduate Problem Seminar (CSC 200), our Honors degree program, joint undergraduate-graduate courses, or by work in the area of interest supported by a B.A. track, 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.
Access to the Department's research laboratory, faculty, and research projects benefits 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 research experience. Of course, the Department's research programs benefit as well; advanced undergraduates will usually be working in exactly the area for which they have the greatest aptitude, interest, and---via their specialization track and advanced courses---knowledge.
3. Curriculum for B.S. Degree in Computer Science
3.1. Pre-Major Requirements for
B.S. Degree
The B.S. program requires a set of pre-major courses that must be completed before acceptance into the program. The following courses cover the formal foundations of computer science and the basic techniques of programming:
* MTH 150 - Discrete Mathematics
* MTH 161 - Calculus I
* MTH 162 - Calculus II
* CSC 171 – The Science of Programming (or AP credit, programming experience, etc.)
* CSC 172 – The Science of Data Structures
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. Students who plan to complete a computer science B.S. must not take these courses on a pass/fail basis. 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 pre-B.S. 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.
3.2. Core Courses for B.S. Degree
To satisfy the requirements for the B.S., students must take the following core courses:
* 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 173 - Computation and Formal Systems
For the B.S. degree, students must take the following additional courses:
* CSC 200/200H - Undergraduate Problem Seminar
* MTH 165 - Linear Algebra with Differential Equations
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.
3.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 (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, logic, number theory and cryptology, combinatorics, and graph theory. Courses 200 level or above in other related disciplines (e.g., philosophy, linguistics, brain & cognitive sciences, 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.
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.
1. Complete CSC 200H, usually in the
sophomore year, as an introduction to the department and to CS research.
2. Find and consult with a CSC
faculty research advisor.
Formulate and refine a research topic. Recruit one other CSC 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 definitely be completed by, preferably
before, the Fall semester of the senior year. Register for independent study
(CSC391H) or senior project (CSC393H) and complete coursework.
4. Once the proposal is approved and
related relevant coursework (including CSC391H - Honors Research or CSC393H
Honors Senior Project) is completed [note
2], enroll in CSC395H (Honors Thesis) and register intent to complete the
honors curriculum by submitting the signed thesis approval form to the
Undergraduate Liaison in the Undergraduate Program Office (CSB735).
5. In CSC395H, 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 all CSC B.S.
concentration courses [note 3].
[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 twelve
courses the student has formally declared as the BS concentration (6 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.
3.5. 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 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), 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.
The B.S. degree with a track 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 280 (Core), CSC 200 (B.S.) or CSC 252 (Core), 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.
Similarly, for a track 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.
4. Curriculum for the B.A. Degree
4.1. Tracks and Foundations
The
definition of the B.A. curriculum is simple: it requires (1) a coherent track of at least three courses beyond
(or outside of) foundational material (as defined below) and (2) whatever other
courses are required to satisfy prerequisites and to reach a total of 12.
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.
There
are no course requirements before entry into the program, but two 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.).
Supervised
teaching (390) and ``service'' courses (those numbered 130 and below) cannot be
used to satisfy any of the requirements of the B.A. or Minor. 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
computer science undergraduate program director. Up to two independent study
courses may be included in the total of 12.
Foundational courses are the two 2-course introductory sequences and the first courses in Computer Science specialized fields. They should be taken as desired for exploration, and as needed to satisfy prerequisites of the courses chosen for a track. Along with their CSC prerequisites, they are:
* 161 (The Art of Programming)
* 162 (The Art of Data Structures): 161 or 171
* 171 (The Science of Programming)
* 172 (The Science of Data Structures): 161 or 171
* 173 (Computation and Formal Systems): 162 or 172
* 242 (Artificial Intelligence): 162 or 172
* 252 (Computer Organization): 162 or 172
* 254 (Programming Language Design and Implementation): 173
* 280 (Computer Models and Limitations): 173
* 282 (Design and Analysis of Efficient Algorithms): 162 or 172
A track is an approved sequence of three or more courses in CSC or a related discipline that are coherent by subject. Foundational and ``service'' courses never appear in tracks, and only two non-CSC courses may be counted as track courses. Several tracks are preapproved; these are listed below along with prerequisites for the CSC courses. New tracks may be added to the list from time to time. Students together with their departmental advisor may design and propose a new track for approval by the undergraduate program director.
4.2 Preapproved Tracks (Shown with their prerequisites)
Artificial Intelligence and Vision: (Choose three or more)
244 (Logical Foundations of AI): 173, 242.
245 (Foundations of Vision---Cross-listed from BCS 222): MTH162
246 (Mathematical Foundations of AI): 242, MTH165
249 (Sensory Motor Systems): 242, MTH161
290 (Advanced Robotics): 242
Natural Language Understanding: (Choose three or more (including at least one CSC course))
244 (Logical Foundations of AI): 173, 242
246 (Mathematical Foundations of AI): 242, MTH165
247 (Natural Language Processing): 242
248 (Statistical Speech and Language Processing): 162 or 172
BCS 152 (Language and Psycholinguistics)
BCS 259 (Language Development)
BCS 261 (Language use and Understanding)
LIN 210 (Intro. to Language Sound Systems)
LIN 220 (Intro. to Grammatical Systems)
Graphics and Human-Computer Interaction: (Choose three or more)
131 (Recreational Graphics I)
132 (Recreational Graphics II)
290 (Human-Computer Interaction): 161 or 171
BCS 228 (The Human-Machine Interface)
MTH 215 (Fractals and Computer Graphics)
Theory of Computation: (Choose three or more)
284 (Advanced Algorithms): 282
286 (Computational Complexity): 280
287 (Advanced Modes in Computation): 286
MTH 248 (Theory of Graphs)
Computer Systems: (Choose three or more)
255 (Advanced Programming Systems): 254
256 (Operating Systems): 252
257 (Computer Networks): 252
258 (Parallel and Distributed Systems): 252
ECE 201 (Advanced Computer Architecture)
Computer Security: (Choose three or more)
257 (Computer Networks): 252
290 (Introduction to Computer Security): 162 or 172
MTH 233 (Introduction to Cryptography)
PSC 340 (The Right to Privacy)
Computational Science: (Choose three or more (including at least one CSC course))
258 (Parallel and Distributed Computing): 252
290 (Introduction to Database Systems): 161 or 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)
4.3. Sample B.A. Program
The
flexible nature of the B.A. degree allows for many diverse paths to completion.
Most students with little programming experience will need to begin with
an introduction to programming course (CSC 161 or CSC 171) and a data structures
course (CSC 162 or 172) and will then choose to complete some of the
foundational requirements that would lead to the tracks of interest to them.
Students should meet with a departmental advisor to discuss their academic
goals and formulate a plan of study.
5. Computer Science Minor
The Minor requirements are satisfied by any six CSC courses above the level of 130 (except for Supervised Teaching (CSC390)).
6. Course Information
6.1. Clusters
The Rochester
curriculum includes clusters of three related courses in a discipline. Computer
Science currently offers several 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.
6.2. 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.
6.3. Course Descriptions
CSC 108. Computer
Applications for the Humanities.
A
practical introduction to computing and computer applications that supports
humanities, arts, and business. Lab required. There are no prerequisites. Leads
into these clusters: Business Computing, Computer Science and Art, and
Computing for the Social Sciences. Not open to officially declared CSC majors.
(4 hours; Fall)
CSC 109.
Computer Applications for the Sciences. A practical introduction to
computing and computer applications that supports mathematics and the physical
and social sciences. Lab required. There are no prerequisites. Leads into these
clusters: Business Computing, Computing for the Social Sciences. Not open to
officially declared CSC majors. (4 hours; 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.0 hours; Fall)
CSC132.
Recreational Graphics II. A hands on project based instruction of 3D
computer graphics and animation techniques taught from a user point of view
using the BLENDER modeling system. Topics include fluid animation,
storyboarding, sound, character rigging, and computer game design. Assessment
based on projects. No written exams. Prerequisite CSC131. (4.0 hours; 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 using the Python language as a way to develop these skills, as basis for further CS study, and for application to other fields. Lab required. No prerequisites (4.0 hours; Fall). CSC 161 replaces CSC 170 in all clusters.
CSC162. The Art of Data Structures. Understanding and utilizing standard data structures and abstractions (e.g., trees, lists, sets, vectors, stacks, and queues). Emphasizes the capabilities of various abstractions and the tradeoffs among data structures used to represent them. Lab required. Prerequisite: CSC 161 or equivalent. (4.0 hours; Spring)
CSC 171: 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. With advisor's approval, AP credit or prior experience can substitute for this course. Lab required. No prerequisites. (4 hours; Fall)
CSC 172: 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. (4.0 hours; Fall)
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. (4 hours; Fall)
CSC 190: Issues in Computing. Rotating
topics in computers science that do not require prior computing
experience. This course may be
repeated for credit for different topics. . Prerequisite: none (Fall and
Spring;):
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.
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 agent in a virtual world. This course is prerequisite for advanced AI courses. Prerequisites: MTH 150 and CSC 172. (4 hours; Spring; cross-listed as BCS 232)
CSC 244/444: Logical Foundations of Artificial Intelligence. An introduction to the logical foundations of AI including first-order logic, search, knowledge representation, and planning CSC 444, a graduate-level course, requires additional readings and assignments. Prerequisites: CSC 173 and 242. (4 hours; Fall)
CSC 246/446: Mathematical Foundations of Artificial Intelligence. This course presents the mathematical foundations of AI, including probability, decision theory and machine learning. CSC 446, a graduate-level course, requires additional readings and assignments. Prerequisites: CSC 242 and MTH 165 (the two-course sequence of MTH 163 and MTH 235 may be substituted for MTH 165). (4 hours; 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; Fall or Spring; offered in alternate academic 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; offered in alternate academic years, with CSC 247/447)
CSC 249/449: Machine Vision. Introduction to computer vision, including camera models, basic image
processing, pattern and object recognition, and elements of human vision. Specific
topics include geometric issues, statistical models, Hough transforms, color
theory, texture, and optic flow. CSC 449, a graduate-level course, requires
additional readings and assignments. 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 254: 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 languages and the modification and enhancement of a working compiler. Prerequisite: CSC 173; CSC 252 recommended. (4 hours; Fall)
CSC 255/455 - Advanced Programming Systems.
With the increasing
diversity and complexity of computers and their applications, the development
of efficient, reliable software has become increasingly dependent on automatic
support from compilers and other program analysis and translation tools. This
course covers principal topics in understanding and transforming programs at
the assembly, function, and program levels. Specific topics include data flow,
dependence, and inter-procedural analyses; resource allocation; and program
transformation for locality and parallelism. Meets jointly
with CSC 455, a graduate-level course that requires additional readings and
assignments. Prerequisites 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. Students taking this course at the 400 level will be required to complete additional readings and/or assignments. Prerequisite: CSC 252. (4 hours; Fall)
CSC 257/457: Computer Networks. Architecture and Protocols: Introduction to computer networks and computer communication. 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. CSC 457, a graduate-level course, requires additional readings and assignments. Prerequisite: CSC 252 (4 hours; Fall)
CSC 258/458: Parallel and Distributed Systems. This course will focus on the principles of parallel and distributed systems, and the associated implementation and performance issues. We will examine programming interfaces to parallel and distributed computing, memory management techniques and parallel program optimization, interprocess communication, synchronization, and consistency models, fault tolerance and reliability, distributed process management, multiprocessor architectures, and the interaction of the compiler, run-time, and hardware architecture. 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. Prerequisites: CSC 244 and CSC 247.
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 173 (4 hours; Spring)
CSC 281: Cryptography. Introduction to classical and modern cryptography. Covers classical cryptography, cryptographic foundations, private key cryptography, public key cryptography, and their applications. Prerequisites: MTH150 or equivalent, CSC 171 or equivalent. (4 hours; may not be offered every year).
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 172, MTH 150 (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. This course continues the development of the theory of computing begun in CSC 280. Topics include the formal characterization of computational hardness; one-way functions and cryptography; the complexity hierarchy; and information theory. Students taking this course at the 400 level will be required to complete additional readings and/or assignments. Prerequisite: CSC 280 (Fall).
CSC 287/487: Randomized, Parallel, and Other 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 286. (4 hours; Fall or Spring; may not be offered every year)
CSC 290: Topics in Computer Science. This course covers special topics of current interest and usually differs each time it is offered. Possible topics include robotics; software engineering, computer security, human-computer interaction, introduction to databases. Prerequisite: varies with topic. (4 hours; Fall and/or Spring; may not be offered every semester)
Fall 2009: Human Computer Interaction (290B): The course will involve the examination of the
design, implementation, and evaluation of human-computer interfaces.
Class lectures will involve studying theoretical methods for interface
design and evaluation including requirements gathering, usability heuristics, user
interface inspections, usability studies, information visualization, and
prototyping. These will be augmented with case studies of interface
successes and failures. Students will apply the theoretical knowledge to
assignments which involve portions of the design, implementation, and
evaluation cycle. Prerequisite:
CSC 171 or permission of instructor. Must be able to program in Java or C++. Spring 2010: Collaborative Software Engineering (290A). Modern software systems are often created by the
joint effort of dozens, hundreds or even thousands of individuals. Effectively coordinating the efforts of
such teams requires methods and tools that go far beyond those needed by an
individual programmer. Topics
include programming in the large; case studies from the Internet, electronic
commerce and other domains; and teamwork, including remote collaboration. The main assignments are a series of
group projects, including a final project that will be deployed and evaluated.
Prerequisites: CSC 173; CSC 254 recommended. Machines and Consciousness (290B): An
exploration of the possibility of consciousness in machines, both in the sense
of perceptual awareness and self-awareness. Readings are from the AI literature as well as from
philosophy and cognitive science, with emphasis on scientific and computational
aspects. The course will be suitable for writing credit. Prerequisites: CSC
161 or CSC 171, or prior programming experience. Advanced Robotics: (290C) This course is an
introduction to the basics of modeling, design, planning and control of
robotics systems. It includes survey coverage of relevant results from
geometry, kinematics, statics, dynamics and control theory. Lectures, readings,
labs and weekly problems sets. Prerequisites: CSC 172 or equivalent experience
required. 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: Summer Fellowship. Fellowship program for summer research,
typically off-campus. Special application required; deadline February 15.
Permission of instructor required. 7.
Prerequisite Chart Revised 5/09 8. Opportunities 8.1. 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. 8.2. Industry Practicum An elective
industrial partnership 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. 8.3. 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).
Advanced
Topics in Memory Systems
(290A). Advanced
topics in the organization, architecture, and implementation of modern
memory
subsystems. Topics include power,
performance,
reliability, and quality-of-serivce 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. The course will have a significant research component,
where
students will learn the background needed to tackle existing and
upcoming
research problems in this area, complete a project, and write a
high-quality
paper about it.
Prerequisites: CSC 252 or ECE 201/401 or permission of instructor.
