Computer science is now a critical tool for pursuing an ever-broadening range of topics, from outer space to the workings of the human mind. In most areas of science and in many liberal arts fields, cutting-edge work depends increasingly on computational approaches. The undergraduate program at Brown is designed to combine breadth in practical and theoretical computer science with depth in specialized areas. These areas range from traditional topics, such as analysis of algorithms, artificial intelligence, databases, distributed systems, graphics, mobile computing, networks, operating systems, programming languages, robotics and security, to novel areas including games and scientific visualization.

Our requirements are built on a collection of *pathways,* each representing a well defined area within computer science. Concentrators interested in particular areas can choose the courses included in particular pathways. Conversely, concentrators who are unsure of their area of interest but who have particularly enjoyed certain courses can choose pathways that include these concentrations. Students may not use more than two CSCI 1970 courses to complete the requirements for the Sc.B. and one CSCI 1970 course for the A.B. requirements.

### Requirements for the Standard Track of the Sc.B. degree

Prerequisites (0-3 courses) | ||

Calculus prerequisite: students must complete or place out of second semester calculus. | 0-3 | |

Introductory Calculus, Part II | ||

or MATH 0170 | Advanced Placement Calculus | |

or MATH 0190 | Advanced Placement Calculus (Physics/Engineering) | |

Concentration Requirements | ||

Core-Computer Science: | ||

Select one of the following introductory course Series: | 2 | |

Series A | ||

Introduction to Object-Oriented Programming and Computer Science and Introduction to Algorithms and Data Structures | ||

Series B | ||

Computer Science: An Integrated Introduction and Computer Science: An Integrated Introduction | ||

Series C | ||

Accelerated Introduction to Computer Science (and an additional CS course not otherwise used to satisfy a concentration requirement; this course may be CSCI 0180, an intermediate-level course, or an advanced course) | ||

Series D ^{1} | ||

Computing Foundations: Data and Computing Foundations: Program Organization and Computer Science: An Integrated Introduction | ||

Thirteen CS courses numbered 0220 or higher. | 13 | |

♦︎ Two complete pathways (at least one core course from each) | ||

⚬ Each requires two 1000-level courses as well as one-to-three intermediate courses | ||

⚬ One of the courses used in one pathway must be a capstone course (defined below) ^{2} | ||

⚬ The core and related courses used in one pathway may not overlap with those used in another | ||

⚬ 2000-level courses beyond those explicitly mentioned my also be used toward the concentration. They will be considered to be part of the same pathway as their thematically-related 1000-level courses | ||

♦︎ Additional intermediate courses so that a total of five are taken, with at least one from each of the three categories | ||

♦︎ One additional 1000-level course that is neither a core nor a related course for the pathways used above | ||

♦︎ No more than four arts, humanities, and social science oriented CS courses (currently CSCI 1250, 1280, 1370, 1800, 1805, and 1870) may be used for concentration credit. | ||

Intermediate Courses | ||

Students must complete the intermediate courses defined for the pathway they choose. In addition, ScB students must take at least one course from each intermediate course category to ensure they span all areas. Taking additional courses beyond those listed for the pathway may be required. | ||

Foundations | ||

Introduction to Discrete Structures and Probability | ||

Theory of Computation | ||

Mathematics | ||

Coding the Matrix: An Introduction to Linear Algebra for Computer Science | ||

or MATH 0520 | Linear Algebra | |

or MATH 0540 | Honors Linear Algebra | |

Probability for Computing and Data Analysis | ||

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

Intermediate Calculus | ||

or MATH 0200 | Intermediate Calculus (Physics/Engineering) | |

or MATH 0350 | Honors Calculus | |

Systems | ||

Introduction to Software Engineering | ||

Introduction to Computer Systems | ||

or CSCI 0300 | Fundamentals of Computer Systems | |

Pathways | ||

Completing a pathway entails taking two courses in the pathway of which at least one is a course course for the pathway. One must also take the intermediate courses specified as part of the pathway. Certain graduate courses can also satisfy pathway requirements, see the CS Pathway page for more info:http://cs.brown.edu/degrees/undergrad/concentrating-in-cs/concentration-handbook/ | ||

SYSTEMS: studies the design, construction, and analysis of modern, multi-faceted computing systems | ||

Core Courses | ||

Distributed Computer Systems | ||

or CSCI 1670 | Operating Systems | |

or CSCI 1680 | Computer Networks | |

or CSCI 1270 | Database Management Systems | |

Related Courses | ||

Fundamentals of Computer Systems | ||

or CSCI 1320 | Creating Modern Web & Mobile Applications | |

or CSCI 1600 | Real-Time and Embedded Software | |

or CSCI 1650 | Software Security and Exploitation | |

or CSCI 1660 | Introduction to Computer Systems Security | |

or CSCI 1730 | Design and Implementation of Programming Languages | |

or CSCI 1760 | Multiprocessor Synchronization | |

or CSCI 1950Y | Logic for Systems | |

or ENGN 1640 | Design of Computing Systems | |

Intermediate Courses | ||

Introduction to Computer Systems | ||

or CSCI 0300 | Fundamentals of Computer Systems | |

Introduction to Discrete Structures and Probability | ||

or CSCI 0320 | Introduction to Software Engineering | |

SOFTWARE PRINCIPLES: studies the design, construction, and analysis of modern software systems | ||

Core Courses | ||

Compilers and Program Analysis | ||

or CSCI 1320 | Creating Modern Web & Mobile Applications | |

or CSCI 1600 | Real-Time and Embedded Software | |

or CSCI 1730 | Design and Implementation of Programming Languages | |

or CSCI 1950Y | Logic for Systems | |

Related Courses | ||

Database Management Systems | ||

or CSCI 1380 | Distributed Computer Systems | |

or CSCI 1650 | Software Security and Exploitation | |

or CSCI 1680 | Computer Networks | |

or CSCI 1951I | CS for Social Change | |

or CSCI 1951T | Surveying VR Data Visualization Software for Research | |

Intermediate Courses | ||

Introduction to Discrete Structures and Probability | ||

Introduction to Software Engineering | ||

Introduction to Computer Systems (Data) | ||

or CSCI 0300 | Fundamentals of Computer Systems | |

DATA: Studies the management and use of large data collections | ||

Core Courses | ||

Database Management Systems | ||

or CSCI 1420 | Machine Learning | |

or CSCI 1951A | Data Science | |

Related Courses | ||

Probabilistic Methods in Computer Science | ||

or CSCI 1580 | Information Retrieval and Web Search | |

or ECON 1660 | Big Data | |

Intermediate Courses | ||

Introduction to Software Engineering | ||

or CSCI 0330 | Introduction to Computer Systems | |

Linear Algebra | ||

or MATH 0540 | Honors Linear Algebra | |

or CSCI 0530 | Coding the Matrix: An Introduction to Linear Algebra for Computer Science | |

Probability for Computing and Data Analysis | ||

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

ARTIFICIAL INTELLIGENCE / MACHINE LEARNING: studies the theory and application of algorithms for making decisions and inferences from rules and data | ||

Core Courses | ||

Artificial Intelligence | ||

or CSCI 1420 | Machine Learning | |

or CSCI 1430 | Computer Vision | |

or CSCI 1460 | Computational Linguistics | |

or CSCI 1470 | Deep Learning | |

or CSCI 1951R | Introduction to Robotics | |

Related Courses | ||

Probabilistic Methods in Computer Science | ||

or CSCI 1951A | Data Science | |

or CSCI 1951C | Designing Humanity Centered Robots | |

or CSCI 1951K | Algorithmic Game Theory | |

or ENGN 1610 | Image Understanding | |

Intermediate Courses | ||

Probability for Computing and Data Analysis | ||

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

Linear Algebra | ||

or MATH 0540 | Honors Linear Algebra | |

or CSCI 0530 | Coding the Matrix: An Introduction to Linear Algebra for Computer Science | |

THEORY: students the foundations of models and algorithms for computing in various contexts | ||

Core Courses | ||

Introduction to Cryptography and Computer Security | ||

or CSCI 1550 | Probabilistic Methods in Computer Science | |

or CSCI 1570 | Design and Analysis of Algorithms | |

or CSCI 1760 | Multiprocessor Synchronization | |

Related Courses | ||

Introduction to Computational Complexity | ||

or CSCI 1810 | Computational Molecular Biology | |

or CSCI 1820 | Algorithmic Foundations of Computational Biology | |

or CSCI 1950H | Computational Topology | |

or CSCI 1950Y | Logic for Systems | |

or CSCI 1951G | Optimization Methods in Finance | |

or CSCI 1951K | Algorithmic Game Theory | |

Intermediate Courses | ||

Theory of Computation | ||

Probability for Computing and Data Analysis | ||

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

Linear Algebra | ||

or MATH 0540 | Honors Linear Algebra | |

or CSCI 0530 | Coding the Matrix: An Introduction to Linear Algebra for Computer Science | |

SECURITY: studies the design, construction, analysis, and defense of techniques to protect systems, data, and communications | ||

Core Courses | ||

Introduction to Cryptography and Computer Security | ||

or CSCI 1660 | Introduction to Computer Systems Security | |

or CSCI 1650 | Software Security and Exploitation | |

Related Courses | ||

Creating Modern Web & Mobile Applications | ||

or CSCI 1380 | Distributed Computer Systems | |

or CSCI 1670 | Operating Systems | |

or CSCI 1680 | Computer Networks | |

or CSCI 1730 | Design and Implementation of Programming Languages | |

or CSCI 1800 | Cybersecurity and International Relations | |

or CSCI 1805 | Computers, Freedom and Privacy | |

or CSCI 1950Y | Logic for Systems | |

Intermediate Courses | ||

Introduction to Computer Systems | ||

or CSCI 0300 | Fundamentals of Computer Systems | |

Introduction to Discrete Structures and Probability (Or Probability and Statistics (see options below)) | ||

or CSCI 1450 | Probability for Computing and Data Analysis | |

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

VISUAL COMPUTING: studies the creation, interaction, and analysis of images and visual information, including animation and games | ||

Core Courses | ||

Introduction to Computer Graphics | ||

or CSCI 1250 | Introduction to Computer Animation | |

or CSCI 1280 | Intermediate 3D Computer Animation | |

or CSCI 1290 | Computational Photography | |

or CSCI 1300 | User Interfaces and User Experience | |

or CSCI 1370 | Virtual Reality Design for Science | |

or CSCI 1430 | Computer Vision | |

or CSCI 1950T | Advanced Animation Production | |

Related Courses | ||

2D Game Engines | ||

or CSCI 1470 | Deep Learning | |

or CSCI 1950U | Topics in 3D Game Engine Development | |

or ENGN 1610 | Image Understanding | |

or CLPS 1520 | Computational Vision | |

or DATA 1200 | Reality Remix - Experimental VR | |

Intermediate Courses | ||

Introduction to Software Engineering | ||

or CSCI 0330 | Introduction to Computer Systems | |

Linear Algebra | ||

or MATH 0540 | Honors Linear Algebra | |

or CSCI 0530 | Coding the Matrix: An Introduction to Linear Algebra for Computer Science | |

COMPUTER ARCHITECTURE: studies the design, construction, and analysis of computer architecture and hardware | ||

Core Courses | ||

Digital Electronics Systems Design | ||

or ENGN 1640 | Design of Computing Systems | |

or ENGN 1650 | Embedded Microprocessor Design | |

Related Courses | ||

Real-Time and Embedded Software | ||

or CSCI 1760 | Multiprocessor Synchronization | |

or ENGN 1600 | Design and Implementation of Digital Integrated Circuits | |

or CSCI 1951O | Design of Robotic Systems | |

Intermediate Course | ||

Introduction to Computer Systems | ||

or CSCI 0300 | Fundamentals of Computer Systems | |

COMPUTATIONAL BIOLOGY: studies the foundations and applications of algorithms for analyzing biological data and processes | ||

Core Courses | ||

Computational Molecular Biology | ||

Algorithmic Foundations of Computational Biology | ||

CSCI 1850 | Deep Learning in Genomics | |

Related Courses | ||

Machine Learning | ||

or CSCI 1430 | Computer Vision | |

or CSCI 1951A | Data Science | |

or CLPS 1520 | Computational Vision | |

Intermediate Courses | ||

Introduction to Discrete Structures and Probability | ||

Theory of Computation | ||

Probability for Computing and Data Analysis | ||

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

DESIGN: studies the design, construction, and analysis of processes at the interface between humans and systems | ||

Core Courses | ||

User Interfaces and User Experience | ||

or CSCI 1370 | Virtual Reality Design for Science | |

or CSCI 1951C | Designing Humanity Centered Robots | |

Related Courses | ||

Introduction to Computer Graphics | ||

or CSCI 1320 | Creating Modern Web & Mobile Applications | |

or CSCI 1600 | Real-Time and Embedded Software | |

or CSCI 1900 | csciStartup | |

or CSCI 1951A | Data Science | |

or CSCI 1951I | CS for Social Change | |

or CSCI 1951O | Design of Robotic Systems | |

or CSCI 1951T | Surveying VR Data Visualization Software for Research | |

or CSCI 1951V | Hypertext/Hypermedia Seminar: The Web Was Not the Beginning and the Web Is Not the End | |

or ENGN 1931I | Design of Robotic Systems | |

or VISA 1720 | Physical Computing | |

Intermediate Courses | ||

Introduction to Software Engineering | ||

or CSCI 0330 | Introduction to Computer Systems | |

Probability for Computing and Data Analysis | ||

or APMA 1650 | Statistical Inference I | |

or APMA 1655 | Statistical Inference I | |

SELF-DESIGNED: This pathway is modeled after the Brown programs for designing one’s own concentration. Students electing this pathway must write a proposal for their pathway and have it approved by an advisor and the director of undergraduate studies. The proposal must meet the breadth and overall course requirements. This must be done by the end of shopping period of the student’s seventh semester. |

^{1} | Students wishing to go directly from CSCI 0111 to CSCI 0180 (without CSCI 0112) will need to successfully complete additional exercises to receive an instructor override code for CSCI 0180. In 2020-21, these exercises will be offered within CSCI 0111. Students from prior CSCI 0111 offerings should contact Professor Fisler to arrange to do this work. |

^{2} | Capstone: a one-semester course, taken in the student's last undergraduate year, in which the student (or group of students) use a significant portion of their undergraduate education, broadly interpreted, in studying some current topic in depth, to produce a culminating artifact such as a paper or software project. |

^{3} | Certain 1000-level courses may be used to fill the additional 1000-level course requirements for both the AB and ScB. No more than one such course may be used for the AB concentration and no more than three for the ScB concentration. A list of approved non-CS courses is on our web page. Unless explicitly stated on our web page, such non-CS courses may not be used as part of pathways. |

### Requirements for the Standard Track of the A.B. degree

Prerequisites (0-3 courses) | 0-3 | |

Students must complete or place out of second semester calculus. | ||

Introductory Calculus, Part II | ||

or MATH 0170 | Advanced Placement Calculus | |

or MATH 0190 | Advanced Placement Calculus (Physics/Engineering) | |

Concentration Requirements (9 courses) | ||

Core Computer Science: | ||

Select one of the following series: | 2 | |

Series A | ||

Introduction to Object-Oriented Programming and Computer Science and Introduction to Algorithms and Data Structures | ||

Series B | ||

Computer Science: An Integrated Introduction and Computer Science: An Integrated Introduction | ||

Series C | ||

Accelerated Introduction to Computer Science (and an additional CS course not otherwise used to satisfy a concentration requirement; this course may be CSCI 0180, an intermediate-level course, or an advanced course) | ||

Series D ^{1} | ||

Computing Foundations: Data and Computing Foundations: Program Organization and Computer Science: An Integrated Introduction | ||

Seven CS courses numbered 0220 or higher | 7 | |

♦︎ One complete pathway (see ScB for pathways) | ||

Requires two 1000-level courses as well as one-to-three intermediate courses | ||

♦︎ Additional intermediate courses so that a total of three are taken with at least one in each of two different intermediate-course categories (see the ScB requirements for a listing of these categories) | ||

♦︎ One additional 1000-level course that is neither a core nor a related course for the pathways used above | ||

♦︎ Of the remaining two courses, at least one must be at the 1000-level or higher (i.e., one may be an intermediate course not otherwise used as part of the concentration). One course may be an approved 1000-level course from another department. Unless explicitly stated in a pathway, such non-CS courses may not be used as part of pathways. | ||

♦︎ No more than four arts, humanities, and social science oriented CS courses (currently CSCI 1250, 128No more than four arts, humanities, and social science oriented CS courses (currently CSCI 1250, 1280, 1370, 1800, 1805, and 1870) may be used for concentration credit. |

^{1} | Students wishing to go directly from CSCI 0111 to CSCI 0180 (without CSCI 0112) will need to successfully complete additional exercises to receive an instructor override code for CSCI 0180. In 2020-21, these exercises will be offered within CSCI 0111. Students from prior CSCI 0111 offerings should contact Professor Fisler to arrange to do this work. |

### Requirements for the Professional Track of the both the Sc. B. and A.B. degrees.

The requirements for the professional track include all those of the standard track, as well as the following:

Students must complete full-time professional experiences doing work that is related to their concentration programs, totaling 2-6 months, whereby each internship must be at least one month in duration in cases where students choose to do more than one internship experience. Such work is normally done at a company, but may also be at a university under the supervision of a faculty member.

On completion of each professional experience, the student must write and upload to ASK a reflective essay about the experience addressing the following prompts, to be approved by the student's concentration advisor:

- Which courses were put to use in your summer's work? Which topics, in particular, were important?
- In retrospect, which courses should you have taken before embarking on your summer experience? What are the topics from these courses that would have helped you over the summer if you had been more familiar with them?
- Are there topics you should have been familiar with in preparation for your summer experience, but are not taught at Brown? What are these topics?
- What did you learn from the experience that probably could not have been picked up from course work?
- Is the sort of work you did over the summer something you would like to continue doing once you graduate? Explain.
- Would you recommend your summer experience to other Brown students? Explain.