Brown UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
Sc.B. Degree in Mathematics-Computer Sciencesource 1source 2source 3
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).
- pick 2
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++.
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.
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.
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.
Introduction to RoboticsCSCI 1951-R (1)aiCSCI 1951-R: Introduction to RoboticsEach 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.
Math/Stat Courses
- Three semesters of Calculus
- 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 TheoryMATH 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.
- Abstract AlgebraMATH 1530 (1)mathMATH 1530: Abstract Algebra
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.
Other Courses
- 9 × Free Elective