## 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, design an experiment, and 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.

**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, design an experiment, and 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, design an experiment, and collect data or use mathematical reasoning to test or validate it;
- Collect, interpret, and analyze data.

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

**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, design an experiment, and 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)

**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, design an experiment, and collect data or use mathematical reasoning to test or validate it.

### CSCI 368 - Modern Systems Security

This course focuses on the security aspects of modern system architectures. Concepts include secure software development, authentication, session management, access control, and mitigation of common attack patterns such as cross-site scripting. These are considered in the context of contemporary system architectures including microservice and API designs. Throughout the course and in a lab environment, students will perform hands-on work with security tools and be exposed to real-world security scenarios.

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

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

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

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

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

- Given a problem or question, formulate a hypothesis or conjecture, design an experiment, and collect data or use mathematical reasoning to test or validate it;
- Collect, interpret, and analyze data.

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

- Use and evaluate quantitative data or modeling, or use logical/mathematical reasoning to evaluate, test or prove statements;
- Collect, interpret, and analyze data.

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

**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)

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

**Instructional Method:**Lecture-conference

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

**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)

**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 4 times for credit

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

**Notes:**Offered in alternate years.

### 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 4 times for credit

**Notes:**Primarily for juniors and seniors.