Which Introductory Course Should I Take?

[Updated 8/28/24]

Brown CS offers many introductory courses in computer science. Here's a quick guide on how to choose between them. You can also watch this video from 2021 that gives an overview by the faculty of 0111, 0150, 0170, 0190, 0200, and the Director of Undergraduate Studies. (The 111 and 170 instructors have changed, but the courses have not.) A couple of courses have provided links below to sample lectures to help you decide.

Note that the placement process for 0190, our accelerated course typically taken by students with prior programming experience, occurs between late June and early August. If you are considering 0190, see the instructions for how to get started (follow the "next offering" link at the very top of the page); the details for each year are available starting June 1st. No exceptions are made once the placement period has finished in early August.

Special instructions for Fall 2024

Note that for Fall 2024, all of the intro CS courses are operating under course caps (a situation we have never had in the past). That means the ability to shop and select your class whenever you wish will be limited, depending on how many people are interested in CS courses. We recommend that you use the info on this page to make your best initial guess and claim a seat in it. You can still attend the first lectures and decide which class you want, then try to get a seat in a different class as everyone sorts out what they want. A lot of add/drop activity happens during orientation registration and the first couple of days of classes, so don't get discouraged. If you know you want to get into a particular course that has filled up, request an override, but still keep an eye out for seats that open up. The instructors for all of the intro courses have a shared view of where the override requests are.

Whatever you do, please do NOT hold seats in multiple intro courses (we will be keeping an eye out for this). As soon as you know you are not taking a class, please drop it so that we can accommodate other students. We do not have the ability to process "swaps" (you and a friend want to trade courses).

FYI, CS111 is also offered in the spring, in case that works better with your plans (150, 170, and 190 are only in the fall).

For Potential Concentrators

Those planning to concentrate (major) in computer science should take one of 0150/0200, 0170/0200, 0190, or a sequence starting with 0111, as explained below. None of 0150, 0170, or 0111 assume prior programming background; the 0190 placement process is open to anyone, regardless of prior programming experience. All of these options 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 multiple courses (except for 0190, which students must place into over the summer).

0111 provides the most leisurely paced introduction to programming and is ideal for students who are taking other time-consuming courses at the same time. Students in 0111 may decide to do additional work that, while increasing the load of the back half of the course (or extending into break), prepares them for 0200, which they may then take in a subsequent semester. Alternatively, students who have completed 0111 may continue on with 0112, which maintains the pace of 0111. Students completing 0112 may continue with 0200, and then go on to take other courses in the CS concentration. 

Currently, 0111 is offered both fall and spring. 0150, 0170, and 0190 are offered only in the fall. 0112 is offered only in the fall. 0200 is offered both fall and spring.

For Non-Concentrators

Of these two, only CSCI0111 can continue into the CS concentration. If you start in CSCI0020, you'll have to take one of 0111, 0150, 0170, or 0190 to continue with the concentration. CS100 is not being offered in 2024.

Placement Based On Prior Background

Brown CS does not offer credit or placement for AP or IB courses. 0190 is designed for students with prior experience on par with the AP-CS A exam. To take 0190, students must pass a placement process that runs in the summer (see the 0190 link for details). Many students with prior experience still take 0150 or 0170 (both cover new content; the latter uses a style of programming that is new to most students with prior experience).

If you have transferred into Brown from another university, contact CS Director of Undergraduate Studies Kathi Fisler for help figuring out where to start in the Brown concentration.

Summary of the Courses

0020

0020, 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.

0111/0112

0111/0112 is a two-course introductory sequence designed to provide students with more flexibility in exploring CS within their overall academic program. 0111 focuses on data: how we program with it, error-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 some assignments; collaborative discussion of concepts is always welcome.

0112 focuses on strengthening students’ skills in programming and program design, including introduction to additional data structures. Students work in Python.

Students who have done well in 0111 and wish to accelerate their pace into CS can do an additional 4-5 medium-size assignments to go directly into 0200 for their second semester. The assignments are handed out as soon as 0111 covers the corresponding material, but they are not due until sometime during the following break (winter or summer). This allows students to complete 0111 before deciding whether to bridge to 200, while also providing the opportunity to complete the assignments during the regular semester.

Here is a sample lecture from CS0111.

Direct questions to the professors: Milda Zizyte (0111, milda@brown.edu). or Tim Nelson (0112, tn@cs.brown.edu).

0150

0150 emphasizes programming practice. 0150 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. Even if you have programmed in Java before, you might find this a challenging course.

Here is a sample lecture from CS0150. (as of 2pm on 8/28/24, we were trying to fix an access permission issue on this video)

Direct questions to the professor: Andy van Dam, avd@cs.brown.edu.

0170

0170 integrates learning programming with learning the theoretical foundations of computer science. 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.

Direct questions to the professor: Philip Klein, klein@brown.edu (John Hughes, the usual instructor, is on sabbatical in 2024)

0190

0190 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 0190; 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 0190 home page.

Taking 0190 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 0200 after 0190, especially if they did not have a strong grounding in object-oriented programming prior to starting at Brown.

Consult the FAQ on the 0190 website for answers to most questions (and directions for contacting the professor, Shriram Krishnamurthi).

0200

0200 is the second-semester intro course that follows 0150, 1070, 0112, 0111 (with additional work), and 0190 (if desired). (It merges the former 0160 and 0180 courses). The course emphasizes choosing and implementing data structures, essential graph algorithms, performance and social-impact analysis of algorithms, and strong programming practices. Students work in a combination of object-oriented and functional programming, using each of Java and Python. 

The first two weeks of 0200 run as two different tracks: one to help students from 0150 learn functional programming, recursion, and run-time analysis and another to help students from 0111/0112/0170/0190 learn object-oriented programming in Java. After the first two weeks, the two tracks merge into one course for the rest of the semester.

Direct questions to the professors: Nick DeMarinis (Fall, ndemarinis@brown.edu) or Kathi Fisler (Spring, kfisler@cs.brown.edu

Frequently-Asked Questions