91²ÝÝ®ÊÓƵ

Computer Science Department

Courses

CSCI 121 - Computer Science Fundamentals I

An introduction to computer science, covering topics including elementary algorithms and data structures, functional and procedural abstraction, data abstraction, object orientation, logic, and the digital representations of numbers. Emphasis is on mathematical problems and calculations and on recursive algorithms and data structures. The course includes a significant programming laboratory component where students will solve computational problems using a high-level language. The mechanisms for processing and executing programs will be surveyed.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Three years of high school mathematics.
Instructional Method: Lecture-laboratory
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 122 - Intermediate Computer Science Fundamentals I

An introduction to computer science, covering topics including elementary algorithms and data structures, functional and procedural abstraction, data abstraction, object orientation, logic, and the digital representations of numbers. Emphasis is on mathematical problems and calculations and on recursive algorithms and data structures. The course includes a significant programming laboratory component where students will solve computational problems using a high-level language. The mechanisms for processing and executing programs will be surveyed.

Unit(s): 0.5
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Three years of high school mathematics
Instructional Method: Lecture-laboratory
Grading Mode: Letter grading (A-F)
Notes: This is an accelerated version of Computer Science 121 for students with significant programming experience.Ìý
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 221 - Computer Science Fundamentals II

A second course in computer science, an introduction to advanced structures and techniques. The course will develop the foundations of computing, providing an introduction to theoretical models of computation and also to practical computer system construction. Selected topics include digital design, from gates to processors; the construction of interpreters, including language parsing and run-time systems; parallelism and concurrency; and universality. There will be significant programming projects exploring a number of these topics, and students will be introduced to the advanced programming techniques and data structures that support their construction.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìýor equivalent
Instructional Method: Lecture-laboratory
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 315 - Ethics and Public Policy

This course examines the ethical and public policy questions raised by new computer technologies. Topics vary by year but usually include criminal hacking and cyber warfare, intellectual property laws, data privacy, and fairness of algorithmic decision-making.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»å Ìýor equivalent
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 361 - Parallelism and Concurrency

We investigate the theory behind achieving high performance on high-throughput multiprocessor systems. In the first half of the course we develop and analyze parallel algorithms for tightly coupled synchronous systems that use either shared memory or message passing to communicate. In the second half we look at loosely coupled systems, studying efficient mechanisms for synchronizing access to shared data structures, and focusing particularly on proving their correctness. Though we look at abstract models of these systems throughout, students will also be asked to implement their ideas on current multiprocessor hardware.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): , andÌýÌý´Ç°ùÌýÌý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 368 - Computer and Network Security

An introduction to the topic of security in the context of computer systems and networks. Students will identify, analyze, and solve network-related security problems in computer systems. Concepts includeÌýfundamentals of authentication and encryption technologies, access control, and mitigation of common attack patterns such as cross-site scripting and buffer overflows. Students will perform hands-on work with security tools and apply security concepts to programming projects.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 375 - Mechanism Design

An introduction to mechanism design: the study of centralizing unregulated, competitive processes in order to obtain a more socially favorable outcome (e.g., allocating food to food banks, dividing assets in a will, and matching applicants to employers). This course will provide an introductory overview of topics in mechanism design, including matching markets, game theory, allocation problems, and auctions. Coursework will include a balance of mathematical proofs, implementation, ethical discussion, paper reading, and research projects.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý´Ç°ùÌýÌý
Instructional Method: Lecture
Grading Mode: Letter grading (A-F)
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 378 - Deep Learning

This course is an introduction to deep neural architectures and their training. Beginning with the fundamentals of regression, optimization, and regularization, the course will then survey a variety of architectures and their associated applications. Students will develop projects that implement deep-learning systems to perform various tasks.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»å Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 382 - Algorithms and Data Structures

An introduction to the design and analysis of algorithms. The course will focus on various abstract data types and associated algorithms. The course will include implementation of some of these ideas on a computer.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìýor equivalent and Ìý²¹²Ô»å Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Cross-listing(s): Ìý
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 383 - Advanced Algorithms

An advanced course on algorithms, going beyond the material covered in MATH/CSCI 382.ÌýTopics vary but frequently include linear programming, approximation algorithms, graph algorithms, randomized algorithms, computational geometry, and string algorithms.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»å eitherÌýÌý´Ç°ùÌýÌý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Cross-listing(s): Ìý
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 384 - Programming Language Design and Implementation

A study of the organization and structure of modern programming languages. This course will survey key programming language paradigms, including functional, object-oriented, and logic-based languages, with particular focus on the fundamental concepts underlying them, including their syntax, semantics, and type systems. It will take a mathematical approach, examining several strong ties with formal logic and the mechanization of proof, especially logics and proof methods related to the properties of programs.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»å Ìýor Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 385 - Computer Graphics

Introduction to computer image synthesis and mathematical modeling for computer graphics applications. Topics include image processing, 2-D and 3-D modeling techniques such as curve and surface representation, geometric algorithms for intersection and hidden surface removal, 3-D rendering, and animation.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»å Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 386 - Private and Fair Data Analysis

This course studies two important social or ethical constraints one might face when analyzing data. The first half of the course covers privacy concerns, where one must analyze a data set without violating the privacy of the people whose data it contains. The second half of the course covers fairness, where one is seeking to ensure that classification rules output by a machine learning algorithm are not discriminatory with respect to race, gender, or other protected attributes. Throughout the course we will focus both on the process of creating mathematical formalizations of socially desirable propertiesÌý²¹²Ô»å on the design of algorithms that satisfy those definitions. Students will engage directly with current research papers.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìýor ; and one of /, /, or Ìý
Instructional Method: Lecture
Grading Mode: Letter grading (A-F)
Cross-listing(s): Ìý
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 387 - Computability and Complexity

Introduction to models of computation including finite automata, formal languages, and Turing machines, culminating in universality and undecidability. An introduction to resource-bounded models of computation and algorithmic complexity classes, including NP and PSPACE, and the notions of relative hardness and completeness.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìýor equivalent and Ìý²¹²Ô»å Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Cross-listing(s): Ìý
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 388 - Cryptography

An introduction to modern cryptography. Topics include private- and public-key encryption, message authentication codes, pseudorandomness, and digital signatures. Emphasis is placed on formal definitions of security, proofs of security, and key constructions.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): /, /, or Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Cross-listing(s): Ìý
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 389 - Computer Systems

A study of the design and implementation of computing systems, surveying computer architecture, machine organization, the hardware-software interface, memory and storage subsystems, compilation and run time, and concurrent and networked programming. Students learn to pay particular attention to the underlying factors that affect a program's performance. An introduction to approaches to problems related to the synchronization and coordination of independently executing processes, and also to the structure of distributed and network-based services.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 395 - Advanced Computer Architecture

A course that explores the implementation of computer processors, with focus on techniques and designs that seek high performance. We look at pipelining, superscalar designs, multiprocessor systems, cache coherence in multiprocessors, graphics processing units, embedded systems, and network processors.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 396 - Computer Networks

A broad-ranging exploration of topics in computer networks that includes history, communications theory, network architectures, internet protocols, client-server models, strategies for improving network security, and the social impact of modern networking. The course emphasizes both theory and practice and therefore includes both mathematical analysis and programming projects written in Python.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»å Ìýor Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 421 - Computer Science Theory Topics Seminar

This course is an exploration of research in an area of theoretical computer science. Topics vary by offering. Example topics include randomized or parallel algorithms, approximation algorithms, quantum computation or complexity, and zero-knowledge proof systems. Not all topics offered every year.

Ìý

Communication Complexity

An introduction to communication complexity, which studies how much data needs to be shared between a group of parties in order to solve a given problem.ÌýUnlike time and space complexity, communicationÌýcomplexity allows more negative bounds and precise characterizations.ÌýThis class will emphasize not just the material but the learning process, with students building skills in independent learning and technical communication.

Unit(s): 0.5
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý´Ç°ùÌý, andÌýÌý´Ç°ùÌýÌý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Repeatable for Credit: May be taken 4 times for credit
Cross-listing(s): Ìý
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 422 - Computer Science Topics Seminar

An advanced seminar in computer science.ÌýTopic varies by offering.ÌýStudents will study an advanced topic in computer science, engaging with advanced material and current research. Not all topics offered every year.

Ìý

Formal Verification

An introduction to the formal verification of programs. This course will survey approaches to developing proofs that programs satisfy certain classes of properties through engagement with literature. This includes tools for specifying program properties, such as formal logics, as well as algorithms for proving that such properties hold. Topics include SAT solving, model checking, and abstract interpretation.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Formal Verification: ÌýÌý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Repeatable for Credit: May be taken 4 times for credit
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 441 - Topics in Computer Science Theory

Exploration of topics from advanced algorithm design and theoretical computer science including complexity theory, quantum computation, and approximation algorithms, as selected by the instructor.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): , and /, and /Ìý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Repeatable for Credit: May be taken up to 4 times for credit if different topics.
Cross-listing(s): Ìý
Notes: Offered in alternate years.
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 442 - Topics in Computer Systems

Exploration of advanced topics in computer systems.Ìý Specific topic varies at the instructor's discretion.

Cache Management Strategies

This course focuses on interesting research-level questions about how to manage the memory hierarchy in computer systems. We will consider both practical and theoretical problems, doing analysis and simulation. Topics will include different models of caching, advanced replacement algorithms, stack properties, competitive ratios, alternative metrics, simulation, experimental performance analysis, and more. Students should be prepared for assignments that include both programming and proof-style problems.

Unit(s): 1
Group Distribution Requirement(s): Distribution Group III
Prerequisite(s): Ìý²¹²Ô»åÌýeitherÌýÌý´Ç°ùÌýÌý
Instructional Method: Lecture-conference
Grading Mode: Letter grading (A-F)
Repeatable for Credit: May be taken up to 8 times for credit if different topics.
Not offered: 2025-26
Group Distribution Learning Outcome(s):
  • Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements.
  • Given a problem or question, formulate a hypothesis or conjecture, and design an experiment, collect data, or use mathematical reasoning to test or validate it.

CSCI 470 - Thesis

Unit(s): 2
Instructional Method: Independent study
Grading Mode: Letter grading (A-F)
Notes: Yearlong course, 1 unit per semester.

CSCI 481 - Independent Study

Unit(s): 0.5
Prerequisite(s): Instructor and division approval
Instructional Method: Independent study
Grading Mode: Letter grading (A-F)
Repeatable for Credit: May be taken up to 4 times for credit.
Notes: Primarily for juniors and seniors.