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