Since our inception in 1979, the Computer Science Department at Brown has forged a path of innovative information technology research and teaching at both the undergraduate and graduate levels. From our modest beginnings as an interest group within the Divisions of Applied Mathematics and Engineering in the 1960s to its current stature as one of the nation's leading computer science programs, the Computer Science Department has continuously produced prominent contributors in the field. Computer Science combines the intellectual challenge of a new discipline with the excitement of an innovative and rapidly expanding technology. The department resides in Brown’s Center for Information Technology; this striking building houses many of the university’s computing activities, as well as the department’s instructional computing facilities and research labs. Faculty, staff and students are provided stateoftheart computing facilities.
We are a diverse community of scholars engaged in all aspects of research, teaching and mentoring in computer science and its related interdisciplinary disciplines. Realizing the importance of computing and algorithmic thinking in so many scientific, social and technological endeavors, we collaborate extensively with colleagues in archaeology, applied mathematics, biology, cognitive and linguistic sciences, economics, engineering, mathematics, medicine, physics and neuroscience.
Our undergraduate offerings reflect the department's multidisciplinary orientations, with joint concentrations in mathematics, applied mathematics, computational biology and economics. We have strong undergraduate research groups and a long history of involving undergraduates in projects that span disciplinary boundaries.
For additional information, please visit the department's website: http://www.cs.brown.edu/
CSCI 0020. The Digital World.
Removes the mystery surrounding computers and the evergrowing 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 HTML, Photoshop, Excel and Python assignments. CSCI 0020 is a good introduction to a wide range of CS topics that have broad relevance in our society. No prerequisites.
Fall  CSCI0020  S01  16182  TTh  9:0010:20(08)  (D. Stanford) 
CSCI 0030. Introduction to Computation for the Humanities and Social Sciences.
Introduces students to the use of computation for solving problems in the social sciences and the humanities. We will investigate a series of realworld problems taken from the news, from books such as Freakonomics, and from current research. Topics covered include data gathering, analysis, and visualization; webbased interfaces; algorithms; and scripting. Enrollment limited to 20. Instructor permission required.
Please go to https://docs.google.com/a/brown.edu/forms/d/1qiv9SC_KmB_yeP5SWbdYLciyJx_nCzz7bXb3J9UW4/viewform to be added to the waitlist. You must use your Brown login to access the waitlist; requests to give access to nonBrown addresses will be ignored.
CSCI 0040. Introduction to Scientific Computing and Problem Solving.
CSCI0040 provides an introduction to using computers to solve STEM (Science, Technology, Engineering and Mathematics) data analysis, visualization and simulation problems from engineering, neuroscience, biology, mathematics and finance.
Students will access and analyze a number of "real world" data sets while becoming fluent MATLAB programmers. Other tools utilized may include Excel, Wolframalpha and Python.
By course end, students should be able to use MATLAB to solve a large variety of scientific data analysis, visualization and simulation problems.
No prior programming experience is required (MATLAB is easy and fun to use).
Spr  CSCI0040  S01  25743  TTh  2:303:50(11)  (D. Potter) 
CSCI 0050. A DataCentric Introduction to Programming.
An introduction to computer programming with a focus on skills needed for dataintensive applications. Topics include core constructs for processing both tabular and structured data; decomposing problems into programming tasks; data structures; algorithms; and testing programs for correct behavior.
CSCI 0080. A First Byte of Computer Science.
Introduces nonCS concentrators to the academic discipline of computer science, its thought processes, and its relevance to other fields and modern life more generally. The target audience is students who are interested in learning more about what computer science is about and the ideas it has to offer tomorrow's citizens and scholars. Topics include the basics of computation and programming, a taste of theoretical computer science and algorithms, and an introduction to codes and artificial intelligence. Although students will learn to read and understand short programs, the course will not teach or require advanced programming skills.
CSCI 0081. TA Apprenticeship: Full Credit.
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 courserelated topics, including preparation of material and development of assignments. Whether CSCI 0081 or its halfcredit version (CSCI 0082) is taken is up to the professor of the course being TA'd. Instructor permission required.
Fall  CSCI0081  S01  16184  Arranged  (T. Doeppner)  
Spr  CSCI0081  S01  25745  Arranged  (T. Doeppner) 
CSCI 0082. TA Apprenticeship: Half Credit.
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 courserelated topics, including preparation of material and development of assignments. Whether CSCI 0082 or its fullcredit version (CSCI 0081) is taken is up to the professor of the course being TA'd. Instructor permission required.
Fall  CSCI0082  S01  16185  Arranged  (T. Doeppner)  
Spr  CSCI0082  S01  25746  Arranged  (T. Doeppner) 
CSCI 0100. Data Fluency for All.
This course is intended to introduce Brown students to computational techniques that data scientists use to tell stories. Data fluency encompasses both data literacy, the basics of statistics and machine learning, and data communication, which relies heavily on principles of design. Students will gain hands on experience using statistical tools such as 'R' to analyze real world data sets, and 'ggplot' to visualize them. Sample application domains include just about every field, since the only requirement is data, which there almost always are (e.g., the complete works of Shakespeare is a sample data set).
Fall  CSCI0100  S01  17092  MWF  1:001:50(06)  (A. Greenwald) 
CSCI 0130. User Interfaces and User Experience.
Topics include understanding when to use different interfaces, modeling and representing user interaction, principles of user experience design, eliciting requirements and feedback from users, methods for designing and prototyping interfaces, and user interface evaluation. Students interested in learning the process behind building a user interface and gaining handson experience designing a user interface should take this course. Programming experience is unnecessary. There will be assignments, readings, and design labs. CSCI 0130 is the same lecture, labs, and readings as CSCI 1300 but half of the assignments will be different (CSCI 1300 will have assignments with computer science prerequisites). Website: http://cs.brown.edu/courses/csci1300/
Fall  CSCI0130  S01  17093  TTh  6:408:00PM(05)  (J. Huang) 
CSCI 0150. Introduction to ObjectOriented Programming and Computer Science.
Emphasizes objectoriented design and programming in Java, an effective modern technique for producing modular, reusable, internetaware programs. Also introduces interactive computer graphics, user interface design and some fundamental data structures and algorithms. A sequence of successively more complex graphics programs, including Tetris, and culminating in a significant final project, helps provide a serious introduction to the field intended for both potential concentrators and those who may take only a single course. No prerequisites, no prior knowledge of programming required.
Fall  CSCI0150  S01  15899  TTh  2:303:50(03)  (A. van Dam) 
CSCI 0160. Introduction to Algorithms and Data Structures.
Introduces fundamental techniques for problem solving by computer that are relevant to most areas of computer science, both theoretical and applied. Algorithms and data structures for sorting, searching, graph problems, and geometric problems are covered. Programming assignments conform with the objectoriented methodology introduced in CSCI 0150. Prerequisite: CSCI 0150 or written permission.
Spr  CSCI0160  S01  25747  TTh  1:002:20(01)  (S. Kamara) 
CSCI 0170. Computer Science: An Integrated Introduction.
CSCI0170/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 paradigmsthe first through the languages Scheme and ML in CSCI0170; the second through Java in CSCI0180. 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.
Although students are taught to use programming languages as tools, the goal of CSCI0170/0180 is not merely to teach programming. On the contrary, the goal is to convey to students that computer science is much more than programming! All of the following fundamental computer science techniques are integrated into the course material: algorithms, data structures, analysis, problem solving, abstract reasoning, and collaboration. Concrete examples are drawn from different subareas of computer science: in 0170, from arbitraryprecision arithmetic, natural language processing, databases, and strategic games; in 0180, from discreteevent simulation, data compression, and client/server architectures.
Fall  CSCI0170  S01  15886  WF  10:0010:50(14)  (J. Hughes) 
Fall  CSCI0170  S01  15886  MWF  10:0010:50(14)  (J. Hughes) 
CSCI 0180. Computer Science: An Integrated Introduction.
A continuation of CSCI 0170. Students learn to program in Java while continuing to develop their algorithmic and analytic skills. Emphasis is placed on objectoriented design, imperative programming, and the implementation and use of data structures. Examples are drawn from such areas as databases, strategy games, web programming, graphical user interfaces, route finding, and data compression. Lab work done with the assistance of TAs. Prerequisite: CSCI 0170 or CSCI 0190.
Spr  CSCI0180  S01  25748  MWF  11:0011:50(04)  (K. Fisler) 
CSCI 0190. Accelerated Introduction to Computer Science.
A onesemester introduction to CS covering programming integrated with core data structures, algorithms, and analysis techniques, similar to the twocourse introductory sequences (CSCI 0150  CSCI 0160 and CSCI 0170  CSCI 0180). Students wishing to take CSCI 0190 must pass a online placement exam. Though the exam is most appropriate for students who have had some prior programming experience, all are welcome to try learning the material and doing the exam. Exam information can be found here: http://cs.brown.edu/courses/cs019/2017/. The exam must be taken before summer ends; students who have not passed the exam won't be allowed to register.
Fall  CSCI0190  S01  15895  MWF  10:0010:50(14)  (S. Krishnamurthi) 
Fall  CSCI0190  L01  17663  M  4:006:00  (S. Krishnamurthi) 
Fall  CSCI0190  L02  17664  M  8:00PM10:00PM  (S. Krishnamurthi) 
Fall  CSCI0190  L03  17665  T  4:006:00  (S. Krishnamurthi) 
Fall  CSCI0190  L04  17666  T  8:00PM10:00PM  (S. Krishnamurthi) 
CSCI 0220. Introduction to Discrete Structures and Probability.
Seeks 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. Introduces Boolean algebras, logic, set theory, elements of algebraic structures, graph theory, combinatorics, and probability. No prerequisites.
Spr  CSCI0220  S01  25749  MWF  1:001:50(06)  (C. Klivans) 
CSCI 0310. Introduction to Computer Systems.
Basic principles of computer organization. Begins with machine representation of data types and logic design, then explores architecture and operations of computer systems, including I/O, pipelining, and memory hierarchies. Uses assembly language as an intermediate abstraction to study introductory operating system and compiler concepts. Prerequisite: CSCI 0150 or CSCI 0180 or CSCI 0190.
CSCI 0320. Introduction to Software Engineering.
Techniques for designing, building, and maintaining large,scalable, and reusable systems. We will cover advanced programming techniques using Java and Javascript. Course assignments will familiarize students with software testing, relational databases, concurrency techniques such as threads, and software engineering tools like git, profilers, and debuggers. A major component of the course will be a group software project of your own design.
Prerequisite: CSCI 0160, CSCI 0180 or CSCI 0190; CSCI 0220 is recommended.
Spr  CSCI0320  S01  25750  TTh  1:002:20(10)  (J. Jannotti) 
CSCI 0330. Introduction to Computer Systems.
Highlevel 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 assemblylanguage programming and Clanguage programming. Extensive programming exercises introduce students to systemslevel programming on Unix systems, as well as to multithreaded programming with POSIX threads. Students will be introduced to the functions of operating systems. Prerequisite: CSCI 0150, 0180, or 0190.
Fall  CSCI0330  S01  15883  MWF  2:002:50(07)  (T. Doeppner) 
CSCI 0530. Directions: The Matrix in Computer Science.
Introduces vectors, matrices and their role in computer science in three components: (1) concepts, theorems, and proofs, (2) procedures and programs, (3) applications and working with data. Weekly lab sessions where students apply concepts to a real task with real data. Example labs: transformations in 2d graphics, errorcorrecting 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 as time allows. Skills in programming and prior exposure to reading and writing mathematical proofs required.
Fall  CSCI0530  S01  15889  MW  3:004:20(17)  (P. Klein) 
Fall  CSCI0530  L01  17038  F  3:004:20  (P. Klein) 
CSCI 1010. Theory of Computation.
The course introduces basic models of computation including languages, finitestate 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). Prerequisite: CSCI 0220 or 1450.
Fall  CSCI1010  S01  17022  TTh  1:002:20(10)  (J. Savage) 
CSCI 1230. Introduction to Computer Graphics.
Fundamental concepts in 2D and 3D computer graphics, e.g., 2D raster graphics techniques, simple image processing, and user interface design. 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. Prerequisite: CSCI 0160, CSCI 0180, or CSCI 0190. Some knowledge of basic linear algebra is helpful but not required. Strong objectoriented programming ability (e.g., in C++, Java or Python) is required.
Fall  CSCI1230  S01  15900  TTh  10:3011:50(13)  (A. van Dam) 
CSCI 1234. Computer Graphics Lab.
CSCI 1234 is a halfcredit 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.
Fall  CSCI1234  S01  16187  Arranged  (A. van Dam) 
CSCI 1250. Introduction to Computer Animation.
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 inclass critique of ongoing work which is essential to the cycle of visually evaluating work in progress, determining improvements, and implementing them for further evaluation.
Please see course website for application procedure.
Fall  CSCI1250  S01  15894  WF  12:001:50(12)  (B. Meier) 
CSCI 1260. Compilers and Program Analysis.
Lexical analysis, syntactic analysis, semantic analysis, code generation, code optimization, translator writing systems. Prerequisites: CSCI 0220 and 0320; 0510 is recommended.
Fall  CSCI1260  S01  15902  TTh  2:303:50(03)  (S. Reiss) 
CSCI 1270. Database Management Systems.
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. Coverage of modern applications such as the Web, but with emphasis on Database Management Systems internals. Prerequisites: CSCI 0160, CSCI 0180, or CSCI 0190. One of CSCI 0330 or CSCI 0320 is strongly recommended.
Fall  CSCI1270  S01  15901  MW  3:004:20(17)  (S. Zdonik) 
CSCI 1280. Intermediate 3D Computer Animation.
Continues work begun in CSCI 1250 with deeper exploration of technical and artistic aspects of 3D computer animation including more sophisticated shading and lighting methods and character modeling, rigging, animation, and dynamics. After a series of individual exercises, students pursue an independent topic and then, working alone or in pairs, create a polished demonstration. Emphasis is on inclass critique of ongoing work. Prerequisite: CSCI 1250. Students may contact the instructor in December for permission.
Spr  CSCI1280  S01  25751  WF  12:001:50(05)  (B. Meier) 
CSCI 1290. 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. Topics covered: 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 Internetscale data, and more. Students are encouraged to capture and process their own data. Prerequisites: previous programming experience, basic linear algebra, calculus, and probability; previous knowledge of computer graphics or computer vision. Strongly recommended: CSCI 1230, CSCI 1430, ENGN 1610.
CSCI 1300. User Interfaces and User Experience.
Topics include understanding when to use different interfaces, modeling and representing user interaction, principles of user experience design, eliciting requirements and feedback from users, methods for designing and prototyping interfaces, and user interface evaluation. Students interested in learning the process behind building a user interface and gaining handson experience designing a user interface should take this course. There will be assignments, readings, and design labs. CSCI 1300 and CS 0130 share the same lecture, labs, and readings but half of the assignments will be different (CSCI 1300 will have assignments with computer science prerequisites). Website: http://cs.brown.edu/courses/csci1300/
Fall  CSCI1300  S01  15885  TTh  6:408:00PM(05)  (J. Huang) 
CSCI 1310. Fundamentals of Computer Systems.
Covers the fundamental concepts, principles, and abstractions that underlie the design and engineering of computer systems. Topics include computer systems organization, modularity, virtualization, communications, atomicity, fault tolerance, security, and performance. Combined lectures and presentation and discussion of case studies. Several handson labs and written assignments, as well as a semesterlong project that is incrementally worked on throughout the semester. Prerequisites: CSCI 0160, 0180, or 0190, or permission of the instructor.
CSCI 1320. Creating Modern Web Applications.
This course covers all aspects of web application development, including the initial concept, usercentric design, development methodologies, front and back end development, databases, security, testing, load testing, accessibility, and deployment. There will be a substantial team project. The course is designed for students with a programming background (equiv CSCI 0320/CSCI 0330) who want to learn how to build web applications, and for students with a background in web design, including HTML and Javascript, who are interested in learning how to extend design techniques to incorporate the technologies needed in modern web applications. Project teams will consist of students with both backgrounds.
Spr  CSCI1320  S01  25752  MWF  10:0010:50(03)  (S. Reiss) 
CSCI 1340. Innovating Game Development.
What technologies will shape the next generation of videos? This projectcentered course focuses on computational innovations for game development. Students examine innovative game technology through case studies of existing games and talks by industrial and academic game professionals. In teams, students propose and implement a project demonstrating a novel technology for gaming. Recommended: strong computational or engineering background.
CSCI 1370. Virtual Reality Design for Science.
Explores the visual and humancomputer interaction design process for scientific applications in Brown's immersive virtual reality Cave. Joint with RISD. Computer Science and design students learn how to work together effectively; study the process of design; learn about scientific problems; create designs applications; critique, evaluate, realize and iterate designs; and demonstrate final projects. Instructor permission required.
Fall  CSCI1370  S01  15892  TTh  10:0011:50(14)  (D. Laidlaw) 
CSCI 1380. Distributed Computer Systems.
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, webbased and mobile information systems. Prerequisite: CSCI 0320 or CSCI 0330.
Spr  CSCI1380  S01  25753  TTh  10:3011:50(09)  (T. Benson) 
CSCI 1410. Artificial Intelligence.
Practical approaches to designing intelligent systems. Topics include search and optimization, uncertainty, learning, and decision making. Application areas include natural language processing, machine vision, machine learning, and robotics. Prerequisites: CSCI 0160, CSCI 0180 or CSCI 0190; and either CSCI 0220 or one of CSCI 0450 or CSCI 1450.
Fall  CSCI1410  S01  15891  TTh  1:002:20(10)  (G. Konidaris) 
CSCI 1420. Machine Learning.
We explore the theory and practice of statistical machine learning, focusing on computational methods for supervised and unsupervised data analysis. Specific topics include Bayesian and maximum likelihood parameter estimation, regularization and sparsitypromoting priors, kernel methods, the expectation maximization algorithm, and models for data with temporal or hierarchical structure. Applications to regression, categorization, clustering, and dimensionality reduction problems are illustrated by examples from vision, language, bioinformatics, and information retrieval.
Spr  CSCI1420  S01  25754  TTh  2:303:50(11)  (M. Littman) 
CSCI 1430. Computer Vision.
How can we program computers to understand the visual world? This course treats vision as 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; segmentation and grouping; texture analysis; learning, object recognition; tracking and motion estimation. Strongly recommended: basic linear algebra, calculus, and probability.
Fall  CSCI1430  S01  15897  MWF  1:001:50(06)  (J. Tompkin) 
CSCI 1450. Probability and Computing.
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. Basic programming experience required for homework assignments. PreRequisites: Two semesters of collegelevel calculus, at the level of Math 0090 and Math 0100.
CSCI 1460. Computational Linguistics.
The application of computational methods to problems in naturallanguage processing. In particular we examine techniques due to recent advances in deep learning: word embeddings, recurrent neural networks (e.g., LSTMs), sequencetosequence models, and generative adversarial networks (GANs). Programming projects include parsing, machine translation, question answering, and chatbots. The prerequisite of CS 1470 (or the equivalent background) is very important.
Spr  CSCI1460  S01  25755  MWF  2:002:50(07)  (E. Charniak) 
CSCI 1470. Deep Learning.
Deep learning is the name for a particular version of neural networksa version that emphasizes multiple layers of networks. Deep leaning, plus the specialized techniques that it has inspired (e.g. convolutional features and word embeddings) have lead to rapid improvements in many applications such as computer vision, machine translation, and computer Go. This course intends to give students a practical understanding of deep learning as applied in these and other areas. It also teaches the Tensorflow programming language for the expression of deep leaning algorithms. (The primary API for Tensorflow is from Python.)
Fall  CSCI1470  S01  16986  MWF  12:0012:50(12)  (E. Charniak) 
CSCI 1480. Building Intelligent Robots.
How do robots function autonomously in dynamic, unpredictable environments? This course focuses on programming mobile robots, such as the iRobot Roomba, to perceive and act autonomously in realworld environments. The major paradigms for autonomous control and robot perception are examined and compared with robotic notions in science fiction. Prerequisite: CSCI 0150, CSCI 0170 or CSCI 0190. Recommended: CSCI 1410 or CSCI 1230.
CSCI 1490. Introduction to Combinatorial Optimization.
This course covers the algorithmic aspects of optimizing decisions in fully observable, nonchanging environments. Students are introduced to stateoftheart optimization methods such as linear programming, integer programming, local search, and constraint programming. Strongly recommended: CSCI 0160, CSCI 0180 or CSCI 0190; CSCI 0510; and CSCI 0530 or MATH 0520 or MATH 0540.
CSCI 1510. Introduction to Cryptography and Computer Security.
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. Prerequisites: CSCI 0220 and CSCI 0510.
Spr  CSCI1510  S01  25772  TTh  10:3011:50(09)  (A. Lysyanskaya) 
CSCI 1550. Probabilistic Methods in Computer Science.
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.
Prerequisite: Basic background in probability theory course such as CSCI 1450.
Spr  CSCI1550  S01  25756  M  3:005:30(13)  (E. Upfal) 
CSCI 1570. Design and Analysis of Algorithms.
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. Prerequisites: CSCI 0160, CSCI 0180, or CSCI 0190, and one of CSCI 0220 or CSCI 1450.
Fall  CSCI1570  S01  16488  MWF  2:002:50(07)  (P. Valiant) 
CSCI 1580. Information Retrieval and Web Search.
Covers traditional material as well as recent advances in information retrieval (IR), the study of indexing, processing, and querying of textual data. The focus will be on newer techniques geared to hypertext documents available on the World Wide Web. Topics include efficient text indexing; Boolean and vector space retrieval models; evaluation and interface issues; Web crawling, linkbased algorithms, and Web metadata; text/Web clustering, classification; text mining.
CSCI 1590. Introduction to Computational Complexity.
Introduction to serial and parallel models of computation; time and space complexity classes on these models; the circuit model of computation and its relation to serial and parallel time complexity; spacetime tradeoffs on serial computers; areatime tradeoffs on the VLSI computational model; interactive and probabilistically checkable proofs; the definition of NP in terms of probabilistically checkable proofs; hardness of approximations to solutions to NPhard problems. Prerequisite: CSCI 0510.
CSCI 1600. RealTime and Embedded Software.
Comprehensive introduction to the design and implementation of software for programmable embedded computing systems, those enclosed in devices such as cellular phones, game consoles, and car engines. Includes the overall embedded realtime software design and development processes, as well as aspects of embedded hardware and realtime, smallfootprint operating systems. Major project component. Prerequisites: CSCI 0320 or 0330.
Fall  CSCI1600  S01  15903  MWF  11:0011:50(16)  (S. Reiss) 
CSCI 1610. Building HighPerformance Servers.
In depth study of modern server design. Considers architectures for building highperformance, robust, scalable, and secure network servers. We will consider all aspects of "missioncritical" servers. Topics include multithreaded and asynchronous programming techniques, database access, performance profiling, security, and redundancy. Teams will build significant projects. Prerequisite: CSCI 0320 or 0360. CSCI 1670 or 1680 is recommended.
CSCI 1620. Computer Systems Security Lab.
CSCI 1620 is a halfcredit 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.
Spr  CSCI1620  S01  25776  W  1:002:00(06)  (R. Tamassia) 
CSCI 1650. Software Security and Exploitation.
Covers software exploitation techniques and stateoftheart mechanisms for protecting (vulnerable) software. It 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 codeinjection and codereuse up to the newest goodies (justintime code reuse). For the most part, it focuses on defenses against certain vulnerability classes and exploitation methods. Students will learn about the boundaries and effectiveness of virtualization, stack and heap protections, and address space randomization, and analyze advanced exploitation techniques and countermeasures.
Fall  CSCI1650  S01  17268  M  3:005:30(15)  (V. Kemerlis) 
CSCI 1660. Introduction to Computer Systems Security.
This course teaches principles of computer security from an applied viewpoint and provides handson 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. Prerequisites: one of CSCI 0160 or CSCI 0180 or CSCI 0190; and CSCI 0330.
Spr  CSCI1660  S01  25757  TTh  1:002:20(10)  (R. Tamassia) 
CSCI 1670. Operating Systems.
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, operatingsystem 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). Prerequisite: CSCI 0330.
Spr  CSCI1670  S01  25760  MWF  2:002:50(07)  (T. Doeppner) 
CSCI 1680. Computer Networks.
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. Prerequisite: CSCI 0330 or consent of instructor.
Fall  CSCI1680  S01  16489  TTh  10:3011:50(13)  (R. Fonseca) 
CSCI 1690. Operating Systems Laboratory.
Halfcredit course intended to be taken with CSCI 1670. Students individually write a simple operating system in C. Serves to reinforce the concepts learned in 1670 and provides valuable experience in systems programming. Corequisite: CSCI 1670.
Spr  CSCI1690  S01  25761  Arranged  (T. Doeppner) 
CSCI 1729. Programming Languages Lab.
Halfcredit course intended to be taken concurrently with CSCI 1730. Students individually implement a full programming language chosen by the course. Reinforces the concepts learned in CSCI 1730 and provides valuable experience in implementing programming languages. Corequisite: CSCI 1730
CSCI 1730. Design and Implementation of Programming Languages.
Explores the principles of modern programming languages by implementation. Examines linguistic features, especially control operators such as firstclass functions, exceptions, and continuations. Studies data and their types, including polymorphism, type inference, and type soundness. Examines compiler and runtime system topics: continuationpassing style and garbage collection. Prerequisite: CSCI 0160, CSCI 0180 or CSCI 0190. Preferred: CSCI 0220, either CSCI 0320 or CSCI 0330, and CSCI 0510.
Fall  CSCI1730  S01  15898  MWF  11:0011:50(16)  (S. Krishnamurthi) 
CSCI 1760. Multiprocessor Synchronization.
This course examines the theory and practice of multiprocessor synchronization. Subjects covered include multiprocessor architecture, mutual exclusion, waitfree and lockfree synchronization, spin locks, monitors, load balancing, concurrent data structures, and transactional synchronization. Prerequisites: CSCI 0330
Fall  CSCI1760  S01  15884  Th  1:002:20(10)  (M. Herlihy) 
Fall  CSCI1760  S01  15884  TTh  1:002:20(10)  (M. Herlihy) 
CSCI 1780. Parallel and Distributed Programming.
Covers the practical aspects involved in designing, writing, tuning, and debugging software designed to run on parallel and distributed systems. Topics might include clientserver computation, threads, networks of workstations, message passing, shared memory, partitioning strategies, load balancing, algorithms, remote procedure call, and synchronization techniques. Prerequisites: CSCI 0220 and either 0320 or 0360; 0510 recommended.
CSCI 1800. Cybersecurity and International Relations.
The global Internet shortens distances, makes businesses more efficient and facilitates greater social interaction. At the same time, it exposes vital national resources to exploitation and makes it easier for the international criminal element to prey on innocent Internet users. Cybersecurity is concerned with making the Internet a more secure and trustworthy environment. In this course we study this topic from the technological and policy points of view. The goal is to facilitate communication across the divide that normally characterizes the technological and policy communities. WRIT
Spr  CSCI1800  S01  25762  MW  3:004:20(14)  (J. Savage) 
CSCI 1810. Computational Molecular Biology.
Highthroughput experimental approaches now allow molecular biologists to make largescale 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.
Prerequisites: CSCI 0160, CSCI 0180 or CSCI 0190, or consent of instructor.
Fall  CSCI1810  S01  15887  TTh  2:303:50(03)  (S. Istrail) 
CSCI 1820. Algorithmic Foundations of Computational Biology.
The 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 associated genomics software tools, as well as on their applications. Topics include: sequence alignment, genome assembly, gene prediction, regulatory genomics, and SNP's variation. The course is open to computer and mathematical sciences students as well as biological and medical students.
Spr  CSCI1820  S01  25763  TTh  2:303:50(11)  (S. Istrail) 
CSCI 1900. csciStartup.
In csciStartup, you will incorporate and run a startup. Apply as a team to be part of a prototype class to remove the mystery from starting a company and to focus entirely on a product you're passionate about. Teams will incorporate, build a product for real customers, advertise their product, and improve it week after week. We'll spend half our class meetings with individual attention to each group's progress and how to improve your offerings. Assignments will be designed to apply to any company, with enough flexibility to ensure you're always working on things that make sense for your business.
Spr  CSCI1900  S01  25764  TTh  6:408:00PM(18)  (J. Jannotti) 
CSCI 1950A. Computational Modeling and Algorithmic Thinking.
In this course you will learn how to apply tools from statistics and computer science to build computational models of physical and biological systems. Example applications include modeling and then simulating the behavior of a collection of genes, the spread of disease in a population, a single neuron in isolation or the complex of neurons comprising the primate visual cortex.
CSCI 1950B. Computational Topology and Discrete Geometry.
This course will investigate (through a mixture od lectures and student presentations of recent papers) topics in computational topology, including Morse theory and discrete differential geometry. Other possible topics are knot polyonmials, simplicial homology, and geometric probability theory. Some mathematical sophistication and programming skills required. No prerequisites.
CSCI 1950H. Computational Topology.
We will study various algorithmic problems that arise in the study of topological phenomena, such as winding number, turning number, knot polynomials, topology of covering spaces (especially Riemann surfaces), and discrete Morse theory. The mathematical topics will be briefly introduced before we move to computations, but some a priori mathematical sophistication will make the course more valuable to the student. Prerequisite: CSCI 0160, 0180, or 0190.
CSCI 1950J. Introduction to Computational Geometry.
Geometric algorithms in two and three dimensions. Algorithmic and geometric fundamentals. Point location, convex hulls, proximity (Voronoi diagrams, Delaunay triangulations), intersections, the geometry of rectangles. Prerequisites: CSCI 0160, 0170, or 0190; and CSCI 0220.
CSCI 1950K. Innovating Game Development.
A projectcentered course focused on technological, paradigm, and design innovations for game development. As teams, students will propose and implement a project demonstrating a novel technology for gaming. Examines the current state and future of game development through a seminar of speakers active in game development and research. A strong computer science or engineering background is recommended.
CSCI 1950M. Advanced Practical Combinatorial Algorithms.
We review recent as well as wellestablished advanced techniques in combinatorial optimization and constraint satisfaction. Students will study and individually present research papers and work on challenging software projects in small teams. Prerequisites: CSCI 0160, 0180, or 0190; and CSCI 0510; and CSCI 1490 or 2580, or instructor permission.
CSCI 1950N. 2D Game Engines.
2D Game Engines covers core techniques used in the development of the software that drives computer games and other interactive software. 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 highlevel engine design, vector and raster graphics, animation, collision detection, physics, content management, and game AI. Prerequisite: CSCI 0160, 0180, or 0190.
CSCI 1950R. Compiler Practice.
This class covers the practice of compiler writing, including lexical analysis, parsing, semantic analysis, code generation, and code optimization. Students design and implement a full compiler modularly for a modern functional language using a modern intermediate representation and modular backend. Instructor permission required.
CSCI 1950T. Advanced Animation Production.
Students will apply knowledge and skills gained in previous animation courses to produce a high quality short animated film as a group. Production will follow the industry standard pipeline that includes modeling, texturing, lighting, animating, rendering, and post production. Interested students will perform preproduction story and concept design prior to beginning of course. Prerequisite: CSCI 1250. Enrollment limited to 15. Instructor permission required.
CSCI 1950U. Topics in 3D Game Engine Development.
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. Prerequisites: CSCI 1230 and one of CSCI 0320 or CSCI 1950N. Enrollment limited to 25.
Spr  CSCI1950U  S01  26314  W  3:005:30(14)  (B. Meier) 
CSCI 1950X. Software Foundations.
Software Foundations will be a projectbased course focusing on the challenges and techniques involved in proving nontrivial properties about realworld systems. We will base our exploration around formal development in a proof environment. Roughly half of the course will be a guided tutorial of proof techniques using one or more theorem provers; in the remainder, students will apply this knowledge to existing systems. No prior experience with theorem provers or proof assistants is necessary, but familiarity with and aptitude for functional programming will be a huge bonus. Prerequisite: CSCI 1730 or equivalent; mathematical maturity.
CSCI 1950Y. Logic for Systems.
The course will focus on proving properties about systems and programs. We will study the distinction between programs and specifications, and check for whether the former obey the latter. We will work with tools that have extensive automation such as model constructors, model checkers, and proof assistants. Problems and projects will apply to realworld systems. Prerequisite: CSCI 0160, CSCI 0180, or CSCI 0190. Preferred but not required: CSCI 0220 and CSCI 0510, or instructor's permission.
Spr  CSCI1950Y  S01  25937  MWF  10:0010:50(03)  (T. Nelson) 
CSCI 1950Z. Computational Methods for Biology.
This course will introduce algorithms from machine learning and combinatorial optimization with a focus on their application to biological data. Topics will include problems in phylogenetic inference, population genetics, and biological interaction networks.
CSCI 1951A. Data Science.
Mastering big data requires skills spanning a variety of disciplines: distributed systems over statistics, machine learning, and a deep understanding of a complex ecosystem of tools and platforms. Data Science refers to the intersection of these skills and how to transform data into actionable knowledge. This course provides an overview of techniques and tools involved and how they work together: SQL and NoSQL solutions for massive data management, basic algorithms for data mining and machine learning, information retrieval techniques, and visualization methods.
Prerequisites: CSCI 0160, CSCI 0180, or CSCI 0190. One of CSCI 0330 or CSCI 0320 strongly recommended.
CSCI 1951B. Virtual Citizens or Subjects? The Global Battle Over Governing Your Internet.
The Internet began as a U.S. government research project, progressed to an open network run by freespirited geeks, and transitioned in the late 1990’s to a unique governance model in which nations, corporations, and civil society were supposed to all have a voice. Where are the real decisions being made? Who is making them? How can you and citizens of other nations influence these decisions? The global battle to run the Internet, brewing for years, has broken wide open with revelations of American spying on a massive scale.
CSCI 1951C. Designing Humanity Centered Robots.
Offered by Brown’s Computer Science department under the auspices of the Humanity Centered Robotics Initiative. It is focused on the iterative design process and how it can be used to develop robots for solving tasks that help people. It will expose students to a suite of fabrication and prototyping technologies sufficient for creating a functioning robotic system.
https://www.youtube.com/watch?v=Dbvis_j_b78
The course has two tracks, one intended for CS concentrators, and one intended for nonconcentrators with previous design experience. The nonconcentrator track cannot be used toward fulfilling a Computer Science concentration requirement.
Fall  CSCI1951C  S01  16493  MW  9:0011:50(01)  (I. Gonsher) 
CSCI 1951F. Computers, Freedom and Privacy: Current Topics in Law and Policy.
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. WRIT
CSCI 1951G. Optimization Methods in Finance.
Optimization plays an important role in financial decisions. Many computational finance problems ranging from asset allocation to risk management, from option pricing to model calibration can be solved efficiently using modern optimization techniques. This course discusses several classes of optimization problems (including linear, quadratic, integer, dynamic, stochastic, conic, and robust programming) encountered in financial models. For each problem class, after introducing the relevant theory and efficient solution methods, we discuss problems of mathematical finance that can be modeled within this problem class. Prerequisites: CSCI 1450 or APMA 1650, and CSCI 1570.
Spr  CSCI1951G  S01  25936  F  2:004:30  (M. Riondato) 
CSCI 1951J. Interdisciplinary Scientific Visualization.
Students will learn about solving scientific problems using computer graphics and visualization. Projects will involve the solution of scientific problems using computer graphics, modeling, and visualization. Working in small groups, students will identify scientific problems, propose solutions involving computational modeling and visualization, evaluate the proposals, design and implement the solutions, apply them to the problems, evaluate their success, and report on results. Example projects might include interactive software systems, immersive virtual reality cave applications, quantitative analysis tools, or new applications of existing visualizations methods. The focus will be on applications in the new virtual reality cave.
CSCI 1951R. Introduction to Robotics.
Each student will learn to program a small quadrotor 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.
Fall  CSCI1951R  S01  17125  TTh  1:002:20(10)  (S. Tellex) 
CSCI 1951S. Virtual Reality Software Review.
In a collaborative group effort, this course will create a wiki that reviews the current state of software for creating virtual and augmented reality artifacts. We will target three software uses: entertainment, education, and science. We will investigate the capabilities of software for headmounted displays (HMDs), bigmetal displays like caves and the yurt, and, as a baseline, desktop displays. We will consider software at different levels of the stack including graphics and visualization libraries, prototype application frameworks, game engines, and standalone applications. Software evaluation will include web research, handson case studies, and surveying.
Spr  CSCI1951S  S01  26313  TTh  10:3011:50(09)  (D. Laidlaw) 
CSCI 1970. Individual Independent Study.
Independent study in various branches of Computer Science. Section numbers vary by instructor. Please check Banner for the correct section number and CRN to use when registering for this course.
CSCI 1971. Independent Study in 2D Game Engines.
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 highlevel engine design, vector and raster graphics, animation, collision detection, physics, content management, and game AI. Prerequisite: CSCI 0160, 0180, or 0190.
CSCI 1972. Topics in 3D Game Engine Development.
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. Prerequisite: CSCI 1230 and one of the following CSCI 0320, CSCI 0330, CSCI 1950N, OR CSCI 1971.
CSCI 1973. Independent Study: Introduction to Computer Systems.
CSCI 2240. Interactive Computer Graphics.
Important current topics in computer graphics. Course includes reading and discussing current research papers, multiple assignments and preliminary projects in which students implement recent papers, and a demanding final integrative project done in small groups. Prerequisite: Instructor's permission or both CSCI 0320 AND CSCI 1230.
Spr  CSCI2240  S01  25958  MWF  11:0011:50(04)  (D. Ritchie) 
CSCI 2270. Topics in Database Management.
Indepth treatment of advanced issues in database management systems. Topics vary from year to year and may include distributed databases, mobile data management, data stream processing and webbased data management. Prerequisite: CSCI 1270.
CSCI 2310. Human Factors and User Interface Design.
Covers current research issues involving the implementation, evaluation and design of user interfaces, while also providing a basic background in the fundamentals of user interface evaluation, programming, tools, and techniques. A possible topic is programming and designing deviceindependent interfaces. Previous topics have included the development of pervasive internetbased interfaces and software visualization. Prerequisite: Consent of instructor.
CSCI 2330. Programming Environments.
Programming tools; control and data integration; software understanding and debugging; environments for parallel and distributed programming; reverse engineering; configuration management and version control and debugging. Emphasis on current research areas. Prerequisite: consent of instructor.
CSCI 2340. Software Engineering.
Topics in the design, specification, construction and validation of programs. Focus will be on tools to support each of these stages. Course will pay special attention to the concerns raised by the properties of modern software systems including distribution, security, componentbased decomposition and implicit control. Prerequisite: CSCI 0320 or CSCI 0330
CSCI 2370. Interdisciplinary Scientific Visualization.
How to do research on using computer graphics, visualization, and interaction applied to scientific problems. Working in small multidisciplinary groups, students identify scientific problems, propose solutions involving computational modeling and visualization, design and implement the solutions, apply them to the problems, and evaluate their success. For 2014, immersive CAVE applications will be a focus, but other interaction or visualization projects are possibles. Prerequisites: all: programming experience; CS students: graphics experience; others: problem ideas. Instructor permission required.
CSCI 2410. Statistical Models in NaturalLanguage Understanding.
Various topics in computer understanding of natural language, primarily from a statistical point of view. Topics include: hidden Markov models, wordtagging models, probabilistic contextfree grammars, syntactic disambiguation, semantic word clustering, wordsense disambiguation, machine translation and lexical semantics. Prerequisite: CSCI 1410.
CSCI 2420. Probabilistic Graphical Models.
Probabilistic graphical models provide a flexible framework for modeling large, complex, heterogeneous collections of random variables. After a brief introduction to their representational power, we provide a comprehensive survey of stateoftheart methods for statistical learning and inference in graphical models. We discuss a range of efficient algorithms for approximate inference, including optimizationbased variational methods, and simulationbased Monte Carlo methods. Several approaches to learning from data are explored, including conditional models for discriminative learning, and Bayesian methods for controlling model complexity. Programming experience required for homeworks and projects, which integrate mathematical derivations with algorithm implementations. PREREQUISITES: CSCI1420 or APMA1690.
CSCI 2430. Topics in Machine Learning.
Machine learning from the artificial intelligence perspective, with emphasis on empirical validation of learning algorithms. Different learning problems are considered, including concept learning, clustering, speedup learning, and behavior learning. For each problem a variety of solutions are investigated, including those from symbolic AI, neural and genetic algorithms, and standard statistical methods. Prerequisite: CSCI 1410 or familiarity with basic logic and probability theory.
CSCI 2440. GameTheoretic Artificial Intelligence.
This course surveys recent developments in an emerging area known as gametheoretic artificial intelligence (AI), which incorporates fundamental principles of game theory into AI. Research in this area is motivated by gametheoretic applications, such as auction design and voting, as well as AI application areas, such as multiagent systems. Students will conduct theoretical, empirical, and experimental investigations, asking fundamental questions such as: can the behavior of computational learning agents converge to gametheoretic equilibria? Prerequisite: Consent of instructor.
CSCI 2450. Exchange Scholar Program.
Fall  CSCI2450  S01  14963  Arranged  'To Be Arranged' 
CSCI 2470. Deep Learning.
Deep learning is the name for a particular version of neural networksa version that emphasizes multiple layers of networks. Deep leaning, plus the specialized techniques that it has inspired (e.g. convolutional features and word embeddings) have lead to rapid improvements in many applications such as computer vision, machine translation, and computer Go. This course intends to give students a practical understanding of deep learning as applied in these and other areas. It also teaches the Tensorflow programming language for the expression of deep leaning algorithms. A final project will implement an advanced piece of work in one of these areas.
Fall  CSCI2470  S01  17656  MWF  12:0012:50(12)  (E. Charniak) 
CSCI 2500A. Advanced Algorithms.
Typically, an algorithm solves one problem, whereas a welldesigned data structure can help implement algorithms for a wide variety of problems. We will study the design, analysis and implementation of advanced data structures. Focus is on data structures that are fast, both theoretically and empirically. Prerequisite: CSCI 1570 or the equivalent.
CSCI 2500B. Optimization Algorithms for Planar Graphs.
Planar graphs arise in applications such as road map navigation and logistics, graph drawing and image processing. We will study graph algorithms and data structures that exploit planarity. Our focus will be on recent research results in optimization. Prerequisite: CSCI 1570 or the equivalent.
CSCI 2510. Approximation Algorithms.
Approximation Algorithms deal with NPhard combinatorial optimization problems by efficiently constructing a suboptimal solution with some specified quality guarantees. We study techniques such as linear programming and semidefinite programming relaxations, and apply them to problems such as facility location, scheduling, bin packing, maximum satifiability or vertex cover. Prerequisite  one of the following: CSCI 1510, 1550, 1810, 1950J, 1950L, any graduatelevel course on algorithms (including 2500A, 2500B, 2580).
Spr  CSCI2510  S01  25770  MWF  11:0011:50(04)  (P. Klein) 
CSCI 2520. Computational Geometry.
Algorithms and data structures for fundamental geometric problems in two and three dimensions. Topics include point location, range searching, convex hull, intersection, Voronoi diagrams, and graph drawing. Applications to computer graphics, circuit layout, information visualization, and computeraided design are also discussed. Prerequisite: CSCI 1570 or instructor permission.
CSCI 2530. Design and Analysis of Communication Networks.
A theory seminar focusing on algorithmic and combinatorial issues related to the design and analysis of communication networks for parallel and distributed systems. Topics include packet routing, circuit switching, distributed shared memory, fault tolerance, and more. Prerequisites: CSCI 1550, 1570, or equivalent.
CSCI 2531. Internet and Web Algorithms.
This advanced graduate course/seminar focuses on the mathematical foundations of algorithms for handling large amounts of data over networks. We'll read and discuss recent papers in information retrieval, search engines, link analysis, probabilistic modeling of the web and social networks, and more. Recommended: CSCI 1550 and CSCI 1570, or equivalent courses.
CSCI 2540. Advanced Probabilistic Methods in Computer Science.
Advanced topics in applications of probabilistic methods in design and analysis of algorithms, in particular to randomized algorithms and probabilistic analysis of algorithms. Topics include the Markov chains Monte Carlo method, martingales, entropy as a measure for information and randomness, and more. Prerequisite: CSCI 1450. Recommended but not required: CSCI 1570.
Spr  CSCI2540  S01  25771  M  3:005:30(15)  (E. Upfal) 
CSCI 2550. Parallel Computation: Models, Algorithms, Limits.
The theoretical foundations of parallel algorithmics. Analysis of the most important models of parallel computation, such as directedacyclic computation graphs, shared memory and networks, and standard dataexchange schemes (common address space and messagepassing). Algorithmic techniques with numerous examples are cast mostly in the dataparallel framework. Finally, limitations to parallelizability (Pcompleteness) are analyzed. The content of the course is likely to change as technology evolves.
CSCI 2560. Advanced Complexity.
Advanced topics in computational complexity, such as: the polynomial hierarchy, interactive proofs, pseudorandomness, derandomization, probabilistically checkable proofs.
CSCI 2570. Introduction to Nanocomputing.
Nanoscale technologies employing materials whose smallest dimension is on the order of a few nanometers are expected to replace lithography in the design of chips. We give an introduction to computational nanotechnologies and explore problems presented by their stochastic nature. Nanotechnologies based on the use of DNA and semiconducting materials will be explored. Prerequisite: CSCI 0510.
CSCI 2580. Solving Hard Problems in Combinatorial Optimization: Theory and Systems.
The theory of combinatorial optimization and how it is embodied in practical systems. Explores issues encountered in implementing such systems. Emphasizes the wide variety of techniques and methodologies available, including integer programming, local search, constraint programming, and approximation algorithms. Problems addressed may include: scheduling, coloring, traveling salesman tours, and resource allocation. Prerequisites: CSCI 0320 and basic knowledge of linear algebra.
CSCI 2590. Advanced Topics in Cryptography.
Seminarstyle course on advanced topics in cryptography. Example topics are zeroknowledge proofs, multiparty computation, extractors in cryptography, universal composability, anonymous credentials and ecash, interplay of cryptography and game theory. May be repeated for credit. Prerequisite: CSCI 1510 or permission of the instructor.
CSCI 2730. Programming Language Theory.
Theoretical models for the semantics of programming languages and the verification of programs. Topics will be drawn from operational semantics, denotational semantics, type theory and static analyses. Recommended prerequisite: CSCI 1730, CSCI 1950Y or instructor permission.
CSCI 2750. Topics in Parallel and Distributed Computing.
CSCI 2750 is a graduate seminar that will consider an advanced topic (to be determined) in distributed computing. May be repeated for credit.
CSCI 2820. Medical Bioinformatics.
Devoted to computational problems and methods in the emerging field of Medical Bioinformatics where genomics, computational biology and bioinformatics impact medical research. We will present challenging problems and solutions in three areas: Disease Associations, Protein Folding and Immunogenomics. This course is open to graduate students and advanced undergraduates with Computational or Life Science backgrounds. Prior background in Biology is not required.
CSCI 2890. Comprehensive Examination Preparation.
For graduate students who have met the tuition requirement and are paying the registration fee to continue active enrollment while preparing for a preliminary examination.
Fall  CSCI2890  S01  14964  Arranged  'To Be Arranged'  
Spr  CSCI2890  S01  23992  Arranged  'To Be Arranged' 
CSCI 2950C. Topics in Computational Biology.
This course will investigate active and emerging research areas in computational biology. Topics include cancer genomics; genome rearrangements and assembly; and protein and regulatory interaction networks. The course will be a mixture of lectures and student presentations of recent conference and journal papers.
CSCI 2950D. Sensor Data Management.
Sensor networks combine sensing, computing, actuation, and communication in a single infrastructure that allows us to observe and respond to phenomena in the physical and cyber world. The sensors range from tiny "smart dusts" to dimesized RFID tags and largescale weather sensors. This course will cover the stateofthe art in designing and building sensor networks, focusing on issues that revolve around data and resource management. No prerequisites.
CSCI 2950E. Stochastic Optimization.
This advanced graduate course/seminar will focus on optimization under uncertainty, or optimization problems where some of the constrains include random (stochastic) components. Most practical optimization problems are stochastic (subject to future market conditions, weather, faults, etc.), and there has been substantial research (both theoretical and experimental) in efficient solution for such problems. We'll read and discuss some of the recent works in this area.
CSCI 2950F. Implementing WebBased Software Systems.
CSCI 2950G. LargeScale Networked Systems.
Explores widelydistributed systems that take advantage of resources throughtout the Internet. The systems leverage their large size and geographic diversity to provide bandwidth scalability, rapid responses, faulttolerance, highavailability and diverse data collection. Topics include overlay networks, peertopeer systems, content distribution networks, distributed file systems and widescale measurement systems.
CSCI 2950H. Advanced Cryptography.
CSCI 2950I. Computational Models of the Neocortex.
This course addresses the problem of modeling the perceptual neocortex using probabilistic graphical models, including Bayesian and Markov networks, and extensions to model time and change such as hidden Markov models and dynamic Bayesian networks. The emphasis is on problems of learning, inference, and attention. Sources include the literature in computational and cognitive neuroscience, machine learning, and other fields that bear on how biological and engineered systems make sense of the world. Prerequisites: basic probability theory, algorithms and statistics.
CSCI 2950J. Cognition, HumanComputer Interaction and Visual Analysis.
In this graduate seminar we will learn about models of human cognition and perception, and explore potential implications of the models on how computers and humans can interact effectively when performing scientific analyses. Participants will be responsible for reading assigned materials, taking turns guiding discussions of the readings, and preparing a final paper and presentation. It is recommended that participants have some background in at least one of the areas of study.
CSCI 2950K. Special Topics in Computational Linguistics.
Every year will cover a different topic in computational linguistics, from a statistical point of view, including parsing, machine translation, conference, summarization, etc. Prerequisites: CSCI 1460 or permission of the instructor.
CSCI 2950M. Computer Science, Algorithms and Economics.
Course investigates the interplay of economic theory and computer science. It is suitable for advanced senior undergraduates and for graduate students. We will study topics such as: algorithms for selfish routing; competitive combinatorial auctions; Multicast cost sharing and cooperative games; graphical models for games; and related topics. This course will be organized around the presentation of recent research papers. Prerequisite: CSCI 1570 or equivalent.
CSCI 2950N. Special Topics in Autonomous Robotics.
No description available.
CSCI 2950O. Topics in BrainComputer Interfaces.
Introduces the mathematical and computational foundations of braincomputer interfaces. Statistical learning, Bayesian inference, dimensionality reduction, information theory, and other topics are presented in the context of brain interfaces based on neural implants and EEG recordings. Prerequisites: Basic knowledge of probability, statistics and linear algebra (e.g., CSCI 1550, APMA 1650, APMA 1690, or APMA 2640). Enrollment limited to 20 students.
CSCI 2950P. Special Topics in Machine Learning.
This seminar course explores current research topics in statistical machine learning. Focus varies by year, and may include Bayesian nonparametrics; models for spatial, temporal, or structured data; and variational or Monte Carlo approximations. Course meetings combine lectures with presentation and discussion of classical and contemporary research papers. Students will apply some this material to a project, ideally drawn from their own research interests.
CSCI 2950Q. Topics in Computer Vision.
This course will cover current topics in computer vision by focusing on a single real problem in computer vision. Recent courses have focused on forensic video analysis of an unsolved murder and threedimensional object recognition for a mobile robot. Readings from the literature are integrated with group projects to solve problems beyond the state of the art. Strong mathematical skills (probability, linear algebra, calculus) and previous exposure to computer vision (e.g. CSCI 1430) are essential.
CSCI 2950R. Special Topics in Advanced Algorithms.
We will study an advanced topic in the design and analysis of algorithms. Prerequisite: CSCI 1570 or the equivalent.
CSCI 2950S. Advanced Practical Combinatorial Algorithms.
We review recent as well as wellestablished advanced techniques in combinatorial optimization and constraint satisfaction. Students will study and individually present research papers and work on challenging software projects in small teams. Prerequisites: CSCI 0160, 0180, or 0190; and CSCI 0510; and CSCI 1490 or 2580, or instructor permission.
CSCI 2950T. Topics in Distributed Databases and Systems.
This course explores data and resource management issues that arise in the design, implementation, and deployment of distributed computing systems by covering the state of the art in research and industry. Typical topics include cloud computing and sensor networks. Strongly recommended: CSCI 0320, CSCI 1270, or CSCI 1951A.
CSCI 2950U. Special Topics on Networking and Distributed Systems.
Explores current research topics in networking, distributed and operating systems. Specific topics may include wireless and sensor networking, Internetscale distributed systems, cloud computing, as well as the core problems, concepts, and techniques underlying these systems. The course has two components: reading and discussion of current and classical research papers, and a research project related to the topic but ideally drawn from students' own research interests. This is a graduatelevel course, undergrads can join with the consent of the instructor.
Spr  CSCI2950U  S01  25773  TTh  2:303:50(11)  (R. Fonseca) 
CSCI 2950V. Topics in Applied Cryptography.
This course surveys recent developments in applied cryptography. Research in this field is motivated by privacy and security issues that arise in practice from areas like cloud computing, databases, surveillance and finance. Topics will vary each year. Pre Requisites: CSCI 1660 required, CSCI 1510 strongly recommended.
Fall  CSCI2950V  S01  17624  TTh  10:3011:50(13)  (S. Kamara) 
CSCI 2950W. Online Algorithms.
Decisions must often be made before the entire data is available. Online algorithms solve problems in which commitments must be made as the data is arriving. Choosing which items to evict from a cache before knowing future requests, which advertisers to consider for displaying ads alongside the result of a search, or which most representative data to store when computing statistics about a huge stream of information. We will discuss the worstcase model, which hinges against the worst possible future data, and some stochastic and gametheoretic models.
CSCI 2950X. Topics in Programming Languages and Systems.
Examines contemporary research topics in software construction from the perspectives of programming languages, software engineering and computeraided verification. The primary goals are to understand which theory applies to which problems and to convert that theory into tools. Topics include security, modularity, and new paradigms in software composition. Prerequisite: CSCI 1730 or written permission of the instructor.
CSCI 2950Y. Theorem Proving.
This course explores computerassisted theorem proving with the Coq Proof Assistant. The course will teach students to formally specify software and model mathematical theories. We will then study techniques for mechanically proving theorems about these Coq. Prerequisites: CSCI 1730 or CSCI 0170 and permission of the instructor.
CSCI 2950Z. Robot Learning and Autonomy.
This seminar course will cover current research topics related to perceiving and acting in the real world. These topics will be pursued through independent reading, class discussion, and project implementations. Papers covered will be drawn from robotics, computer vision, animation, machine learning, and neuroscience. Special emphasis will be given to developing autonomous control from human performance. No prerequisites.
CSCI 2951A. Robots for Education.
This seminar will explore the potential for robotics to engage future generations of scientists and engineers, with a particular focus on broadening participation in computing across society. Academic papers describing existing models, systems, courses, and evaluation for teaching robotics at undergraduate and secondary levels will be covered through students presentations. A group project will be conducted to find viable and accessible "offtheshelf" technology solutions suited to teaching robotics without requiring a technical background. Instructor permission required.
CSCI 2951B. DataDriven Vision and Graphics.
Investigates current research topics in imagebased graphics and vision. We will examine data sources, features, and algorithms for understanding and manipulating visual data. We will pay special attention to methods that use crowdsourcing or Internetderived data. Vision topics such as scene understanding and object detection will be linked to graphics applications such as photo editing and imagebased rendering. These topics will be pursued through independent reading, class discussion and presentations, and a semester long research project. Strong mathematical skills and previous imaging (vision or computational photography) courses are essential.
CSCI 2951C. Autonomous Agents and Computational Market Design.
An important area of research in artificial intelligence is how to effectively automate decision making in timecritical, informationrich environments. Electronic markets are a prime example of such environments. In this course students will create their own simulated electronic market as well as autonomous agents that trade in their market simulation. Application domains will include supply chain management, the Dutch flower auctions, and ad auctions, such as those run by Google and Facebook. Enrollment limited to 40 graduate students.
CSCI 2951E. Topics in Computer Systems Security.
This course explores advanced topics and highlights current research in computer security from a systems perspective. Topics include vulnerabilities and defenses for automotive, computing, medical, and industrial control devices, intrusion detection, botnets, secure network protocols, web spam, tracking of web users, JavaScript sandboxing, attacks and defenses for web applications, and security and privacy issues in cloud computing. Research papers and industry reports will be presented and discussed. Also, handson experiments and system demonstrations will be performed. CSCI 1660 or equivalent background is essential. Enrollment limited to 12. Instructor permission required.
CSCI 2951F. Learning and Sequential Decision Making.
The course explores automated decision making from a computerscience perspective. It examines efficient algorithms, where they exist, for single agent and multiagent planning as well as approaches to learning nearoptimal decisions from experience. Topics will include Markov decision processes, stochastic and repeated games, partially observable Markov decision processes, and reinforcement learning. Of particular interest will be issues of generalization, exploration, and representation. Each student will be expected to present a published research paper and will participate in a group programming project. Prerequisite: a graduatelevel computer science course and some exposure to reinforcement learning from a previous computerscience class or seminar.
Fall  CSCI2951F  S01  15893  TTh  10:3011:50(13)  (M. Littman) 
CSCI 2951K. Topics in Collaborative Robotics.
Practical approaches to designing intelligent systems. Topics include search and optimization, uncertainty, learning, and decision making. Application areas include natural language processing, machine vision, machine learning, and robotics. Prerequisite: CSCI 1410, 1420, 1460, 1480, or 1950F; or instructor permission.
Spr  CSCI2951K  S01  25774  TTh  10:3011:50(09)  (S. Tellex) 
CSCI 2951M. Advanced Algorithms Seminar.
Students in this course will read, present, and discuss recent breakthrough papers on the topic of algorithms, and the related areas needed to analyze algorithms. This course is aimed at current and potential future graduate students who want to gain technical depth and perspective on the field of algorithms. Topics will roughly alternate by year, with even years emphasizing fundamental techniques, and odd years emphasizing applications such as machine learning. Suggested prerequisites: CSCI 1570 and mathematical maturity. Instructor permission required. Enrollment will be limited to 24 students, based on an application that will be described on the first day of class. Ideal students will have a mix of the following: 1) motivation to learn how to read papers, 2) technical skills and background, 3) willingness to participate and contribute to discussions.
CSCI 2951N. Advanced Algorithms in Computational Biology.
This is a fulllecture, graduate course on algorithms and biomedical applications. The Foundations lectures are an introduction to the biological and medical genomics application areas. Each Algorithm section is devoted to an algorithmic method presented in rigorous depth, followed by an important open problem in the application area, together with the current most effective algorithmic solutions to the problem. Graduate students and advanced undergraduates in computational and mathematical sciences and engineering are welcome. Biological, life sciences and medical students and faculty are welcome as well and will be able to participate more in the applications areas.
CSCI 2951O. Foundations of Prescriptive Analytics.
We are undoubtedly in the middle of an Analytics Revolution that enabled turning huge amounts data into insights, and insights into predictions about the future. At its final frontiers, Prescriptive Analytics is aimed at identifying the best possible action to take given the constraints and the objective. To that end, this course provides students with a comprehensive overview of the theory and practice of how to apply Prescriptive Analytics through optimization technology. A wide variety of stateoftheart techniques are studied including: Boolean Satisfiability, Constraint Programming, Linear Programming, Integer Programming, Local Search MetaHeuristics, and LargeScale Optimization. Pre Requisites: One of CSCI 0320 or CSCI 0330 and recommended: one of CSCI 0530, CSCI 1570, MATH 0520 or MATH 0540.
Fall  CSCI2951O  S01  17427  T  4:006:30(09)  (S. Kadioglu) 
CSCI 2951S. Distributed Computing through Combinatorial Topology.
Although computer science itself is based on discrete mathematics, combinatorial topology and its applications may still be unfamiliar to many computer scientists. For this reason, this course provides a selfcontained, elementary introduction to the concepts from combinatorial topology needed to analyze distributed computing. Conversely, while the systems and models used here are standard in computer science, they may be unfamiliar to students with a background in pure or applied mathematics. For this reason, this course also provides a selfcontained, elementary description of standard notions of distributed computing. CSCI 0220 required, CSCI 1760 recommended
CSCI 2951T. DataDriven Computer Vision.
Investigates current research topics in datadriven object detection, scene recognition, and imagebased graphics. We will examine data sources, features, and algorithms useful for understanding and manipulating visual data. We will pay special attention to methods that harness largescale or Internetderived data. There will be an overview of the current crowdsourcing techniques used to acquire massive image datasets. Vision topics such as scene understanding and object detection will be linked to graphics applications such as photo editing. These topics will be pursued through independent reading, class discussion and presentations, and projects involving current research problems in Computer Vision.
CSCI 2951U. Topics in Software Security.
This course investigates the stateoftheart in software exploitation and defense. Specifically, the course is structured as a seminar where students present research papers to their peers. We will begin with a summary of prevalent software defects, typically found in applications written in memory unsafe languages, and proceed to surveying what we are up against: traditional and modern exploitation techniques, ranging from classical code injection and code reuse up to the newest goodies (JITROP, Blind ROP). For the bulk part, we will focus on the latest advances in protection mechanisms, mitigation techniques, and tools against modern vulnerability classes and exploitation methods.
Spr  CSCI2951U  S01  25765  M  3:005:30(13)  (V. Kemerlis) 
CSCI 2951W. Creative Artificial Intelligence for Computer Graphics.
How can artificial intelligence help us create visual content? In this seminar course, we will explore how to use tools such as probabilistic graphical models, probabilistic programs, and neural networks to generate content, explore design spaces, and support creativity for 2D and 3D graphics applications. Each week, we will read recent papers from the graphics and AI literatures and discuss their contributions, connections, and limitations. Students will also complete a collaborative, openended final project. Throughout, the course will emphasize key academic skills such as critical paperreading and how to give clear and compelling presentations.
Fall  CSCI2951W  S01  17127  W  3:005:30(17)  (D. Ritchie) 
CSCI 2951X. Reintegrating AI.
The primary goal of Artificial Intelligence has always been to build complete intelligent agents. However, the field has also always been fragmented into a collection of problemspecific areas of study. This seminar course will survey efforts made, over several decades, to produce "big picture" theories and architectures for reintegrating the various component technologies into complete, generallycapable, intelligent agents. The class will read and discuss two papers per week. Grading will be based on submitted paper summaries, inclass presentations, and a substantial openended final project.
Spr  CSCI2951X  S01  26269  TTh  10:3011:50(09)  (G. Konidaris) 
CSCI 2952A. Blockchains and Cryptocurrencies.
In the first half of this seminar course, the instructor will present a tutorial on blockchains, cryptocurrencies, smart contracts, etc. In the second part, the students will present recent research papers in class.
Spr  CSCI2952A  S01  26320  TTh  10:3011:50(09)  (M. Herlihy) 
CSCI 2955. The Design and Analysis of Trading Agents.
The Dutch Flower Auctions (DFA) clear over 100,000 auctions per day, each lasting on average between 3 and 5 seconds! This semester, we'll study the mechanism through which the DFA distribute 2/3 of the world's flowers, focusing on both the sellers' and buyers' decisionmaking processes. More generally, we'll research ways to automate and optimize decisionmaking in timecritical, informationrich environments, like the DFA. Undergraduate students require instructor permission, and should have already completed CSCI 0190, or CSCI 0150 and CSCI 0160, or CSCI 0170 and CSCI 0180.
CSCI 2956A. Design of Agents for Bidding in Sponsored Search Autions.
This course investigates the new field of sponsored search auctions. Although students will be exposed to the field from the point of view of both the search engine and the advertiser, the course's focus is on advertiser's bidding algorithms. The students will implement novel bidding agents, and the course will culminate in a competition among the students' agents. Undergraduate students who obtained permission from the instructor or completed CSCI 0910, or CSCI 0150 and CSCI 0160, or CSCI 0170 and CSCI 0180 can register for the course. CSCI 1410 is a corequisite.
CSCI 2956R. MultiplicativeWeights/PackingCovering Method for Approximating Linear and Semidefinite Programs.
We will study the method called, variously, multiplicative weights and packingcovering. We will in particular investigate the use of this method for finding approximately optimal solutions to linear programs and semidefinite programs. Prerequisite: A graduatelevel course on algorithms. Enrollment limited to 10. Instructor permission required.
CSCI 2980. Reading and Research.
Section numbers vary by instructor. Please check Banner for the correct section number and CRN to use when registering for this course.
CSCI 2990. Thesis Preparation.
For graduate students who have met the tuition requirement and are paying the registration fee to continue active enrollment while preparing a thesis.
Fall  CSCI2990  S01  14965  Arranged  'To Be Arranged'  
Spr  CSCI2990  S01  23993  Arranged  'To Be Arranged' 
CSCI XLIST. Courses of Interest to Concentrators in Computer Science.
Chair
Ugur Cetintemel
Vice Chair and Director of Undergraduate Studies
Thomas W. Doeppner
Director of Graduate Studies
Shriram Krishnamurthi
Professor
R. Bahar
Professor of Engineering; Professor of Computer Science
Ugur Cetintemel
Professor of Computer Science
Eugene Charniak
University Professor of Computer Science
Maurice P. Herlihy
An Wang Professor of Computer Science
John F. Hughes
Professor of Computer Science
Sorin Istrail
Julie Nguyen Brown Professor of Computational and Mathematical Science
Philip Klein
Professor of Computer Science
Shriram Krishnamurthi
Professor of Computer Science
David H. Laidlaw
Professor of Computer Science
Michael L. Littman
Professor of Computer Science
Anna A. Lysyanskaya
Professor of Computer Science
Steven P. Reiss
Professor of Computer Science
John E. Savage
An Wang Professor of Computer Science
Roberto Tamassia
Plastech Professor of Computer Science
Gabriel Taubin
Professor of Engineering; Professor of Computer Science
Eliezer Upfal
Rush C. Hawkins University Professor of Computer Science
Andries van Dam
Thomas J. Watson Jr. University Professor of Technology and Education
Stanley B. Zdonik
Professor of Computer Science
Professor Research
Kathryn Fisler
Professor of Computer Science (Research)
Acting Professor
Franco Preparata
An Wang Professor Emeritus of Computer Science
Associate Professor
Amy R. Greenwald
Associate Professor of Computer Science
Seny F. Kamara
Associate Professor of Computer Science
Rodrigo Fonseca
Associate Professor of Computer Science
Sohini Ramachandran
Associate Professor of Ecology and Evolutionary Biology and Computer Science
Sherief Reda
Associate Professor of Engineering; Associate Professor of Computer Science
Associate Professor Research
Thomas W. Doeppner
Associate Professor of Computer Science (Research)
Visiting Associate Professor
Benjamin J. Raphael
Visiting Associate Professor of Computer Science
Assistant Professor
Jeff Huang
Assistant Professor of Computer Science
Vasileios Kemerlis
Assistant Professor of Computer Science
George D. Konidaris
Assistant Professor of Computer Science
Tim Klas Kraska
Assistant Professor of Computer Science
Daniel C. Ritchie
Assistant Professor of Computer Science
Stefanie A. Tellex
Assistant Professor of Computer Science
James H. Tompkin
Assistant Professor of Computer Science
Paul A. Valiant
Assistant Professor of Computer Science
Visiting Assistant Professor
Joseph G. Politz
Visiting Assistant Professor of Computer Science (Research)
Visiting Assistant Professor Research
Benjamin S. Lerner
Visiting Assistant Professor of Computer Science (Research)
Senior Lecturer
Caroline J. Klivans
Senior Lecturer in Applied Mathematics and Computer Science
Barbara J. Meier
Senior Lecturer in Computer Science
Adjunct Professor
Michael J. Black
Adjunct Professor of Computer Science
Thomas L. Dean
Adjunct Professor of Computer Science
Donald L. Stanford
Adjunct Professor of Computer Science
Alan M. Usas
Adjunct Professor of Computer Science
Adjunct Professor of the Practice
Linn F. Freedman
Adjunct Professor of the Practice of Computer Science
Adjunct Associate Professor
Joseph J. Laviola
Adjunct Associate Professor of Computer Science
Daniel F. Potter
Adjunct Associate Professor of Computer Science
Adjunct Associate Professor Research
Erik B. Sudderth
Adjunct Associate Professor of Computer Science (Research)
Adjunct Assistant Professor
John H. Jannotti
Adjunct Assistant Professor of Computer Science
Adjunct Assistant Professor Research
Bruce D. Campbell
Adjunct Assistant Professor of Computer Science (Research)
Adjunct Lecturer
Roger B. Blumberg
Adjunct Lecturer in Computer Science
Visiting Scholar
Matteo Riondato
Visiting Scholar in Computer Science
Visiting Scientist
Mark E. Nadel
Visiting Scientist in Computer Science
Thomas A. Sgouros
Visiting Scientist in Computer Science
Senior Research Associate
Tim Nelson
Senior Research Associate in Computer Science
Research Associate
Daniel J. Milstein
Research Associate in Computer Science
Tarik Moataz
Research Associate in Computer Science
Ellie Pavlick
Research Associate in Computer Science
Computer Science
Computer science is now a critical tool for pursuing an everbroadening range of topics, from outer space to the workings of the human mind. In most areas of science and in many liberal arts fields, cuttingedge 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.
Requirements for the Standard Track of the Sc.B. degree
Prerequisites (1 or 2 courses)  
Two semesters of Calculus, for example:  
Introductory Calculus, Part II  
or MATH 0170  Advanced Placement Calculus  
Concentration Requirements (15 courses)  
CoreComputer Science:  
Select one of the following introductory course Series:  2  
Series A  
Introduction to ObjectOriented 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 intermediatelevel course, or an advanced course)  
Select three of the following intermediatelevel courses, one of which must be mathoriented and one systemsoriented:  3  
Introduction to Discrete Structures and Probability (math)  
Introduction to Software Engineering (systems)  
Introduction to Computer Systems (systems)  
Theory of Computation (math) ^{3}  
Probability and Computing (math) ^{4}  
Additional Computer Science Courses: ^{1}  
Select one theoretical computer science course: ^{2}  1  
Theory of Computation ^{3}  
Introduction to Cryptography and Computer Security  
Probabilistic Methods in Computer Science  
Design and Analysis of Algorithms  
Introduction to Computational Complexity  
Multiprocessor Synchronization  
Computational Topology  
Algorithmic Foundations of Computational Biology  
Logic for Systems  
Select one artificial intelligence course: ^{2}  1  
Artificial Intelligence  
Machine Learning  
Computer Vision  
Probability and Computing  
Computational Linguistics  
Select one computer science systems course: ^{2}  1  
Introduction to Computer Graphics  
Compilers and Program Analysis  
Database Management Systems  
User Interfaces and User Experience  
Creating Modern Web Applications  
Distributed Computer Systems  
RealTime and Embedded Software  
Introduction to Computer Systems Security  
Operating Systems  
Computer Networks  
Design and Implementation of Programming Languages  
csciStartup  
Four additional advanced computer science or related courses. Five of the 8 advanced courses must be from CS. In addition to those listed above, students can choose:  4  
Introduction to Computer Animation  
Intermediate 3D Computer Animation  
Virtual Reality Design for Science  
Parallel and Distributed Programming  
Cybersecurity and International Relations  
Computational Molecular Biology  
csciStartup  
Computational Modeling and Algorithmic Thinking  
Computational Topology and Discrete Geometry  
2D Game Engines  
Compiler Practice  
Advanced Animation Production  
Topics in 3D Game Engine Development  
Software Foundations  
Logic for Systems  
Computational Methods for Biology  
Data Science  
Designing Humanity Centered Robots  
Computers, Freedom and Privacy: Current Topics in Law and Policy  
Optimization Methods in Finance  
CSCI 1951H  Software Security Exploitation  
Interdisciplinary Scientific Visualization  
Individual Independent Study  
A capstone course ^{5}  1  
Math: Two semesters of Mathematics or Applied Mathematics beyond MATH 0100/0170. One of these courses must be a linear algebra course  2  
Linear Algebra  
Honors Linear Algebra  
Directions: The Matrix in Computer Science  
Total Credits  15 
^{1} 

^{2}  No course may be used to satisfy more than one area requirement. 
^{3}  CSCI 1010 may be used either as a mathoriented intermediate course or as an advanced course, but not both. It was formerly known as CSCI 0510. 
^{4}  CSCI 1450 may be used either as a mathoriented intermediate course or as an advanced course, but not both. CSCI 1450 was previously known as CSCI 0450. Applied Math 1650 may be used in place of CSCI 1450. However, concentration credit will be given for only one of Applied Math 1650 and CSCI 1450. 
^{5}  Capstone: a onesemester course, normally 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. 
Requirements for the Professional Track of the Sc.B. degree.
The requirements for the professional track include all those of the standard track, as well as the following:
Students must complete two twotofourmonth fulltime professional experiences, doing work that is related to their concentration programs. Such work is normally done within an industrial organization, 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.
Requirements for the Standard Track of the A.B. degree
Prerequisites  
Two semesters of Calculus, for example:  
Introductory Calculus, Part II  
Advanced Placement Calculus  
Concentration Requirements (9 courses)  
Core Computer Science:  
Select one of the following series:  2  
Series A  
Introduction to ObjectOriented 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 intermediatelevel course, or an advanced course)  
Three intermediate courses from the following, of which one must be mathoriented and one must be systemsoriented:  3  
Introduction to Discrete Structures and Probability (math)  
Introduction to Software Engineering (systems)  
Introduction to Computer Systems (systems)  
Directions: The Matrix in Computer Science (math)  
Theory of Computation (math) ^{1}  
Probability and Computing (math)  
Four additional 1000level courses in computer science or related areas are required. 3 of the 4 courses must be in CS ^{2}  4  
Total Credits  9 
^{1}  CSCI 1010 may be used as either a mathoriented intermediate course or as an advanced course, but not as both. It was formerly known as CSCI 0510. 
^{2} 

Requirements for the Professional Track of the A.B. degree.
The requirements for the professional track include all those of the standard track, as well as the following:
Students must complete two twotofourmonth fulltime professional experiences, doing work that is related to their concentration programs. Such work is normally done within an industrial organization, 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.
Computer ScienceEconomics
The joint Computer ScienceEconomics concentration exposes students to the theoretical and practical connections between computer science and economics. It prepares students for professional careers that incorporate aspects of economics and computer technology and for academic careers conducting research in areas that emphasize the overlap between the two fields. Concentrators may choose to pursue either the A.B. or the Sc.B. degree. While the A.B. degree allows students to explore the two disciplines by taking advanced courses in both departments, its smaller number of required courses is compatible with a liberal education. The Sc.B. degree achieves greater depth in both computer science and economics by requiring more courses, and it offers students the opportunity to creatively integrate both disciplines through a design requirement. In addition to courses in economics, computer science, and applied mathematics, all concentrators must fulfill the Computer Science department's writing requirement by passing a course that involves significant expository writing.
Standard Program for the Sc.B. degree.
Prerequisites (3 courses):  
Introductory Calculus, Part II  
Linear Algebra  
or MATH 0540  Honors Linear Algebra  
or CSCI 0530  Directions: The Matrix in Computer Science  
Principles of Economics  
Required Courses (17 courses):  
CSCI 1450  Probability and Computing  1 
or APMA 1650  Statistical Inference I  
or APMA 1655  Statistical Inference I  
Select one of the following Series:  2  
Series A  
Introduction to ObjectOriented 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 intermediatelevel CS course, or a 1000level course.)  
Two of the following intermediate courses, one of which must be mathoriented and one systemsoriented.  2  
Introduction to Discrete Structures and Probability (math)  
Introduction to Software Engineering (systems)  
Introduction to Computer Systems (systems)  
Theory of Computation  
A pair of CS courses with a coherent theme. ^{1}  2  
An additional CS course that is either at the 1000level or is an intermediate course not already used to satisfy concentration requirements. CSCI 1450 may not be used to satisfy this requirement.  1  
ECON 1130  Intermediate Microeconomics (Mathematical) ^{2}  1 
ECON 1210  Intermediate Macroeconomics  1 
ECON 1630  Econometrics I  1 
Three courses from the "mathematical economics" group:  3  
Welfare Economics and Social Choice Theory  
Advanced Macroeconomics: Monetary, Fiscal, and Stabilization Policies  
Market Design: Theory and Applications  
Bargaining Theory and Applications  
Econometrics II  
Financial Econometrics  
Big Data  
Investments II  
Data, Statistics, Finance  
Economics and Psychology  
Behavioral Economics  
Theory of Economic Growth  
The Theory of General Equilibrium  
Game Theory and Applications to Economics  
and any graduate Economics course  
Two additional 1000level Economics courses  2  
Capstone Course in either Computer Science or Economics ^{3}  1  
Total Credits  17 
^{1}  A list of preapproved pairs may be found at the approvedpairs web page. You are not restricted to pairs on this list, but any pair not on the list must be approved by the CS director of undergraduate studies. CSCI 1450 may not be used to satisfy this requirement. 
^{2}  Or ECON 1110, with permission. 
^{3}  A onesemester course, normally 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 (preferably at the intersection of computer science and economics) in depth, to produce a culminating artifact such as a paper or software project. 
Standard Program for the A.B. degree:
Prerequisites (3 courses):  
Introductory Calculus, Part II  
Linear Algebra  
or MATH 0540  Honors Linear Algebra  
or CSCI 0530  Directions: The Matrix in Computer Science  
Principles of Economics  
Required Courses (13 courses):  
CSCI 1450  Probability and Computing  1 
or APMA 1650  Statistical Inference I  
or APMA 1655  Statistical Inference I  
Select one of the following series:  2  
Series A  
Introduction to ObjectOriented 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 intermediatelevel course, or a 1000level course)  
Two of the following intermediate courses, one of which must be mathoriented and one systemsoriented:  2  
Introduction to Discrete Structures and Probability (math)  
Introduction to Software Engineering (systems)  
Introduction to Computer Systems (systems)  
Theory of Computation  
Two additional CS courses; at least one must be at the 1000level. The other must either be at the 1000level or be an intermediate course not already used to satisfy concentration requirements.  2  
ECON 1130  Intermediate Microeconomics (Mathematical) ^{1}  1 
ECON 1210  Intermediate Macroeconomics  1 
ECON 1630  Econometrics I  1 
Three courses from the "mathematicaleconomics" group:  3  
Welfare Economics and Social Choice Theory  
Advanced Macroeconomics: Monetary, Fiscal, and Stabilization Policies  
Market Design: Theory and Applications  
Bargaining Theory and Applications  
Econometrics II  
Financial Econometrics  
Big Data  
Investments II  
Data, Statistics, Finance  
Economics and Psychology  
Behavioral Economics  
Theory of Economic Growth  
The Theory of General Equilibrium  
Game Theory and Applications to Economics  
or any graduate Economics course  
Total Credits  13 
^{1}  Or ECON 1110, with permission. 
Honors
Students who meet stated requirements are eligible to write an honors thesis in their senior year. Students should consult the listed honors requirements of whichever of the two departments their primary thesis advisor belongs to, at the respective departments' websites.
Professional Track
The requirements for the professional track include all those of the standard track, as well as the following:
Students must complete two twotofourmonth fulltime professional experiences, doing work that is related to their concentration programs. Such work is normally done within an industrial organization, 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.
Applied MathematicsComputer Science
The Sc.B. concentration in Applied MathComputer Science provides a foundation of basic concepts and methodology of mathematical analysis and computation and prepares students for advanced work in computer science, applied mathematics, and scientific computation. Concentrators must complete courses in mathematics, applied math, computer science, and an approved English writing course. While the concentration in Applied MathComputer Science allows students to develop the use of quantitative methods in thinking about and solving problems, knowledge that is valuable in all walks of life, students who have completed the concentration have pursued graduate study, computer consulting and information industries, and scientific and statistical analysis careers in industry or government. This degree offers a standard track and a professional track.
Requirements for the Standard Track of the Sc.B. degree.
Prerequisites  two semesters of Calculus, for example  
Introductory Calculus, Part I and Introductory Calculus, Part II  
Advanced Placement Calculus  
Concentration Requirements (17 courses)  
CoreMath:  
MATH 0180  Intermediate Calculus  1 
or MATH 0350  Honors Calculus  
MATH 0520  Linear Algebra  1 
or MATH 0540  Honors Linear Algebra  
or CSCI 0530  Directions: The Matrix in Computer Science  
CoreApplied Mathematics:  
APMA 0350  Applied Ordinary Differential Equations  1 
APMA 0360  Applied Partial Differential Equations I  1 
APMA 1170  Introduction to Computational Linear Algebra  1 
or APMA 1180  Introduction to Numerical Solution of Differential Equations  
CoreComputer Science:  
Select one of the following Series:  2  
Series A  
Introduction to ObjectOriented 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 intermediatelevel CS course, or a 1000level course) )  
Select three of the following intermediatelevel courses, one of which must be mathoriented and one systemsoriented:  3  
Introduction to Discrete Structures and Probability (math)  
Introduction to Software Engineering (systems)  
Introduction to Computer Systems  
Theory of Computation  
Three 1000level Computer Science courses. These three courses must include a pair of courses with a coherent theme. A list of approved pairs may be found at the approvedpairs web page. You are not restricted to the pairs on this list, but any pair not on the list must be approved by the director of undergraduate studies.  3  
Three 1000level Applied Mathematics courses approved by the concentration advisor, of which two should constitute a standard sequence or address a common theme. Typical sequences include: APMA 1200/1210 and APMA 1650 or 1655/1660.  3  
A capstone course: a onesemester course, normally 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.  1  
Note: CSCI 1450 may be used either as a mathoriented core course or as an advanced course. CSCI 1450 was formerly known as CSCI 450: they are the same course and hence only one may be taken for credit. Applied Math 1650 or Applied Math 1655 may be used in place of CSCI 1450. However, concentration credit will be given for only one of Applied Math 1650, 1655 and CSCI 1450.  
Total Credits  17 
Requirements for the Professional Track of the Sc.B. degree.
The requirements for the professional track include all those of the standard track, as well as the following:
Students must complete two twotofourmonth fulltime professional experiences, doing work that is related to their concentration programs. Such work is normally done within an industrial organization, 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.
MathematicsComputer Science
Students may opt to pursue an interdisciplinary Bachelor of Science degree in MathComputer Science, a concentration administered cooperatively between the mathematics and computer science departments. Course requirements include math and systemsoriented computer science courses, as well as computational courses in applied math. Students must identify a series of electives that cohere around a common theme. As with other concentrations offered by the Computer Science department, students have the option to pursue the professional track of the ScB program in MathematicsComputer Science.
Requirements for the Standard Track of the Sc.B. degree.
Prerequisites  
Three semesters of Calculus to the level of MATH 0180, MATH 0200, or MATH 0350  3  
MATH 0520  Linear Algebra  1 
or MATH 0540  Honors Linear Algebra  
Core Courses  
MATH 1530  Abstract Algebra  1 
Select one of the following series:  2  
Series A  
Introduction to ObjectOriented 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 intermediatelevel CS course, or a 1000level CS course  
CSCI 0320  Introduction to Software Engineering  1 
or CSCI 0330  Introduction to Computer Systems  
CSCI 0220  Introduction to Discrete Structures and Probability  1 
or CSCI 1010  Theory of Computation  
Three 1000level Mathematics courses  3  
Three advanced courses in Computer Science ^{1}  3  
Three additional courses different from any of the above chosen from Mathematics, Computer Science, Applied Mathematics, or related areas ^{2}  3  
A capstone course in Computer Science or Mathematics ^{3}  1  
Note: CSCI 1450 may be used either in place of CSCI 220 or 1010 in the core courses or as an advanced course. CSCI 1450 was formerly known as CSCI 450: they are the same course and hence only one may be taken for credit. Applied Math 1650 or 1655 may be used in place of CSCI 1450. However, concentration credit will be given for only one of Applied Math 1650, Applied Math 1655, and CSCI 1450.  
Total Credits  19 
^{1}  These courses must be at the 1000level or higher. The three courses must include a pair of courses with a coherent theme. A list of preapproved pairs may be found at the approvedpairs web page. You are not restricted to the pairs on this list, but any pair not on the list must be approved by the director of undergraduate studies. 
^{2}  These must be approved by a concentration advisor. 
^{3}  A onesemester course, normally 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. 
Requirements for the Professional Track of the Sc.B. degree.
The requirements for the professional track include all those of the standard track, as well as the following:
Students must complete two twotofourmonth fulltime professional experiences, doing work that is related to their concentration programs. Such work is normally done within an industrial organization, 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.
Computer Science
The department of Computer Science offers two graduate degrees in computer science. The Master of Science (Sc.M.) degree for those who wish to improve their professional competence in computer science or to prepare for further graduate study, and the Doctor of Philosophy (Ph.D) degree.
For more information on admission, please visit the following website:
http://www.brown.edu/academics/gradschool/programs/computerscience
Ph.D. Requirements
Requirements for the Ph.D. program can be found at https://cs.brown.edu/degrees/doctoral/reqs/reqs_phd.2015.pdf
Requirements for the Masters Degree
The requirements consist of a basic component and an advanced component. All courses must be at the 1000 level or higher. All courses must be completed with a grade of B or better.
The courses in student's program must be approved by the director of the Master's program (as well as by the student's advisor).
Basic Component
The basic component consists of six courses. None of these courses may be reading and research courses such as CSCI 1970 and CSCI 2980.
The six courses are chosen as follows:
 Two must be CS courses that form a coherent major. Examples of such pairs are listed at http://cs.brown.edu/degrees/undergrad/concentrations/approvedpairs/.
 One must be a CS course (the "breadth" course) that does not form a pair (according to the approvedpairs web page) with either of the courses chosen as the major.
 The three additional courses must be in CS or related areas.
Advanced Component
The advanced component requires the student to complete one of the following five options. Reading and research courses (such as CSCI 2980) may be used as part of options 1, 2, 3, and 4, but not as part of options 5 and 6. An “advanced course,” as used below, is either a 2000level CS courses or a 1000level CS courses that includes a Master's supplement. Master's supplement are nominally halfcredit courses, but students may do the work of these courses without officially registering for them. Examples of such supplements are CSCI 1234 (supplementing 1230), CSCI 1690 (supplementing 1670), and 1729 (supplementing 1730).
“Internships”, as used below, must be approved by the student's advisor and are paid work in the area of the student's master's studies. They may be full, or part time. A fulltime internship must last at least two months but no more than four months. A parttime internship must last at least four months but no more than six months. Normally the internship will be performed between the student's second and third semesters in the program.
The six options are:
 Complete a thesis supervised by her or his advisor and approved by a committee consisting of the advisor and at least one other faculty member.
 Complete a thesis supervised by her or his advisor and approved by a committee consisting of the advisor and at least one other faculty member, and complete an internship.
 Complete a project supervised and approved by her or his advisor.
 Complete a project supervised and approved by her or his advisor, and complete an internship.
 Complete two advanced courses.
 Complete two advanced courses and complete an internship.
Rationale
Students entering the Master's program typically have one of two goals: they intend to pursue research in Computer Science and are preparing themselves to enter Ph.D. programs, or they intend to become professional computer scientists and pursue careers in industry. In both cases, students should take collections of courses that not only give them strength in particular areas of Computer Science, but also include complementary areas that familiarize them with other ways of thinking about the field. For example, a student whose interests are in the practical aspects of designing computer systems should certainly take courses in this area, but should also be exposed to the mindset of theoretical computer science. In a rapidly changing discipline, there is much crossfertilization among areas and students should have some experience in doing advanced work in areas not directly related to their own.
A student whose goal is a research career should become involved as quickly as possible with a research group as part of their Master's studies, and demonstrate and learn about research by participating in it. The resulting thesis or project report will serve to establish her or his suitability for entering a Ph.D. program.
A student whose goal is to be a professional computer scientist should have some professional experience as part of her or his preparation. A certain amount of coursework is required before a student can qualify for a pedagogically useful internship. Students with limited experience in Computer Science should take a few advanced Computer Science courses before embarking on an internship. Other students, particularly those whose undergraduate degrees were at Brown, will have had internship experiences while undergraduates. Internships provide insights for subsequent courses and project work at Brown. Students without such experiences are at a disadvantage with respect to their peers. Thus we strongly encourage students who have not had such experience to choose of of options 2, 4, and 6, for which internships are required.
Note that these internships are not courses and the work is not evaluated as it would be for a course. Students' advisors will assist them in choosing and obtaining internships, but it is up to students themselves to ensure that they get as much benefit as possible from their experiences. They must be able to take advantage of these experiences while completing their Master's projects – we expect as highquality work from them as we do from students who entered the program with prior internship experiences.
A Master's degree normally requires three to four semesters of fulltime study, depending upon one's preparation.
CSCI 1010  Theory of Computation  1 
CSCI 1230  Introduction to Computer Graphics ^{*}  1 
CSCI 1250  Introduction to Computer Animation  1 
CSCI 1260  Compilers and Program Analysis  1 
CSCI 1270  Database Management Systems  1 
CSCI 1280  Intermediate 3D Computer Animation  1 
CSCI 1300  User Interfaces and User Experience  1 
CSCI 1310  Fundamentals of Computer Systems  1 
CSCI 1320  Creating Modern Web Applications  1 
CSCI 1370  Virtual Reality Design for Science  1 
CSCI 1380  Distributed Computer Systems  1 
CSCI 1410  Artificial Intelligence  1 
CSCI 1420  Machine Learning  1 
CSCI 1430  Computer Vision  1 
CSCI 1450  Probability and Computing  1 
CSCI 1460  Computational Linguistics  1 
CSCI 1510  Introduction to Cryptography and Computer Security  1 
CSCI 1550  Probabilistic Methods in Computer Science  1 
CSCI 1570  Design and Analysis of Algorithms  1 
CSCI 1590  Introduction to Computational Complexity  1 
CSCI 1600  RealTime and Embedded Software  1 
CSCI 1610  Building HighPerformance Servers  1 
CSCI 1660  Introduction to Computer Systems Security ^{*}  1 
CSCI 1670  Operating Systems ^{*}  1 
CSCI 1680  Computer Networks  1 
CSCI 1730  Design and Implementation of Programming Languages  1 
CSCI 1760  Multiprocessor Synchronization  1 
CSCI 1780  Parallel and Distributed Programming  1 
CSCI 1800  Cybersecurity and International Relations  1 
CSCI 1810  Computational Molecular Biology  1 
CSCI 1820  Algorithmic Foundations of Computational Biology  1 
CSCI 1900  csciStartup  1 
CSCI 1951A  Data Science  1 
CSCI 1951C  Designing Humanity Centered Robots  1 
CSCI 1951F  Computers, Freedom and Privacy: Current Topics in Law and Policy  1 
CSCI 1951G  Optimization Methods in Finance  1 
CSCI 1951J  Interdisciplinary Scientific Visualization  1 
CSCI 2240  Interactive Computer Graphics  1 
CSCI 2270  Topics in Database Management  1 
CSCI 2310  Human Factors and User Interface Design  1 
CSCI 2330  Programming Environments  1 
CSCI 2340  Software Engineering  1 
CSCI 2370  Interdisciplinary Scientific Visualization  1 
CSCI 2410  Statistical Models in NaturalLanguage Understanding  1 
CSCI 2420  Probabilistic Graphical Models  1 
CSCI 2500A  Advanced Algorithms  1 
CSCI 2500B  Optimization Algorithms for Planar Graphs  1 
CSCI 2510  Approximation Algorithms  1 
CSCI 2540  Advanced Probabilistic Methods in Computer Science  1 
CSCI 2550  Parallel Computation: Models, Algorithms, Limits  1 
CSCI 2590  Advanced Topics in Cryptography  1 
CSCI 2730  Programming Language Theory  1 
CSCI 2750  Topics in Parallel and Distributed Computing  1 
CSCI 2820  Medical Bioinformatics  1 
CSCI 2950K  Special Topics in Computational Linguistics  1 
CSCI 2950T  Topics in Distributed Databases and Systems  1 
CSCI 2950U  Special Topics on Networking and Distributed Systems  1 
CSCI 2951E  Topics in Computer Systems Security  1 
CSCI 2951F  Learning and Sequential Decision Making  1 
CSCI 2951K  Topics in Collaborative Robotics  1 
CSCI 2951M  Advanced Algorithms Seminar  1 
CSCI 2951N  Advanced Algorithms in Computational Biology  1 
CSCI 2951S  Distributed Computing through Combinatorial Topology  1 
CSCI 2951T  DataDriven Computer Vision  1 
* Students may arrange with the instructor to receive 2000 level credit for additional coursework in CSCI 1230, 1660 or 1670 
Concurrent ScB (NUS) and ScM in Computational Biology (Brown University)
The School of Computing at National University of Singapore and The Department of Computer Science at Brown have established a concurrent Bachelor’s and Master’s degree program in Computational Biology. After having first completed four years of under graduate study at National University of Singapore (NUS), qualified students will attend Brown University to complete their fifth and final year of study in computational biology. After the successful completion of requirements set forth by both universities, the students will simultaneously earn both their Sc.B. and Sc.M. degrees. The Sc.B will be awarded by the National University of Singapore, while the Sc.M. is awarded by Brown University.