Before continuing, please read the Brown CS 2020-21 Plan, which may replace some of the information below.
Brown CS offers eight introductory courses in computer science. Here's a quick guide on how to choose which one to take. You can also watch this video, an overview given by the faculty of CS 111, CS 15, CS 17, CS 19, and the Director of Undergraduate Studies.
For Potential Concentrators
Those planning to concentrate (major) in computer science should take one of CSCI0150/0160, CSCI0170/0180, or CSCI0190. Neither CSCI0150 nor CSCI0170 assumes prior programming background. Both prepare students for subsequent courses in the concentration, but with different approaches and some differences in content. The descriptions below outline the differences: to help you decide between them, you might attend the first lectures of both courses. CSCI0190 is an accelerated course that students must place into over the summer.
CSCI0111 is a new introductory course that will eventually be part of a three-course introductory sequence leading into the CS concentration. This sequence is designed for students who want to spread out their CS studies either to accommodate other high-demand courses or to give time to explore CS as a potential concentration. For academic year 2019-20, CSCI0111 will be offered both fall and spring. CSCI0112 will be offered in spring 2020. Students who do well in CSCI0111 in the fall and wish to accelerate into the concentration may do additional work over winter break to prepare for CSCI0180 in the spring.
Students who would like an introduction to using computers might consider CSCI0020.
Students in the social sciences and the humanities who would like a solid introduction to applied computer science that is relevant to their concentrations might consider taking CSCI0030.
Students who want a one-semester course on programming that’s not as time-intensive as CSCI 0150 and 0170 might consider CSCI0111. Note that we are no longer offering CSCI 0040.
Students seeking an introduction to data science should consider CSCI0100.
Students seeking an introduction to user interfaces and user experience should consider CSCI0130
Note that none of CSCI 0020, 0100, and 0130 satisfy prerequisites for other first-year programming courses. They do not count towards a CS concentration. They do not count towards the new Data Fluency certificate for non-concentrators (nor do they satisfy prerequisites for the new DATA 0200 course within that certificate). Students who want to continue into the CS concentration after taking one of these courses will need to start over with 0111, 0150, 0170, or 0190. Accordingly, students who are considering a CS concentration are advised to start with one of the introductory courses for concentrators.
Placement Based on Prior Background
Brown CS does not offer credit for AP or IB courses. Students with prior background can either take the placement exam for CSCI0190 (offered only during the summer) or take CSCI0150/0170 (the style of programming in CSCI0170 is sufficiently different from that used in AP that many students with prior experience find it rewarding). Students may not simply skip CSCI0150/CSCI0170 and start in the next course. If you are a transfer student or have taken intro CS at another college, contact the one of the directors of Undergraduate Studies to determine your placement.
Summary of the Courses
CSCI0020, offered in the fall, is for students who want an introduction to the use of computers that does not involve much programming. It is intended primarily for humanities concentrators and may not be used as part of a CS concentration. This course offers a broad view of the digital world and acquaints the student with a variety of applications and the underlying theory that drives them. Students can expect to get a broad perspective on computing history and future trends as it applies to many current day activities and issues.
CSCI0030, offered in the spring, an introduction to computation in the social sciences and humanities, introduces students to the use of computation for solving problems relevant to the humanities and social sciences. The course is broken down into a series of real-world problems taken from the news, from books such as Freakonomics, and from current research. For each problem, students discuss how one might actually test the hypothesis the problem poses using available data. Students then create and run experiments that actually perform such tests. Topics covered include data gathering, data analysis, web-based interfaces, security, algorithms, and scripting. Preference is for students with no prior computer science background, though some familiarity with using computers, such as having created spreadsheets, is useful.
Direct questions to the instructor: Enrique Areyan, email@example.com
csci0100 (not offered AY20-21)
CSCI0100, offered in the fall, introduces students to computational techniques that data scientists use to tell stories. Data fluency encompasses each of 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).
Direct questions to the professor: Amy Greenwald, firstname.lastname@example.org
csci0111 & csci0112
CSCI0111 (offered both semesters)/0112 (offered in the spring)/0113 is a three-course introductory sequence designed to provide students with more flexibility in exploring CS within their overall academic program. The first course focuses on data: how we program with it, sanity-check it, and organize it depending on the computational problem at hand. The course combines basic data science content (though not statistics) with core data structures and algorithms from CS. Students work in a combination of programming languages (Pyret and Python) to begin to learn how different programming tools are suited to different tasks. Collaboration is welcome on most assignments.
In AY20-21, students should take CS0180 in place of CS0113. As CS0112 will only be offered in Fall 2020, students who take CS0111 in Fall 2020 will have the option of additional work to complete prior to taking CS 0180.
CSCI0130, offered in the fall, covers 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 hands-on experience designing a user interface should take this course. Programming experience is unnecessary. Its lectures are the same as those of CSCI 1300 (which does require programming experience), but its assignments are different.
Direct questions to the professor: Jeff Huang, email@example.com
CSCI0150/0160 is a two-course sequence that emphasizes programming practice in the fall (0150) and theoretical foundations in the spring (0160). CSCI0150 is a challenging object-oriented programming course (using Java) in which students gain experience with object-oriented design techniques and the use of Java-FX, Java's 2D graphics library. Basic data structures (arrays, lists, stacks, queues, trees) are covered as well. Students will design and implement a sequence of moderate to fairly lengthy interactive programs, including Tetris, a fascinating computer game. All programs use graphical user interfaces. While the course uses games as a motivating domain, this is not a course in game design, and the techniques and skills learned are equally applicable across other domains.
In CSCI0160, students learn the theoretical tools used to analyze computation and make programs more efficient. A number of fundamental algorithms and data structures are covered, as well as their implementations. Programming is in Java and (some) Python.
CSCI0170/1080 is a two-course sequence that integrates learning programming with learning the theoretical foundations of computer science. In the fall semester (0170), students learn how to break problems down into elegant and concise programs using functional programming (in Racket and ReasonML). Functional languages have a gentle learning curve, while differing from the styles of programming that students typically see in high school. The course introduces both practical and theoretical techniques for assessing how well programs satisfy their requirements.
In the spring semester (0180), students learn additional key data structures and algorithms of computer science, while broadening their programming skills to include object-oriented programming (first in Java, then in Scala, a language which combines functional and object-oriented programming). Helping students learn to solve problems in multiple programming styles, and choose languages appropriate to a task, is one of the main goals of this sequence.
CSCI0190 is offered in the fall. It compresses much of the first-year curriculum into a single semester by spending significantly less time on fundamentals of programming. Students cannot enroll directly into CSCI0190; instead they must qualify for it by taking a placement exam administered the summer before. (The placement is self-contained, so even students with no prior computing background are welcome to try it out.) Additional information is available on the CSCI 0190 home page.
Taking CSCI0190 does not reduce the total number of courses that a student must take for a CS concentration. Students will take an additional course (of their choosing) to act as the second course of their introductory sequence. Many students go on to take CS0180 after CS0190, especially if they did not have a strong grounding in object-oriented programming prior to starting at Brown.
Direct questions to the professor: Shriram Krishnamurthi, firstname.lastname@example.org.