Brown UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
Sc.B. Degree in Applied Mathematics-Computer Sciencesource 1source 2
CS Courses
- orComputing Foundations: DataCSCI 0111 (1)introCSCI 0111: Computing Foundations: Data
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.
Program Design with Data Structures and AlgorithmsCSCI 0200 (1)introCSCI 0200: Program Design with Data Structures and AlgorithmsStudents 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.
orIntroduction to Object-Oriented Programming and Computer ScienceCSCI 0150 (1)introCSCI 0150: Introduction to Object-Oriented Programming and Computer ScienceIntroduces 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!
Program Design with Data Structures and AlgorithmsCSCI 0200 (1)introCSCI 0200: Program Design with Data Structures and AlgorithmsStudents 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.
orCS: An Integrated IntroductionCSCI 0170 (1)introCSCI 0170: CS: An Integrated IntroductionCSCI 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.
Program Design with Data Structures and AlgorithmsCSCI 0200 (1)introCSCI 0200: Program Design with Data Structures and AlgorithmsStudents 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.
Accelerated Introduction to Computer ScienceCSCI 0190 (1)introCSCI 0190: Accelerated Introduction to Computer ScienceA 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).
- pick 3
Fundamentals of Computer SystemsCSCI 0300 (1)sysCSCI 0300: Fundamentals of Computer SystemsCovers 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++.
Introduction to Software EngineeringCSCI 0320 (1)softengCSCI 0320: Introduction to Software EngineeringFocuses 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.
Foundations of AICSCI 0410 (1)aiCSCI 0410: Foundations of AIThis 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.
Theory of ComputationCSCI 1010 (1)theoryCSCI 1010: Theory of ComputationThe 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).
Artificial IntelligenceCSCI 1410 (1)aiCSCI 1410: Artificial IntelligenceAlgorithms 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.
Foundations in AICSCI 1411 (1)aiCSCI 1411: Foundations in AIThis 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.
Machine LearningCSCI 1420 (1)aiCSCI 1420: Machine LearningHow 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.
Computer VisionCSCI 1430 (1)aiCSCI 1430: Computer VisionHow 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.
Advanced Introduction to Probability for Computing and Data ScienceCSCI 1450 (1)mathCSCI 1450: Advanced Introduction to Probability for Computing and Data ScienceProbability 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.
Computational LinguisticsCSCI 1460 (1)aiCSCI 1460: Computational LinguisticsThe 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.
Deep LearningCSCI 1470 (1)aiCSCI 1470: Deep LearningWhat 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.
Probabilistic Methods in Computer ScienceCSCI 1550 (1)algsCSCI 1550: Probabilistic Methods in Computer ScienceRandomization 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.
Design and Analysis of AlgorithmsCSCI 1570 (1)algsCSCI 1570: Design and Analysis of AlgorithmsA 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.
Deep Learning in GenomicsCSCI 1850 (1)aiCSCI 1850: Deep Learning in GenomicsDeep 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.
Data ScienceCSCI 1951-A (1)aiCSCI 1951-A: Data ScienceData 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.
ProbabilityMATH 1210 (1)mathMATH 1210: ProbabilityBasic 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.
ProbabilityMATH 1610 (1)mathMATH 1610: ProbabilityBasic 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.
Statistical Inference IAPMA 1650 (1)mathAPMA 1650: Statistical Inference IAPMA 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.
Honors Statistical Inference IAPMA 1655 (1)mathAPMA 1655: Honors Statistical Inference IStudents 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.
- Coding the Matrix: an Introduction to Linear Algebra for Computer ScienceororCSCI 0530 (1)mathCSCI 0530: Coding the Matrix: an Introduction to Linear Algebra for Computer Science
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.
Linear Algebra With TheoryorMATH 0540 (1)mathMATH 0540: Linear Algebra With TheoryThis 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.
Introduction to Computational Linear AlgebraAPMA 1170 (1)mathAPMA 1170: Introduction to Computational Linear AlgebraFocuses 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.
Math/Stat Courses
- Single Variable Calculus, Part IMATH 0090 ()mathMATH 0090: Single Variable Calculus, Part I
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.
- Single Variable Calculus, Part IIMATH 0100 (1)mathMATH 0100: Single Variable Calculus, Part II
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.
- orMultivariable Calculus (Physics/Engineering)orMATH 0200 (1)mathMATH 0200: Multivariable Calculus (Physics/Engineering)
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.
Multivariable Calculus With TheoryMATH 0350 (1)mathMATH 0350: Multivariable Calculus With TheoryThis 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.
- Applied Ordinary Differential EquationsAPMA 0350 (1)mathAPMA 0350: Applied Ordinary Differential Equations
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.
- Applied Partial Differential Equations IAPMA 0360 (1)mathAPMA 0360: Applied Partial Differential Equations I
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.
- An Introduction to Numerical OptimizationorAPMA 1160 (0-1)mathAPMA 1160: An Introduction to Numerical Optimization
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.
Introduction to Computational Linear AlgebraorAPMA 1170 (1)mathAPMA 1170: Introduction to Computational Linear AlgebraFocuses 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.
Introduction to Numerical Solution of Differential EquationsorAPMA 1180 (1)mathAPMA 1180: Introduction to Numerical Solution of Differential EquationsFundamental 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.
Computational Probability and StatisticsorAPMA 1690 (1)mathAPMA 1690: Computational Probability and StatisticsExamination 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.
Recent Applications of Probability and StatisticsAPMA 1740 (1)mathAPMA 1740: Recent Applications of Probability and StatisticsThis 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.
Other Courses
- 9 × Free Elective