skip navigation

This page looks better in modern browsers. Please upgrade.

Brown Home Brown Home Brown Home Brown CS

What CS Course Should I Take?

The CS Department offers five introductory courses in Computer Science. Here's a quick guide on how to choose which one to take. Note that those planning to concentrate in Computer Science should take either CSCI0150/0160 or CSCI0170/0180. To help you decide which course sequence to take, you might attend the first lectures of both CSCI0150 and CSCI0170.

csci0020 (formerly CS002)

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.

csci0040 (formerly CS004)

CSCI0040, offered in the spring, is intended for students in engineering and the sciences who want to learn how to program (primarily in MatLab, but with a little C as well), but who do not necessarily want to be CS concentrators. Students will write a number of programs and complete several larger projects. The course introduces problem solving techniques that guide the thinking necessary to construct a program as part of the solution. It may not be used as part of a CS concentration.

csci0150 & csci0160 (formerly CS015 & CS016)

CSCI0150/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 (CSCI0150) and its theoretical foundations (CSCI0160). No prior background in programming is assumed or required. CSCI0150 is a challenging object-oriented programming course (using Java) in which students gain experience with object-oriented design techniques and the use of Swing, Java's 2D graphics library, through the design and implementation of a sequence of moderate to fairly lengthy interactive programs, including Tetris, a fascinating computer game. All programs use graphical user interfaces. 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 object-oriented implementation in Java. Students with questions about CS015 and CS016 are invited to email the professors teaching these courses in 2008-2009 (Andy van Dam, avd@cs.brown.edu (CSCI0150) and John Hughes, jfh@cs.brown.edu (CSCI0160)).

csci0170 & csci0180 (formerly CS017 & CS018)

The goal of CSCI0170 is to put you on the path to mastery of computer science. Computer science is a rich, diverse field, full of intellectual delights and challenges. One common thread is problem-solving; if you enjoy puzzles that require ingenuity and have elegant solutions, you will find this course deeply satisfying.

Programming is only a small part of computer science, but it is an essential one. Mastery requires that one fully understand one's tools. This course begins by teaching a lovely programming language called Scheme, which is a dialect of LISP. The syntax and semantics of Scheme can be learned in just a few days, making it an ideal first programming language.

CSCI0170 continues with a language in the ML family that exposes students to types and type-inference, pattern-matching, and modules. Both Scheme and ML exemplify the functional programming paradigm, which permits extremely concise and elegant solutions to many problems, although it lies out of the mainstream (e.g., it is rarely taught in high schools).

The follow-up course, CSCI0180, uses Java as a vehicle for teaching the object-oriented programming paradigm, which emphasizes modularity, flexibility, and extensibility. The fact that CSCI0170/0180 is multilingual and multiparadigmatic helps students develop an understanding of programming that transcends the syntax and idiosyncrasies of any one language.

How does one choose among the many possible methods for solving a computational problem? It is impractical to program all approaches and test them against each other. Analysis of algorithms uses mathematics to predict the computational performance of a method. In CSCI0170/0180, the study of analysis is interwoven with the study of programming.

Drawing on analysis, computer scientists have discovered lovely and often surprising solutions---in the form of "algorithms" and "data structures"---to many fundamental computational problems. CSCI0170/0180 introduces some representative examples, from the familiar algorithm for long multiplication, through organizing data for quick retrieval, to finding shortest paths in networks (used, e.g., in map navigation) and finding the longest common subsequence (a problem arising in computational biology).

CSCI0170 is not a large class (roughly 60 students), and lectures are highly interactive. No prior programming experience is necessary. Beginners are just as likely to succeed as seasoned programmers. In a typical year, at least one of the very top-performing students has no prior programming experience.

Our goal is to help you learn introductory material in computer science. Studies show that students perform better in the long-run when their introductory CS experience is collaborative. Hence, collaboration on all assignments except exams---in particular, "pair programming"---is strongly encouraged in CSCI0170.

csci0190 (formerly CS019)

CSCI0190 offered in the fall is for students who have a prior programming background, who would otherwise take CSCI0150 and CSCI0160, and who want an accelerated introduction. It provides the equivalent of CSCI0160 in terms of understanding algorithms and data structures and their theoretical underpinnings while providing the advanced Java programming skills that are normally taught in CSCI0150 including object-oriented design, basic software engineering, and user interface construction. Assignments will include a variety of interactive applications of increasing skill level, typically game or puzzle-based. The course is open to students who receive a 4 or 5 on the CS AP test or who have taken CSCI0040 and want to continue in computer science. Others with some programming background may be admitted with the approval of the instructor. Prospective students are encourage to contact the CS professor Steven Reiss, spr@cs.brown.edu, who can provide additional information.


Page Owner: Webmaster Last Modified: Tue Apr 15 14:08:59 2008