## 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:**2024-25

**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):**CSCI 121 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 351 - Software Engineering

This course explores the process of designing and implementing software. The course will cover software design methodologies, requirements design, design patterns, software design diagrams, testing strategies, code reviews, project plans, and software presentation. Students will work in groups on both writing and programming assignments.

**Unit(s):**1

**Group Distribution Requirement(s):**Distribution Group III

**Prerequisite(s):**CSCI 221

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

### 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):**CSCI 221

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture

**Grading Mode:**Letter grading (A-F)

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Cross-listing(s):**MATH 382

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Group Distribution Learning Outcome(s):**

### 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 and 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

**Instructional Method:**Lecture

**Grading Mode:**Letter grading (A-F)

**Cross-listing(s):**MATH 386

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Cross-listing(s):**MATH 387

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Cross-listing(s):**MATH 388

**Group Distribution Learning Outcome(s):**

### 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):**CSCI 221

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Group Distribution Learning Outcome(s):**

### CSCI 393 - Operating System Design and Implementation

This course covers the low-level details of the software that drives computing hardware, spanning such disparate systems as supercomputers, the internet backbone, laptops, and smartphones. Topics include kernel architectures, scheduling, memory management, security policies and mechanisms, assurance, file systems, networking, virtualization, real time, safety-critical and security-critical systems. Students will implement several operating system components.

**Unit(s):**1

**Group Distribution Requirement(s):**Distribution Group III

**Prerequisite(s):**CSCI 389

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

### CSCI 394 - Principles of Compiler Design

An in-depth look at the design and construction of programming language compilers, covering the basic phases of the compilation process, including syntactic analysis and parsing, semantic analysis, intermediate representations of code, dataflow analysis, register allocation, code generation, and other optimizations. Students will develop a working compiler and run-time system for a programming language. Time permitting, the course surveys advanced techniques such as compilation of functional programming languages or compilation for high-performance hardware.

**Unit(s):**1

**Group Distribution Requirement(s):**Distribution Group III

**Prerequisite(s):**CSCI 389

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

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

**Instructional Method:**Lecture-conference

**Grading Mode:**Letter grading (A-F)

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

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

**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):**MATH 441

**Notes:**Offered in alternate years.

**Not offered:**2024-25

**Group Distribution Learning Outcome(s):**

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

**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:**2024-25

**Group Distribution Learning Outcome(s):**

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