Computer Science Course Descriptions
CSC 108: Technical Computing
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.
CSC 131: Recreational Graphics
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.
CSC 161: Introduction to 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.
CSC 170: Web Design and Development
An introduction to Internet and Web technologies.
Topics include Internet transport protocols, HTML5 and CSS3,
Web page design and Website publishing. Emphasis is placed on
fundamentals, design concepts and industry standards.
Additional topics include the user experience, mobile design issues,
and copyright/intellectual property considerations.
CSC 171: Introduction to Comuter Science
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.
CSC 172: Data Structures and Algorithms
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.
Prerequisites: CSC 171 or equivalent, MTH 150.
CSC 173: Computation and Formal Systems
Investigation of 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 ...)
Prerequisites: CSC 172.
CSC 174: Advanced Front-End Web Development
"Front-end" is an industry term that refers to the focus on HTML,
programming courses. - Topics will include Information Architecture,
visual design, use of client libraries (mostly JS), and asset management
strategies; we will also cover Content Management Systems and introduce
web databases using PHP and MySQL.
Prerequisites: CSC 170.
CSC 175/275: 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.
CSC 191/291: Machines and Consciousness
This course explores 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. The course will begin with some general philosophical
and cognitive science readings, and then shift emphasis to
representational and computational aspects. Homework will include written
answers to questions, essays, and -- for 291 students only -- a project
that involves Lisp programming. The course will be suitable for
writing credit. (4 hours, Spring) Not offered every year.
CSC 199/299: Social Implications of Computing
Computers and the Internet, perhaps more than any other technology, have
transformed society over the past 50 years, with dramatic increases in
human productivity; an explosion of options for news, entertainment, and
communication; and fundamental breakthroughs in almost every branch of
science and engineering. At the same time, they have contributed to
unprecedented threats to privacy; whole new categories of crime and
anti-social behavior; major disruptions in the job market; and the
large-scale concentration of risk into systems capable of catastrophic
failure. In this discussion- and writing-oriented class, we will consider
all of this and more, with the goal of better understanding how to shape
technological change in ways that maximize the benefits and minimize
the costs. Offers upper-level writing credit in Computer Science.
CSC 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 BS premajor requirements.
CSC 210/410: Web Programming
The World Wide Web was born around 1990, so it is not much older than
most of you. In this course, we will follow the growth of the Web from
its toddler years, to early childhood, to its turbulent pre-teen and
teenage years, and finally as it begins to mature as a young adult.
Along this journey, you will learn influential Web technologies such as
and modern MVC frameworks. Even though you will be doing a lot of
programming in this course, its purpose is not to teach you to become
an expert in any particular language or framework. Web technologies
change at a blistering pace, so specifics quickly get outdated.
However, once you take this course and understand the fundamentals,
you will be able to easily pick up new technologies on the fly.
Prerequisites: CSC 172 or permission of instructor.
CSC 212/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.
Prerequisites: CSC 172 or permission of instructor.
CSC 214: Mobil App Development
Coursework covers user interface designs and functional algorithms for
mobile devices (Android) and unique user interactions using multi-touch
technologies. Object-oriented design using model-view-controller paradigm,
memory management. Other topics include: object-oriented database API,
animation, multi-threading and performance considerations.
Prerequisites: CSC 172.
CSC 229: Computational Models of Human Perception
Cross-listed from BCS 229. Please see that course for description.
Prerequisites: MTH 162, MTH 164, CSC 161 or 171;
MTH 165 or STT 213 will be helpful.
CSC 230: Robot Construction
A robot can be defined as any artificial system that moves by itself
under some sort of adaptive control. This course is intended to be a
practical exercise in robot construction, with emphasis on creation of
working robotic artifacts. The class will be divided into teams of 3-5,
each of which will work to produce a separate mechanism. The robots to be
built will be determined through discussion in the first couple of weeks.
Prerequisites: Permission of instructor and willingness to learn whatever
is necessary to complete clas robot-building project.
Basic PHY, ECE, CSC, ME courses will be helpful.
Class is capped at 20 students.
CSC 231: Robot Control
This course covers control and planning algorithms with applications in
robotics. Topics include transfer function models, state-space models,
root-locus analysis, frequency-response analysis, Bode diagrams,
controllability, observability, PID control, linear quadratic optimal
control, model-predictive control, stochastic control, forward and
inverse kinematics, dynamics, joint space control, operational space
control, and robot trajectory planning. Proficiency with Matlab/C++ is
Prerequisites: MTH 165, ECE 114 or CSC 171.
CSC 232: Autonomous Mobile Robots
This course covers models and algorithms for autonomous mobile robots.
Topics include sensors, perception, state estimation, mapping, planning,
control, and human-robot interaction. Proficiency with Matlab/C++ is
recommended. Lab required.
Prerequisites: MTH 165, ECE 114 or CSC 160 or CSC 171.
CSC 240/440: 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.
Prerequisites: CSC 172, MTH 161, CSC 242 or CSC 262 or MTH 165.
CSC 241: Topics in Comutational Neuroscience
Cross-listed from BCS 247. Please see description for that course.
This course will provide an introduction to computational neuroscience,
the study of both the computations performed by the brain, and of
computational models of neuronal responses. In the course we will focus
on the visual system.
Prerequisites: Familiarity with programming, linear algebra, and simple
CSC 242: Artificial Intelligence
Introduces fundamental principles of artificial intelligence, including
heuristic search, automated reasoning, handling uncertainty, and
machine learning. Presents applications of AI techniques to real-world
problems such as understanding the web, computer games, biomedical
research, and assistive systems. This course is a prerequisite for
advanced AI courses.
Prerequisites: MTH 150, CSC 172.
CSC 242W: Artificial Intelligence Writing
This is the upper level writing component attached to CSC 242.
Prerequisites: MTH 150, CSC 172.
CSC 244/444: Logical Foundations of AI
The logical foundations of AI including first-order logic, reasoning,
knowledge representation, planning, and probabilistic inference.
Prerequisites: CSC 173, CSC 242.
CSC 246/446: Machine Learning
This course presents the mathematical foundations of AI, including
probability, decision theory and machine learning.
Prerequisites: MTH 264, MTH 265 and permission of instructor.
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.
Prerequisites: CSC 242.
CSC 248/448: Statistical Speech & 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, CSC 242.
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, CSC 242.
CSC 250/450: Data Science for Linguistics
See LINGUISTICS 250 course listing. This is a cross-listed course.
This course addresses linguistic research questions through data science
techniques. The course will focus on developing skills to (i) acquire
and process a variety of language data, from using established corpora
to capturing Twitter feeds, and (ii) to investigate language use,
particularly syntactic and semantic phenomena, through descriptive and
inferential statistical techniques. A significant part of the course
will be devoted to hands-on projects and will include developing
familiarity with using the programming languages Python and R to acquire
and explore linguistic data. Familiarity with statistics and/or
computational linguistics is advantageous, but not necessary.
Prerequisites: LIN 110, LIN 210 or LIN 220 or LIN 225.
CSC 251/451: Advanced Computer Architecture
This course is cross-listed with ECE 201. Check the description there.
Prerequisites: ECE 200 or equivalent.
CSC 252: Computer Oganization
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, CSC 172.
CSC 253/453: Dynamic Language and Software Development
This course explores unique aspects of dynamically-typed programming
languages, which are now pervasive in domains such as scientific research,
Web application development, gaming, and user interface design.
The lessons you will learn here complement those in traditional compilers
and programming languages courses, which focus mainly on statically-typed
languages. We will use the Python language as a case study. In the first
half of this course, we will study the internals of the Python
interpreter, which is implemented in C. In the second half,
we will build analysis and debugging tools for Python, potentially
extending open-source tools with large user bases.
Prerequisites: Familiarity with a dynamic programming language
such as Python; CSC 252, CSC 254/454 recommended.
CSC 254/454: Programming Language Design and 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.
Prerequisites: CSC 173; CSC 252 recommended.
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. Students taking the graduate level will have additional
course requirements and a more difficult project.
Prerequisites: CSC 254/454; CSC 252 recommended.
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.
Prerequisites: CSC 252.
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.
Prerequisites: CSC 252.
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
Prerequisites: CSC 254/454, CSC 256/456, permission of instructor.
CSC 261/461: 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.
Prerequisites: CSC 172; CSC 173, CSC 252 recommended.
CSC 262/462: Computational Intro to Statistics
This course is cross-listed with DSC 262. Please refer to the description
of that course.
Prerequisites: MTH 162 or equivalent.
CSC 265/465: Intermediate Statistics and Computational Methods
This course is a continuation of CSC262, covering intermediate statistical
methodology and related computational methods, with an emphasis on the R
statistical computing environment.
This course is cross-listed with DSC265. Please see DSC265 for the
Prerequisites: CSC 262 or equivalent.
CSC 266: Introduction to Parallel Computing Using GPUs
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-Unified 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.
Prerequisites: ECE 216 or equivalent. Familiarity with assembly and C.
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, MTH 150.
CSC 281/481: Introduction to Cryptography
The modern study of cryptography investigates techniques for facilitating
interactions between distrustful entities. 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: MTH 150 or MTH 162, CSC 171 or equivalent.
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 or MTH 172.
CSC 283/483: Topics in Cryptography
This will be a seminar-style course in which students will read and
present papers on current research in Cryptography. Potential topics
include lattice-based cryptography, concurrency and protocol security,
database privacy, cryptographic game theory and interplay of cryptography
with other fields.
Prerequisites: CSC 282.
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
Prerequisites: CSC 282.
CSC 285/485: Algorithms and Elections
The focus of this course is on using algorithms to manipulate elections
and on using complexity to protect elections from such manipulative
attacks. Among the attacks we will study are manipulation, bribery
and control. Students taking this course at the 400 level may be required
to complete additional tests, readings, or assignments.
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 and one-way functions; reductions relating the
complexity of problems; complexity classes and hierarchies.
Prerequisites: CSC 280.
CSC 292: Computer Security Foundations
This course will teach students the foundations of computer security.
Students will learn what security is, the design principles of secure
systems, how security is enforced, and how security is compromised.
Topics include access controls, information flow, basic applications of
cryptography, buffer overflow attacks, and malware.
Prerequisites: CSC 252.
CSC 298W Video Game Studies
*** Description needed
Prerequisites: Permission of instructor.
CSC 298 Deep Learning and Graphical Models
Probabilistic graphical models are a powerful framework that leverages
probability theory and graph representation to model complex problems with
large collections of inter-related variables. Numerous applications can
be found in machine learning, computer vision and beyond. On the other
hand, recent developments in neural networks (aka deep learning) have
greatly advanced the performance of state-of-the-art in visual recognition
and artificial intelligence. This course will cover the essentials
(representation, learning and inference) in both probabilistic graphical
models and neural networks with an emphasis in analyzing image and
video data. Students entering the class should have a pre-existing working
knowledge of probability, statistics, linear algebra and programming.
Prerequisites: MTH150, MTH 162, MTH 165,
MTH 201 or probability and statistics course,
programming proficiency in Python, Matlab, or C++.
CSC 577: Advanced Topics in Computer Vision
This course discusses advanced topics and current research in computer
vision. Students are expected to read papers selected from various
subareas such as reconstruction, segmentation and grouping, object and
activity recognition, scene understanding, and vision and language.
Approaches for learning from image and video data will be covered and
include topics from convolutional neural networks, recurrent neural
networks, structured predictions and others. The course will be a mix
of lecture, student presentation and discussion.
Prerequisites: CSC 249/449 or CSC 246/446 or permission of instructor.
Back to Computer Science main page