Brown UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
Sc.B. Degree in Computer Sciencesource 1source 2source 3source 4source 5
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.
Computing Foundations: Program OrganizationCSCI 0112 (1)introCSCI 0112: Computing Foundations: Program OrganizationExplores 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.
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).
- Fundamentals of Computer SystemsorCSCI 0300 (1)sysCSCI 0300: Fundamentals of Computer Systems
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++.
- orTheory of ComputationorCSCI 1010 (1)theoryCSCI 1010: Theory of Computation
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).
Probabilistic Methods in Computer ScienceorCSCI 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.
- Artificial IntelligenceorCSCI 1410 (1)aiCSCI 1410: Artificial Intelligence
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.
Machine LearningorCSCI 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 VisionorCSCI 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.
Computational LinguisticsorCSCI 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 LearningorCSCI 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.
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.
- Senior capstone project (add-on to certain electives)capstone
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 IIorMATH 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.
Single Variable Calculus, Part II (Accelerated)orMATH 0170 (1)mathMATH 0170: Single Variable Calculus, Part II (Accelerated)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.
Single Variable Calculus, Part II (Physics/Engineering)MATH 0190 (1)mathMATH 0190: Single Variable Calculus, Part II (Physics/Engineering)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.
- Introduction to Discrete Structures and ProbabilityorCSCI 0220 (1)introCSCI 0220: Introduction to Discrete Structures and Probability
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.
Advanced Introduction to Probability for Computing and Data ScienceorCSCI 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.
Abstract AlgebraorMATH 1530 (1)mathMATH 1530: Abstract AlgebraA 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.
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.
Other Courses
- 11 × Free Elective
History of the Major
2024 | Replace 5 electives from list (with breadth requirement) → one elective from each of three lists. Drop depth requirements for the required 5 CS electives. Replace 3 Technical Electives → 4 Technical Electives. Require one math class beyond calculus (discrete, probability, or linear algebra). |
2023 | Replace CSCI 160 (Introduction to Algorithms and Data Structures) → CSCI 200 (Program Design with Data Structures and Algorithms). Replace CSCI 180 (Computer Science: An Integrated Introduction) → CSCI 200 (Program Design with Data Structures and Algorithms). Add MATH 1001 (The Art of Writing Mathematics) and MATH 1530 (Abstract Algebra) alternatives to CSCI 0220 (Introduction to Discrete Structures and Probability) breadth elective. Tweak depth-elective lists. |
2022 | Tweak depth-elective lists. |
2021 | Tweak depth-elective lists. |
2020 | Add CSCI 0111 + CSCI 0112 + CSCI 0180 alternative intro sequence. Add CSCI 0300 (Fundamentals of Computer Systems) as a Systems breadth course. Tweak depth-elective lists. |
2019 | Tweak depth-elective lists. |
2018 | Tweak depth-elective lists. |
2017 |