What CS Course Should I Take?

Students who intend to concentrate in CS should take one of CSCI 0150, 0170, and 0190. CSCI 0150 and 0170 are intended for those whose backgrounds range from no prior experience whatsoever to those who’ve done a fair amount of programming in high school. CSCI 190 is intended for those with significant programming experience. One cannot register for 190; instead, one registers for 170, as explained below. 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. Note that it doesn’t matter which of the three intro courses one starts with: all will prepare you for our subsequent courses. If students feel they should start with a more advanced course, they should discuss this with the department’s director of undergraduate studies (Prof. Tom Doeppner: twd@brown.edu). 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 in all disciplines who want a one-course introduction to computing might consider CSCI 0020 or CSCI 0080. The former introduces students to the use modern computing technology with an emphasis on 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.

Students in all disciplines interested in the gathering, analysis, and presentation of information might consider either CSCI 0030 (formerly 0931) or CSCI 0100.

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

Students with programming and math backgrounds who want to learn some of the math behind graphics, cryptography, computer vision, and machine learning might consider CSCI 0530.

Students with math backgrounds who feel comfortable with proofs and would like to explore the fundamental limits of what can be computed might consider CSCI 1010 (formerly CSCI 0510).

CSCI 0020, The Digital World, 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. For more information, see https://cs.brown.edu/courses/csci0020/.

CSCI 0030, Introduction to Computation for the Humanities and Social Sciences, (formerly 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. For more information, see http://cs.brown.edu/courses/csci0030/.

CSCI 0040, Introduction to Scientific Computing and Problem Solving, 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). The class has written homeworks, programming projects, and two exams. For more information see http://cs.brown.edu/courses/csci0040/.

CSCI 0080, A First Byte of Computer Science, 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. For more information, see http://cs.brown.edu/courses/cs008/.

CSCI 0100, Data Fluency for All, introduces students to some of the statistical techniques and computational tools that data scientists use to tell stories. The subject matter for such stories might range from the slave trade in the Americas to the 2016 presidential election. As an example of the former, data scientists have designed powerful visualizations demonstrating the growth and demise of the slave trade over time, highlighting the extent of the human displacement. For the latter, one could imagine mining Twitter feeds to measure the public's relative interest in various presidential candidates, thereby predicting a winner. Students will be taught to use statistical and machine learning methods to extract meaningful information from data. They will also be taught to use visualization tools that can graphically display potentially complex relationships in a comprehensible way.

This course covers elementary statistics and very elementary computer science, assuming no background whatsoever. Students who do have experience in these areas are encouraged to consider taking Data Science (CSCI 1951A) in the Computer Science department, which has much more of an emphasis on data bases; or Big Data (ECON 1660) in the Economics department, which has more of an emphasis on modeling causality. Both of these courses also involve programming, from scratch, various machine learning algorithms. In CSCI 0100, we make use of off-the-shelf machine learning algorithms that are readily available in software libraries.

This course also differs from Introduction to Computation for the Humanities and Social Sciences (CSCI 0030). The primary difference is that CSCI 0100 has a greater emphasis on statistics, while CSCI 0030 teaches more programming. In CSCI 0100 students learn R, a statistical software package, and many basic statistical concepts, such as regression. In CSCI 0030, students learn some Python and basic computer programming constructs, such as iteration. Nonetheless, there is significant overlap (for example, in visualization principles), so students are encouraged to take only one of these two offerings. Neither course has any prerequisites.

CSCI 0150, Introduction to Object-Oriented Programming and Computer Science, and CSCI 0160, Introduction to Algorithms and Data Structures, form 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 set of graphics and media packages, through the design and implementation of a sequence of moderately-sized 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, and grading is done purely on meeting the assignment specifications, without “curving” grades – most students get A’s. 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. For more information, see http://cs.brown.edu/courses/csci0160.html.

CSCI 0170/0180, CS: An Integrated Introduction, is a two-course sequence intended for those who might consider concentrating in Computer Science; it’s also taken each year by many students from other fields who do not go on in Computer Science. It introduces key ideas from Computer Science — scale, abstraction, structure, efficiency — through a mix of programming and theoretical foundations. While prior programming experience is neither required nor assumed, students who have had exposure to Java programming in high school might prefer this sequence over 0150/0160, because in this sequence they’ll encounter multiple new languages. Nevertheless, the course is geared towards beginning programmers. Students initially learn to program in Racket, a language in the LISP/Scheme family, and move on to OCaml, 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. Assignments give students a taste of material and ideas they’ll encounter in more advanced courses, from algorithms to AI to game theory to interpretation of programs. 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 concurrently. 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, Accelerated Introduction to Computer Science, is intended for those with prior experience in CS and compresses much of a year of introductory material into a single semester. Students cannot register for the course. Instead, those 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.) For more information, see http://cs.brown.edu/courses/csci0190/.

CSCI 0220, Introduction to Discrete Structures and Probability, 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. For more information, see http://cs.brown.edu/courses/cs022/.

CSCI 0530, Directions: The Matrix in Computer Science, is an introduction to linear algebra through application to computer science problems (e.g. integer factorization, secret-sharing, web search, graphical transformations, image processing, machine learning). The course is designed around a series of labs in which students carry out programming and data-analysis assignments, and homeworks in which they write short programs and also derive proofs for fundamental results in linear algebra. The course satisfies the linear algebra requirement for the Sc.B. in Computer Science and the Sc.B. in Applied Math/Computer Science. It has no formal prerequisites. However, students should have experience in programming and in writing mathematical proofs. A one-semester programming course and a course such as CSCI 0220 are generally sufficient background.

CSCI 1010, Theory of Computation, (formerly 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. For more information, see http://cs.brown.edu/courses/csci1010/.