What CS Course Should I Take?

Students who intend to concentrate in CS should take one of CSCI 0150, 0170, and 0190 (students intending to take 0190 must start in 0170). It doesn't matter which of them is taken — all three of the sequences satisfy later prerequisites. (While 150 and 170 start two-course sequences, 190 does not. However, students completing 190 who intend to concentrate in CS must pair it with either CSCI 180 or a more advanced CS course.) In the first meetings of both CSCI 0150 and 0170, the differences between the two courses will be discussed. If students feel they should start with a more advanced course, they should discuss this with a CS faculty member. While the department does not use AP scores to determine placement, it does want to make sure that students start with a course at the appropriate level.

Students intending to concentrate in the sciences and engineering might consider taking CSCI 0040, which provides an excellent background for scientific programming.

Students in the humanities and social sciences who are interested in using computers for the quantitative analysis and presentation of data in their fields might consider CSCI 0931.

Students in all disciplines who want an introduction to computing and computer science might consider CSCI 0020 and CSCI 0080. The former introduces students to the use modern computing technology with an emphasis of what people should know to be tech-savvy citizens. The latter teaches what the field of computer science is about and how it will be affecting our future.

CSCI 0020 is for students who want to learn about current computing technology and its impact on society. It may not be used as part of a CS concentration. The course introduces students to a fair number of topics about the ever-pervasive computing world we live in. It discusses historical foundations as well as current and future trends and explores the technical, social and economic impact of this digital evolution and the growing impact of the Internet of Things. Students complete five projects, three of which involve entry-level programming in HTML/CSS, JavaScript and Python in order to understand the fundamental elements of software development and its utility. Students also complete 10 mandatory laboratory sessions which prepare them for the project assignments. There is a midterm and a final exam. Students can expect to get a broad perspective on computing history and future trends as it applies to many current day activities and issues. They should expect to put in an average of 3 to 5 hours per week outside of class. For more information, see https://cs.brown.edu/courses/csci0020/.

CSCI 0040 is intended for science and engineering concentrators and provides an introduction to the art and science of computer programming, with a focus on the solution of common scientific and numerical problems. It may not be used as part of a CS concentration. No programming experience is assumed, however knowledge of calculus (such as from MATH 0090) is required. Approximately half the course is focused on programming and half is allocated to topics in scientific computation, including linear algebra, statistics, regression, Markov chains, google page rank, numerical methods, and image processing. Though the primary language used is MATLAB, students will have the option of doing some assignments in Python, R, or Julia (all of which have a syntax similar to MATLAB). Students should expect to put in an average of 10 to 15 hours per week outside of class. The class has written homeworks, programming projects, and two exams. Collaboration is encouraged; students may work on programming projects in pairs. For more information see http://cs.brown.edu/courses/csci0040/.

CSCI 0080 introduces non-CS concentrators to the academic discipline of computer science and its relevance to other fields and to 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 computing architectures and artificial intelligence. Students will learn to write short programs, but the course will not teach or require advanced programming skills. The class has weekly homeworks, a midterm and a final exam, and a final paper. Students should expect to put in an average of 2 to 4 hours per week outside of class. For more information, see http://cs.brown.edu/courses/cs008/.

CSCI 0150/0160 is a two-course sequence intended for those who might consider concentrating in Computer Science as well as for those who just want a strong background in programming practice (CSCI 0150) and its theoretical foundations (CSCI 0160). CSCI 0150 also works well for those who want a one-semester intensive introduction to computer programming. No prior background in programming is assumed or required. CSCI 0150 is a challenging object-oriented programming course (using Java) in which students gain experience with object-oriented design techniques and the use of JavaFX, Java’s 2D graphics library, through the design and implementation of a sequence of moderate to fairly lengthy interactive programs, including the computer game Tetris. All programs use graphical user interfaces. CSCI 0150 has no exams; students are graded solely on how well they do on their programming assignments. The course therefore has a very strict policy on collaboration: while students may discuss high-level concepts with one another, their work on assignments must be completely their own. For more information, see http://cs.brown.edu/courses/csci0150/. In CSCI 0160, 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. The course has written homeworks, programming assignments, and exams. All problem sets can be discussed and worked on collaboratively. They must be written up independently. All programming must be done independently. For more information, see http://cs.brown.edu/courses/csci0160.html. Expect to spend an average of 10 to 15 hours per week on assignments.

CSCI 0170/0180 is a two-course sequence intended for those who might consider concentrating in Computer Science. Programming and its theoretical foundations are intermixed in this two-course sequence. No prior background in programming is assumed or required. Students who have had a significant exposure to Java programming in high school might prefer this sequence over 0150/0160. CSCI 0170 begins by teaching Racket, a dialect of LISP. It continues with a language in the ML family that exposes students to types and type-inference, pattern-matching, and modules. Both Racket and ML exemplify the functional programming paradigm, which facilitates extremely concise and elegant solutions to many problems. CSCI 0180 uses Java as a vehicle for teaching the object-oriented programming paradigm, which emphasizes modularity, flexibility, and extensibility. Halfway through the semester, the course switches to the Scala programming language and students begin to use multiple programming paradigms. Expect to spend an average of 10 to 15 hours per week on programming assignments and homeworks. CSCI0170 and CSCI0180 have strict policies on collaboration: students must do their own work, except where other collaboration is explicitly permitted. For more information on CSCI 0170, see http://cs.brown.edu/courses/csci0170/; for CSCI 0180, see http://cs.brown.edu/courses/csci0180/.

CSCI 0190 compresses a year of introductory material into a single semester. Students cannot register for the course. Instead, students who believe they are qualified to take CSCI 0190 should register for and attend CSCI 0170. During the first month of class, CSCI 0170 will offer supplemental homeworks for those who are considering CSCI 0190. Students who do well on these homeworks will be invited to take CSCI 0190, which begins as a separate course a month later. (As a result, even students without prior computer science background are welcome to try CSCI 0190 if their performance in the first month is good enough.) Expect to spend an average of 10 or so hours per week on programming assignments and homeworks. CSCI 0190 has a very strict policy on collaboration: while students may discuss high-level concepts with one another, their work on programming assignments must be completely their own. Students may work in pairs on some homeworks, but other homeworks must be the sole work of the individual students. For more information, see http://cs.brown.edu/courses/csci0190/.

CSCI 0931 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. The sorts of problems covered are drawn from such topics as:

 

 

Topics covered include

 

Lectures involve hands-on programming exercises and are essential. There are weekly homeworks as well as two programming projects and a final programming project. Expect to spend an average of 6 to 8 hours per week outside of class. For more information, see http://cs.brown.edu/courses/csci0931/.

CSCI 0220 teaches topics in discrete mathematics that are relevant in computer science; such as logic, graph theory, and probability. It also teaches rigorous and mathematical thinking, and mathematical proofs. In short, CSCI 0220 provides the tools to solve interesting problems. It explores the math behind spam filters, RSA cryptography, and how final exams are scheduled. It does not have prerequisites; the material is accessible to most first-year students and is a good course to take during one’s second semester at Brown. It satisfies an intermediate-course requirement for concentrators. The work consists of weekly problem sets and several exams. Students should expect to put in an average of 10 or so hours per week outside of class (though there is a large variance: some students report five hours per week, a few others report as high as 20). For more information, see http://cs.brown.edu/courses/cs022/.

CSCI 0510 covers the mathematical foundations of computing and centers on the following three questions: (1) what is computation? (2) what is computable? (3) what is computable given the resources we have? Its prerequisite, CSCI 0220, can be waived for students with strong backgrounds in mathematics, making it a good option for first-year students who are math-savvy. It satisfies an intermediate-course requirement for concentrators. The course has weekly problem sets and several exams; most of the learning happens through doing homeworks. Students should expect to spend an average of 5 to 10 hours per week outside of class on assignments. For more information, see http://cs.brown.edu/courses/csci0510/.