Brown UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
Majors
Courses
source 1source 2CSCI 0020: The Digital World (1) intro
Removes the mystery surrounding computers and the ever-growing digital world. Introduces a range of topics and many aspects of multimedia, along with explanations of the underlying digital technology and its relevance to our society. Other topics include artificial intelligence, IT security, ethics and the economics of computing as well as the effects of its pervasiveness in today's world. Introductory programming and analytic skills are developed through Excel, HTML, CSS, Javascript, and Python assignments. CSCI 0020 is a good introduction to a wide range of CS topics that have broad relevance in our society.
CSCI 0081: TA Apprenticeship: Full Credit (1) special
Being an undergraduate TA is a learning experience: one not only gets a deeper understanding of the course material, but gains management and social skills that are invaluable for one's future. Students taking this course must first be selected as an undergraduate TA for a Computer Science course, a course the student has taken and done well in. Students will work with the course's instructor on a variety of course-related topics, including preparation of material and development of assignments. Whether CSCI 0081 or its half-credit version (CSCI 0082) is taken is up to the professor of the course being TA'd. Instructor permission required.
CSCI 0082: TA Apprenticeship: Half Credit (0.5) special
Being an undergraduate TA is a learning experience: one not only gets a deeper understanding of the course material, but gains management and social skills that are invaluable for one's future. Students taking this course must first be selected as an undergraduate TA for a Computer Science course, a course the student has taken and done well in. Students will work with the course's instructor on a variety of course-related topics, including preparation of material and development of assignments. Whether CSCI 0082 or its full-credit version (CSCI 0081) is taken is up to the professor of the course being TA'd. Instructor permission required.
CSCI 0111: Computing Foundations: Data (1) intro
An introduction to computing and programming that focuses on understanding and manipulating data. Students will learn to write programs to process both tabular and structured data, to assess programs both experimentally and theoretically, to apply basic data science concepts, and to discuss big ideas around the communication, use, and social impacts of digital information. Designed for both concentrators and non-concentrators, this is the first course in either a two- or three-course introductory sequence leading into advanced CS courses. Programming assignments will be smaller scale than in CSCI 0150/0170, thus allowing students time to practice programming and discuss computational ideas in a broader context.
CSCI 0112: Computing Foundations: Program Organization (1) intro
Explores how organization of programs, data, and algorithms affects metrics such as time performance, space usage, social impacts, and data privacy. Students will learn how to choose between candidate data structures for a problem, how to write programs over several standard data structures, how to assess the quality of programs (from theoretical, practical, and social perspectives), and how to apply their skills to computational problems that could arise in a variety of fields. The course will teach object-oriented programming, in combination with basic functional and imperative programming concepts. The course is designed for both concentrators and non-concentrators.
CSCI 0150: Introduction to Object-Oriented Programming and Computer Science (1) intro
Introduces programming in Java (a modern, widely-used programming language), interactive 2D computer graphics, and some fundamental data structures and algorithms. Students learn by programming a sequence of interactive graphics programs which gradually increase in complexity, including Doodle Jump, Tetris (http://bastilleweb.techhouse.org/), and a significant final project. Lectures are supplemented by skits performed by the UTAs (Undergraduate Teaching Assistants) to teach course concepts and for a bit of added entertainment! This course is intended for both potential concentrators and those who may take only a single course. There are NO prerequisites, and no prior knowledge of programming is required, though students who do have prior programming experience are also encouraged to take the course!
CSCI 0170: CS: An Integrated Introduction (1) intro
CSCI 0170/0180 is an introductory sequence that helps students begin to develop the skills, knowledge, and confidence to solve computational problems elegantly, correctly, efficiently, and with ease. The sequence is unique in teaching both the functional and imperative programming paradigms---the first through the languages Scheme and ML in CSCI 0170; the second through Java in CSCI 0180. The sequence requires no previous programming experience. Indeed, few high school students are exposed to functional programming; hence even students with previous programming experience often find this sequence an invaluable part of their education.
CSCI 0190: Accelerated Introduction to Computer Science (1) intro
A one-semester introduction to CS covering programming integrated with core data structures, algorithms, and analysis techniques, similar to the two-course introductory sequences (CSCI 0150-0200 and CSCI 0170-0200).
CSCI 0200: Program Design with Data Structures and Algorithms (1) intro
Students extend their program-design skills while learning multiple data structures, common graph algorithms, different forms of societal impacts from programs, how to analyze programs for performance, and how to work effectively with multiple styles of programming languages. Examples and course projects draw from several areas of computer science to help students identify their broader interests within the field. There will be a required weekly lab session involving hands-on work with course material.
CSCI 0220: Introduction to Discrete Structures and Probability (1) intro
The objective of the course is to place on solid foundations the most common structures of Computer Science, to illustrate proof techniques, to provide the background for an introductory course in computational theory and to introduce basic concepts of probability theory. It introduces Boolean algebras, logic, set theory, elements of algebraic structures, graph theory, combinatorics and probability.
CSCI 0300: Fundamentals of Computer Systems (1) sys
Covers fundamental concepts, principles, and abstractions that underlie the design and engineering of computer systems. Students will learn how a computer works, how to write safe and performant systems software, and what systems abstractions support today’s complex, high-performance systems developed in industry. Specific topics include machine organization, systems programming and performance, key concepts of operating systems, isolation, security, virtualization, concurrent programming, and the basics of distributed systems. Combined lectures, labs, and several hands-on projects involving programming exercises in C/C++.
CSCI 0320: Introduction to Software Engineering (1) softeng
Focuses on designing, building, testing, and maintaining systems collaboratively. It covers programming techniques (using Java and TypeScript with various frameworks), object-oriented design, advanced testing (e.g., fuzz testing), debugging approaches, and tools such as source control systems. The course concludes with a major group project that students gather requirements for, then design and implement themselves.
CSCI 0330: Introduction to Computer Systems (1) sys
Covers high-level computer architecture, systems programming, assembly-language programming, C-language programming, and operating systems functions.
CSCI 0410: Foundations of AI (1) ai
This course will provide broad coverage of core topics in artificial intelligence (AI), as a prelude to students taking more in-depth AI courses later on. To this end, the course will introduce students to prevalent AI models, both logical and probabilistic, as well as algorithms to solve these models based on search, planning, reinforcement learning, and supervised and unsupervised machine learning. These ideas will be applied to develop basic natural language processing, computer vision, robotic, and multiagent systems, all with an eye towards building socially responsible AI. Students cannot take this course and CSCI 1411 together.
CSCI 0500: Data Structures, Algorithms, and Intractability: An Introduction (1) algs
Covers designing and analyzing data structures and algorithms. Studies the theory of NP-completeness.
CSCI 0530: Coding the Matrix: an Introduction to Linear Algebra for Computer Science (1) math
An introduction to vectors and matrices and their role in computer science. The course material consists of three components: (1) concepts, theorems, and proofs, (2) procedures and programs, and (3) applications and working with data. The course revolves around weekly lab sessions in each of which students apply the concepts to a real task with real data. Lab topics include transformations in 2-d graphics, error-correcting codes, image compression using wavelets, synthesizing a new perspective in a photo, face recognition, news story categorization, cancer diagnosis using machine learning, matching airplanes to destinations, Google's PageRank method. Other topics addressed in the course include linear programming, zero-sum games, rudimentary cryptographic methods, linear regression, and discrete linear dynamical systems such as a spreading computer virus.
CSCI 1010: Theory of Computation (1) theory
The course introduces basic models of computation including languages, finite-state automata and Turing machines. Proves fundamental limits on computation (incomputability, the halting problem). Provides the tools to compare the hardness of computational problems (reductions). Introduces computational complexity classes (P, NP, PSPACE and others).
CSCI 1040: The Basics of Cryptographic Systems (1) sys
This course will cover cryptographic concepts such as data privacy, encryption, authentication, digital signatures, differential privacy, privacy-enhancing technologies, secure computation, and electronic money. The emphasis will be on how to use cryptographic systems correctly in a larger context, rather than on the mathematical details of how they work; although we will cover some of those details too, on a high level. This course will be aimed at practicing and aspiring poets, economists, software engineers, law and policy wonks, and business tycoons.
CSCI 1230: Computer Graphics (1) graphics
Fundamental concepts in 2D and 3D computer graphics, e.g., 2D raster graphics techniques and simple image processing. Focuses on geometric transformations, and 3D modeling, viewing and rendering. A sequence of assignments in C++ culminates in a simple geometric modeler and ray tracer.
CSCI 1234: Computer Graphics Lab (0.5) capstone
CSCI 1234 is a half-credit course intended to be taken concurrently with CSCI 1230 and provides students with a greater understanding of the material by having them extend each of 1230's assignments to greater depth. This course is primarily intended for undergraduates interested in using CSCI 1230 & 1234 to complete a capstone project.
CSCI 1250: Introduction to Computer Animation (1) graphics
Introduction to 3D computer animation production including story writing, production planning, modeling, shading, animation, lighting, and compositing. The first part of the course leads students through progressive exercises that build on each other to learn basic skills in 2D and 3D animation. At each step, student work is evaluated for expressiveness, technical correctness and aesthetic qualities. Students then work in groups creating a polished short animation. Emphasis on in-class critique of ongoing work which is essential to the cycle of visually evaluating work in progress, determining improvements, and implementing them for further evaluation.
CSCI 1260: Compilers and Program Analysis (1) pls
Have you ever wondered why C programs seem to run faster than Python programs? Have you ever been confused by an error message and wondered why Java couldn't understand your program? In CSCI 1260, we'll learn how compilers read in code in one language and produce code in another; in particular, we'll learn how to translate high-level languages to code that your computer's processor can understand. We will get hands-on practice developing compilers for a series of increasingly complex languages. Along the way, we'll learn some general best practices for developing and testing complex software systems.
CSCI 1270: Database Management Systems (1) sys
Introduction to database structure, organization, languages and implementation. Relational model. Query languages, query processing, query optimization, normalization, file structures, concurrency control and recovery algorithms, and distributed databases. Studies of actual systems. While database management system usage is covered, emphasis is on the systems-building aspects of these large, complex systems. We also relate the material to modern applications such as the web.
CSCI 1290: Computational Photography (1) graphics
Computational Photography describes the convergence of computer graphics and computer vision with photography. Its goal is to overcome the limitations of traditional photography using computational techniques to enhance the way we capture, manipulate, and interact with visual media. We will cover topics such as cameras, human visual perception, image processing and manipulation, image based lighting and rendering, high dynamic range, single view reconstruction, photo quality assessment, non photorealistic rendering, the use of Internet-scale data, and many more topics. The course will consist of several programming assignments and a final project.
CSCI 1300: User Interfaces and User Experience (1) humans
Have you ever walked into a door thinking that you were supposed to pull instead of push? Have you ever been stuck on a website, not sure how to proceed next? Learn when to use different interfaces, how to model and represent user interaction, how to elicit requirements and feedback from users, as well as the principles of user experience design, methods for designing and prototyping interfaces, and user interface evaluation.
CSCI 1310: Fundamentals of Computer Systems (1) sys
Covers fundamental concepts, principles, and abstractions that underlie the design and engineering of computer systems. Students will learn how a computer works, how to write safe and performant systems software, and what systems abstractions support today’s complex, high-performance systems developed in industry. Specific topics include machine organization, systems programming and performance, key concepts of operating systems, isolation, security, virtualization, concurrent programming, and the basics of distributed systems.
CSCI 1330: Computer Systems (1) sys
High-level computer architecture and systems programming. The course covers the organization of computer systems (in terms of storage units, caches, processors, and I/O controllers) and teaches students assembly-language programming and C-language programming. Extensive programming exercises introduce students to systems-level programming on Linux systems, as well as to multi-threaded programming with POSIX threads. Students will be introduced to the functions of operating systems.
CSCI 1340: Introduction to Software Engineering (1) softeng
CSCI 1340 focuses on designing, building, testing, and maintaining systems collaboratively. It covers programming techniques (using Java and TypeScript with various frameworks), object-oriented design, advanced testing (e.g., fuzz testing), debugging approaches, and tools such as source control systems. The course concludes with a major group project that students gather requirements for, then design and implement themselves. Note: CSCI 1340 is for Master's students only (they may not register for 0320). It is identical to 0320 but with the addition of supplemental work for each sprint.
CSCI 1360: Human Factors in Cybersecurity (1) humans
This course is designed to push you to think about cybersecurity as an idea with both physical and virtual elements. Throughout the course, we will examine the value of information, the importance of users, and the difficult balance between security and usability. The ultimate goal of this course is to give you the intellectual and scientific framework you need to create systems that are both secure and efficient to use. The course focuses on usable security practices, but also looks deeply at the way our society influences security.
CSCI 1380: Distributed Computer Systems (1) sys
Explores the fundamental principles and practice underlying networked information systems, first we cover basic distributed computing mechanisms (e.g., naming, replication, security, etc.) and enabling middleware technologies. We then discuss how these mechanisms and technologies fit together to realize distributed databases and file systems, web-based and mobile information systems.
CSCI 1410: Artificial Intelligence (1) ai
Algorithms and representations used in artificial intelligence. Introduction and implementation of algorithms for search, planning, perception, knowledge representation, logic, probabilistic representation and reasoning, robotics and machine learning.
CSCI 1411: Foundations in AI (1) ai
This course will provide broad coverage of core topics in artificial intelligence (AI), as a prelude to students taking more in-depth AI courses later on. To this end, the course will introduce students to prevalent AI models, both logical and probabilistic, as well as algorithms to solve these models based on search, planning, reinforcement learning, and supervised and unsupervised machine learning. These ideas will be applied to develop basic natural language processing, computer vision, robotic, and multiagent systems, all with an eye towards building socially responsible AI. This course cannot be taken at the same time as CSCI 0410.
CSCI 1420: Machine Learning (1) ai
How can artificial systems learn from examples and discover information buried in data? We explore the theory and practice of statistical machine learning, focusing on computational methods for supervised and unsupervised learning. Specific topics include empirical risk minimization, probably approximately correct learning, kernel methods, neural networks, maximum likelihood estimation, the expectation maximization algorithm, and principal component analysis. This course also aims to expose students to relevant ethical and societal considerations related to machine learning that may arise in practice.
CSCI 1430: Computer Vision (1) ai
How can computers understand the visual world of humans? This course treats vision as a process of inference from noisy and uncertain data and emphasizes probabilistic and statistical approaches. Topics may include perception of 3D scene structure from stereo, motion, and shading; image filtering, smoothing, edge detection; segmentation and grouping; texture analysis; learning, recognition and search; tracking and motion estimation. Strongly recommended: basic linear algebra, basic calculus and exposure to probability.
CSCI 1440: Algorithmic Game Theory (1) math
This course examines topics in game theory from a computer scientist's perspective. Through the lens of computation, this course will focus on the design and analysis of systems involving self-interested agents, investigating how strategic behavior should influence algorithm design, which game-theoretic solution concepts are practical to implement, and the ramifications of conflicts of interest between system designers and participating agents. Topics include: auctions and mechanism design, equilibria, and learning.
CSCI 1450: Advanced Introduction to Probability for Computing and Data Science (1) math
Probability and statistics have become indispensable tools in computer science. Probabilistic methods and statistical reasoning play major roles in machine learning, cryptography, network security, communication protocols, web search engines, robotics, program verification, and more. This course introduces the basic concepts of probability and statistics, focusing on topics that are most useful in computer science applications. Topics include: modeling and solution in sample space, random variables, simple random processes and their probability distributions, Markov processes, limit theorems, and basic elements of Bayesian and frequentist statistical inference.
CSCI 1460: Computational Linguistics (1) ai
The application of computational methods to problems in natural-language processing. In particular we examine techniques due to recent advances in deep learning: word embeddings, recurrent neural networks (e.g., LSTMs), sequence-to-sequence models, and generative adversarial networks (GANs. Programming projects include parsing, machine translation, question answering, and chat-bots.
CSCI 1470: Deep Learning (1) ai
What is deep learning? How is it related to machine learning? How is it applied to perform tasks like classifying images or translating languages? Deep Learning belongs to a broader family of machine learning methods. Deep learning-based methods (e.g., convolutional neural networks, recurrent neural networks, autoencoders) have led to rapid improvements in applications like computer vision, natural language processing, robotics, and even genomics and health. In this course, you will get an overview of the prominent techniques of deep learning and their applications. This course is designed to help you understand the underlying concepts as well as the promise and pitfalls of deep learning. It also aims at providing hands-on practice of implementing and applying deep learning methods in Python.
CSCI 1510: Introduction to Cryptography and Computer Security (1) math
This course studies the tools for guaranteeing safe communication and computation in an adversarial setting. We develop notions of security and give provably secure constructions for such cryptographic objects as cryptosystems, signature schemes and pseudorandom generators. We also review the principles for secure system design.
CSCI 1515: Applied Cryptography (1) sys
This course teaches cryptography from a practical perspective and provides students with hands-on experience in building secure systems. Students will implement secure authentication and communication systems using foundational cryptographic algorithms such as encryption schemes, authentication codes, digital signatures, key exchange, and hash functions. The course also covers advanced topics including zero-knowledge proofs, secure multi-party computation, fully homomorphic encryption, and post-quantum cryptography. Students will use these tools to develop applications such as secure online anonymous voting, privacy-preserving data analysis, and private information retrieval.
CSCI 1550: Probabilistic Methods in Computer Science (1) algs
Randomization and probabilistic techniques play an important role in modern computer science, with applications ranging from combinatorial optimization and machine learning to communications networks and secure protocols. This course introduces the most fundamental probabilistic techniques used in computer science applications, in particular in randomized algorithms, probabilistic analysis of algorithms and machine learning.
CSCI 1570: Design and Analysis of Algorithms (1) algs
A single algorithmic improvement can have a greater impact on our ability to solve a problem than ten years of incremental improvements in CPU speed. We study techniques for designing and analyzing algorithms. Typical problem areas addressed include hashing, searching, dynamic programming, graph algorithms, network flow, and optimization algorithms including linear programming.
CSCI 1600: Real-time and Embedded Software (1) sys
Comprehensive introduction to the design and implementation of software for programmable embedded computing systems, in applications such as Internet of Things, transportation, and mobile. Includes the overall embedded real-time software design and development processes, with a focus on engineering for reliability. Major project component.
CSCI 1620: Computer Systems Security Lab (0.5) sys
CSCI 1620 is a half-credit laboratory course intended to be taken concurrently with CSCI 1660 and provides students with a deeper understanding of the material by doing additional assignments, which include extensions of the 1660's assignments. Instructor permission required.
CSCI 1650: Software Security and Exploitation (1) sys
CSCI 1650 covers software exploitation techniques and state-of-the-art mechanisms for hardening software. The course begins with a summary of prevalent software defects, typically found in applications written in memory unsafe languages, like C/C++, and proceeds with studying traditional and modern exploitation techniques, ranging from classical code injection and code reuse up to the latest goodies (e.g., JIT-ROP). For the most part, it focuses on defenses against certain vulnerability classes and the way(s) to bypass them. Students will be introduced to advanced software exploitation techniques and countermeasures, and study (in depth) the boundaries and effectiveness of standard hardening mechanisms, such as address space randomization and stack and heap protections.
CSCI 1660: Computer Systems Security (1) sys
This course teaches principles of computer security from an applied viewpoint and provides hands-on experience on security threats and countermeasures. Topics include code execution vulnerabilities (buffer overflow, sandboxing, mobile code), malware (trojans, viruses, and worms), access control (users, roles, policies), cryptosystems (hashing, signatures, certificates), network security (firewalls, TLS, intrusion detection, VPN), and human and social issues (usability, social engineering, digital rights management)
CSCI 1670: Operating Systems (1) sys
Covers not just the principles of operating systems but the intricacies of how they work. Topics include multithreaded programming, managing threads and interrupts, managing storage, processor scheduling, operating-system structure, virtualization, security, and the design of file systems (both local and distributed). Extensive examples are taken from actual systems, including Linux and Windows. Students are expected to complete both problem sets and programming assignments (in C).
CSCI 1680: Computer Networks (1) sys
Covers the technologies supporting the Internet, from Ethernet and WiFi through the routing protocols that govern the flow of traffic and the web technologies that are generating most of it. A major concern is understanding the protocols used on the Internet: what the issues are, how they work, their shortcomings, and what improvements are on the horizon.
CSCI 1690: Operating Systems Laboratory (0.5) sys
Half-credit course intended to be taken with CSCI 1670. Students individually write a simple operating system in C. Reinforces the concepts learned in CSCI 1670 and provides valuable experience in systems programming.
CSCI 1710: Logic for Systems (1) sys
Uses industry-standard tools to address quandaries both in and outside of computer science. Students learn to model systems, reason about those systems automatically using logic, and build essential algorithms behind tools used at Amazon, Intel, and more. The course culminates in a student-proposed project that applies to a real-world system of their choice.
CSCI 1730: Design and Implementation of Programming Languages (1) pls
Explores the design principles of modern programming languages through implementation, comparison, and reflection. Examines a variety of linguistic features that impact both control and data. Topics vary by year; more information on the course home page.
CSCI 1760: Multiprocessor Synchronization (1) sys
This course examines the theory and practice of multiprocessor synchronization. Subjects covered include multiprocessor architecture, mutual exclusion, wait-free and lock-free synchronization, spin locks, monitors, load balancing, concurrent data structures, and transactional synchronization.
CSCI 1800: Cybersecurity and International Relations (1) impact
This course examines the role that cybersecurity plays in the relationships of nation state governments. Through interactive discussions, case studies, and readings we will examine how international norms, diplomacy, international law, and intelligence provide a de facto infrastructure for how nation states operate in the cybersecurity domain. This is a writing-designated (WRIT) course.
CSCI 1805: Computers, Freedom and Privacy: Current Topics in Law and Policy (1) impact
Who is the Big Brother that we most fear? Is it the NSA -- or is it Google and Facebook? Rapidly changing social mores and the growing problem of cybersecurity have all contributed to a sense that privacy is dead. While the laws that protect privacy and civil liberties are stuck in the analog age, the capabilities for mass digital surveillance continue to advance rapidly. This course will put current controversies in historical context and explore possible reforms.
CSCI 1810: Computational Molecular Biology (1) algs
High-throughput experimental approaches now allow molecular biologists to make large-scale measurements of DNA, RNA, and protein, the three fundamental molecules of the cell. The resulting datasets are often too large for manual analysis and demand computational techniques. This course introduces algorithms for sequence comparison and alignment; molecular evolution and phylogenetics; DNA/RNA sequencing and assembly; recognition of genes and regulatory elements; and RNA and protein structure. The course demonstrates how to model biological problems in terms of computer science.
CSCI 1820: Algorithmic Foundations of Computational Biology (1) algs
This course is devoted to computational and statistical methods as well as software tools for DNA, RNA, and protein sequence analysis. The focus is on understanding the algorithmic and mathematical foundations of the methods, the design of the associated genomics tools, as well as on their applications. A comprehensive set of programming assignments provides a hands-on journey for the student into the complexities of real genomic data.
CSCI 1850: Deep Learning in Genomics (1) ai
Deep learning models have achieved impressive performance in fields like computer vision and NLP. The collection of vast quantities of biological data naturally leads to the question -- can deep learning help us understand genomics? We will cover deep learning models like Auto-encoders and Convolutional Neural Networks and how have they been applied to solve problems in genomics. We will learn about different biological datasets, interpretation methods that help explain predictions, and what unique challenges are presented by the data in this field. Critical thinking and learning from the practical application of models to data are expected outcomes.
CSCI 1860: Cybersecurity Law and Policy (1) impact
Cybersecurity and cyber conflict pose unique legal and policy challenges for governments, companies and citizens. The way those problems are resolved will shape the future of the internet. This course will examine cybersecurity as a legal and policy problem. How can government and society address network and computer insecurity while upholding privacy, civil liberties and other fundamental values?
CSCI 1870: Cybersecurity Ethics (1) impact
This timely, topical course offers a comprehensive examination of ethical questions in cybersecurity. These issues pervade numerous, diverse aspects of the economy and society in the Information Age, from human rights to international trade. Students will learn about these topics, beginning first with acquaintance with the dominant ethical frameworks of the 20th and 21st centuries, then employing these frameworks to understand, analyze, and develop solutions for leading ethical problems in cybersecurity. The things that you learn in this course will stay with you and inform your personal and professional lives.
CSCI 1880: Introduction to Computer Security (1) sys
This course examines the basic principles of computer security for an organization, recognizing which system components relate to which principles. Additionally, the course covers methodologies and skills for making informed security decisions and understanding how to apply security principles to design security mechanisms while considering tradeoffs. Topics include general security principles, cryptography, authentication authorization, identity, and access management, operating systems security, network security, web security, and applications security. Throughout the course, you will develop a preliminary cybersecurity plan for an organization. This course is not intended for CS concentrators and registration is by instructor permission.
CSCI 1950-N: 2D Game Engines (1) graphics
2D Game Engines covers core techniques used in the development 2D game engines. Projects involve building different varieties of 2D game engines as well as games that require use of the features implemented in the engines. Topics include high-level engine design, vector and raster graphics, animation, collision detection, physics, content management, and game AI.
CSCI 1950-U: Topics in 3D Game Engine Development (1) graphics
Covers core techniques in 3D game development with an emphasis on engine architecture. Students independently develop their own engines using C++, OpenGL, and the Qt framework, then work in groups to create a polished game. Topics include: spatial subdivision, player representation, collision detection and response, game networking, GPUs, and OpenGL.
CSCI 1951-A: Data Science (1) ai
Data is (soon) at the core of essentially all domains from material science to health care. Mastering big data requires a set of skills spanning a variety of disciplines from distributed systems over statistics to machine learning as well as a deep understanding of a complex ecosystem of tools and platforms. Data Science refers to the intersection of these skills and is concerned with the whole processing pipeline to transform data into actionable knowledge. This course provides an overview of the various techniques and tools involved in Data Science and how they work together rather than focussing on a specific aspect. Among other things, we will cover SQL and NoSQL solutions for massive data management, basic algorithms for data mining and machine learning, information retrieval techniques, and visualization methods.
CSCI 1951-L: Blockchains & Cryptocurrencies (1) sys
Introduction to modern blockchain-based systems. Topics covered include consensus and distributed computing, examples cryptocurrencies, programming smart contracts, privacy and secrecy, transfer networks, atomic swaps and transactions, non-currency applications of blockchains, and legal and social implications. Students will do a programming project and a term project.
CSCI 1951-R: Introduction to Robotics (1) ai
Each student will learn to program a small quad-rotor helicopter. We will provide each student with their own robot for the duration of the course. The course will cover PID controllers for stable flight, localization with a camera, mapping, and autonomous planning. At the end of the course, the aim is for students to understand the basic concepts of a mobile robot and aerial vehicle.
CSCI 1951-X: Formal Proof and Verification (1) theory
Proof assistants are tools that are used to check the correctness of programs. Unlike tools like model checkers and SAT solvers, proof assistants are highly interactive. Machine-checked formal proofs lead to trustworthy programs and fully specified reliable mathematics. This course introduces students to the theory and use of proof assistants, using the system Lean. We will use Lean to verify properties of functional programs and theorems from pure mathematics. We will learn the theory of deductive reasoning and the logic that these tools are based on.
CSCI 1951-Z: Fairness in Automated Decision Making (1) impact
We know we want to build more equitable technology, but how? In this course we'll review the latest developments in how to build more equitable algorithms, including definitions of (un)fairness, the challenges of explaining how ML works, making sure we can get accountability, and much more.
CSCI 1952-B: Responsible Computer Science in Practice (1) impact
What can ethics and social and political theory tell us about how to navigate the social impacts of computing? How do these perspectives shape technical decisions computer scientists have to make? The role of computer scientists is rapidly evolving: as the systems they build affect everyone, from individuals to society at large, computer scientists become more than just coders. They must be able to assess the social impacts of the technology they develop and engage with experts from other disciplines which offer critical insights and normative perspectives on those impacts. The goal of this course is to enable you to understand and critically reflect on key concepts and ideas in ethics and social and political theory on topics ranging from fairness to consent, digital well-being to regulation, and to apply them to concrete technical decisions in practical exercises and project-oriented work.
CSCI 1952-Q: Robust Algorithms for Machine Learning (1) ai
In this course, we will explore the theoretical foundations of machine learning and deep learning. We will focus on designing and analyzing machine learning algorithms with provable guarantees. More specifically, in this course we will (1) introduce basic tools in linear algebra and optimization, including the power method, singular value decomposition, matrix calculus, (matrix) concentration inequalities, and (stochastic) gradient descent, (2) cover many examples where one can design algorithms with provably guarantees for fundamental problems in machine learning (under certain assumptions), including topic modeling, tensor decomposition, sparse coding, and matrix completion, and (3) discuss the emerging theory of deep learning, including landscape analysis, generalization and over-parameterization, neural tangent kernels, generalization bounds, and implicit regularization.
CSCI 1952-X: Contemporary Digital Policy and Politics (1) impact
This course will examine the politics and processes for making policies related to the internet and digital policy issues. We will examine current issues at the national level, including the White House and federal agencies, Congress, international institutions and industry on issues such as privacy and information security, and on debates like whether and how to regulate Big Tech. Topics covered include the creation of national policies at the White House, the regulatory process, legislation, standards, global implications and the politics of technological change.Format and participation: This is an asynchronous version of IAPA 1811, available only to students enrolled in a completely online master’s degree program, by permission of the instructor. Students will complete weekly activities in lieu of attending synchronous class discussions.
CSCI 1952-Y: Computer Architecture (1) sys
How does a computer program actually turn into the electrons moving inside of your computer? What are the relevant metrics and tradeoffs for designing a computer, and what impact do these tradeoffs have on our software? In this course, we cover computer organization and design, from a software lens. Topics include instruction set architectures, processor design and pipelining, memory hierarchies, program flow optimization, I/O, and emerging applications. Homeworks and final project will use powerful architecture simulators and explore general and specialized hardware for various applications.
CSCI 1952-Z: Robots as a Medium: Creating art with teams of robots (1) ai
In this course, students will work in groups to use teams of flying and ground robots to create works of art, such as paintings, composing music, choreography, etc. This course is open to all concentrations, no prior experience necessary!
CSCI 1953-A: Accessible and Inclusive Cybersecurity and Privacy (1) sys
This seminar course will address the unique privacy and security challenges faced by select vulnerable communities (e.g., youth, refugees, survivors of gender-based violence, journalists, sex workers, etc.). Students will examine the technical foundations of security and privacy, pinpointing where they fail to provide holistic safety solutions. The course will blend theoretical knowledge with practical applications, covering inclusive design principles in cybersecurity and privacy, threat models for marginalized groups, societal and ethical considerations for security practices, and strategies for integrating inclusivity into security research, policymaking, and system design. Through readings, guest lectures, case studies, and collaborative projects, students will learn how to incorporate the needs of at-risk users into research and design. No prerequisites are required.
MATH 0090: Single Variable Calculus, Part I () math
An intensive course in the calculus of one variable including limits; differentiation; maxima and inima, and the chain rule for polynomials, rational functions, trigonometric functions, and exponential functions. Introduction of integration with applications to area and volumes of revolution. Mathematics 0090 and 0100 or the equivalent are recommended for all students intending to concentrate in mathematics or the sciences.
MATH 0100: Single Variable Calculus, Part II (1) math
A continuation of the material of MATH 90 including further development of techniques of integration. Other topics covered are infinite series, power series, Taylor's formula, polar coordinates, parametric equations, introduction to differential equations, and numerical methods. MATH 90 and 100 or the equivalent are recommended for all students intending to concentrate in mathematics or the sciences. MATH 100 may not be taken in addition to MATH 170 or MATH 190.
MATH 0170: Single Variable Calculus, Part II (Accelerated) (1) math
This course, which covers roughly the same material and has the same prerequisites as MATH 100, covers integration techniques, sequences and series, parametric and polar curves, and differential equations of first and second order. Topics will generally include more depth and detail than in MATH 100. MATH 170 may not be taken in addition to MATH 100 or MATH 190.
MATH 0180: Multivariable Calculus (1) math
Three-dimensional analytic geometry. Differential and integral calculus of functions of two or three variables: partial derivatives, multiple integrals, Green's Theorem, Stokes' theorem, and the divergence theorem.
MATH 0190: Single Variable Calculus, Part II (Physics/Engineering) (1) math
This course, which covers roughly the same material and has the same prerequisites as MATH 100, is intended for students with a special interest in physics or engineering. The main topics are: calculus of vectors and paths in two and three dimensions; differential equations of the first and second order; and infinite series, including power series.
MATH 0200: Multivariable Calculus (Physics/Engineering) (1) math
This course, which covers roughly the same material as MATH 180, is intended for students with a special interest in physics or engineering. The main topics are: geometry of three-dimensional space; partial derivatives; Lagrange multipliers; double, surface, and triple integrals; vector analysis; Stokes' theorem and the divergence theorem, with applications to electrostatics and fluid flow.
APMA 0260: Linear Algebra and Multivariable Calculus for Applied Mathematics (1)
This one-semester course provides an integrated introduction to multi-variable calculus and linear algebra. Students will develop a strong foundation in mathematical concepts and techniques essential for the applied mathematics concentration.
APMA 0350: Applied Ordinary Differential Equations (1) math
This course provides a comprehensive introduction to ordinary differential equations and their applications. During the course, we will see how applied mathematicians use ordinary differential equations to solve practical applications, from understanding the underlying problem, creating a differential-equations model, solving the model using analytical, numerical, or qualitative methods, and interpreting the findings in terms of the original problem. We will also learn about the underlying rigorous theoretical foundations of differential equations.
MATH 0350: Multivariable Calculus With Theory (1) math
This course provides a rigorous treatment of multivariable calculus. Topics covered include vector analysis, partial differentiation, multiple integration, line integrals, Green's theorem, Stokes' theorem, and the divergence theorem. MATH 0350 covers the same material as MATH 0180, but with more emphasis on theory and on understanding proofs.
APMA 0360: Applied Partial Differential Equations I (1) math
This course provides an introduction to partial differential equations and their applications. We will learn how to use partial differential equations to solve problems that arise in practical applications, formulating questions about a real-world problem, creating a partial differential equation model that can help answer these questions, solving the resulting system using analytical, numerical, and qualitative methods, and interpreting the results in terms of the original application. To help us support and justify our approaches and solutions, we will also learn about theoretical foundations of partial differential equations.
MATH 0520: Linear Algebra (1) math
A first course in linear algebra designed to develop students' problem solving skills, mathematical writing skills, and gain facility with the applications and theory of linear algebra.
MATH 0540: Linear Algebra With Theory (1) math
This course provides a rigorous introduction to the theory of linear algebra. Topics covered include: matrices, linear equations, determinants, and eigenvalues; vector spaces and linear transformations; inner products; Hermitian, orthogonal, and unitary matrices; and Jordan normal form.
APMA 1160: An Introduction to Numerical Optimization (01) math
This course provides a thorough introduction to numerical methods and algorithms for solving non-linear continuous optimization problems. A particular attention will be given to the mathematical underpinnings to understand the theoretical properties of the optimization problems and the algorithms designed to solve them. Topics will include: line search methods, trust-region methods, nonlinear conjugate gradient methods, an introduction to constrained optimization (Karush-Kuhn-Tucker conditions, mini-maximization, saddle-points of Lagrangians). Some applications in signal and image processing will be explored.
APMA 1170: Introduction to Computational Linear Algebra (1) math
Focuses on fundamental algorithms in computational linear algebra with relevance to all science concentrators. Basic linear algebra and matrix decompositions (Cholesky, LU, QR, etc.), round-off errors and numerical analysis of errors and convergence. Iterative methods and conjugate gradient techniques. Computation of eigenvalues and eigenvectors, and an introduction to least squares methods.
APMA 1180: Introduction to Numerical Solution of Differential Equations (1) math
Fundamental numerical techniques for solving ordinary and partial differential equations. Overview of techniques for approximation and integration of functions. Development of multi-step and multi-stage methods, error analysis, step-size control for ordinary differential equations. Solution of two-point boundary value problems, introduction to methods for solving linear partial differential equations. Students will be required to use Matlab (or other computer languages) to implement the mathematical algorithms under consideration: experience with a programming language is therefore strongly recommended.
MATH 1210: Probability (1) math
Basic probability theory including random variables, distribution functions, independence, expectation, variance, and conditional expectation. Classical examples of probability density and mass functions (binomial, geometric, normal, exponential) and their applications. Stochastic processes including discrete and continuous time Poisson processes, Markov chains, and Brownian motion.
MATH 1530: Abstract Algebra (1) math
A proof-based course that introduces the principles and concepts of modern abstract algebra. Topics will include groups, rings, and fields, with applications to number theory, the theory of equations, and geometry. Previous proof-writing experience is not required. MATH 1530 is required of all students concentrating in mathematics.
MATH 1610: Probability (1) math
Basic probability theory including random variables, distribution functions, independence, expectation, variance, and conditional expectation. Classical examples of probability density and mass functions (binomial, geometric, normal, exponential) and their applications. Stochastic processes including discrete and continuous time Poisson processes, Markov chains, and Brownian motion.
APMA 1650: Statistical Inference I (1) math
APMA 1650 is an integrated first course in mathematical statistics. The first half of APMA 1650 covers probability and the last half is statistics, integrated with its probabilistic foundation. Specific topics include probability spaces, discrete and continuous random variables, methods for parameter estimation, confidence intervals, and hypothesis testing.
APMA 1655: Honors Statistical Inference I (1) math
Students may opt to enroll in APMA 1655 for more in depth coverage of APMA 1650. Enrollment in 1655 will include an optional recitation section and required additional individual work. Applied Math concentrators are encouraged to take 1655.
APMA 1690: Computational Probability and Statistics (1) math
Examination of probability theory and mathematical statistics from the perspective of computing. Topics selected from random number generation, Monte Carlo methods, limit theorems, stochastic dependence, Bayesian networks, dimensionality reduction.
APMA 1740: Recent Applications of Probability and Statistics (1) math
This course develops the mathematical foundations of modern applications of statistics to the computational, cognitive, engineering, and neural sciences. The course is rigorous, but the emphasis is on application. Topics include: Gibbs ensembles and their relation to maximum entropy, large deviations, exponential models, and information theory; statistical estimation and classification; graphical models, dynamic programming, MCMC, parameter estimation, and the EM algorithm.