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 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.
- 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 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Ìýand 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 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.
- 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 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.
- 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 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.