This document is specific to the 2020-21 academic year.
If you’ve already taken CS111, you have two options for getting to CS18 (and finishing a CS intro sequence this year): (1) take 112 in the fall, followed by 18 in spring or summer, or (2) skip 112 and take 18 directly in spring or summer.
This guide tries to help you decide what to do. It also contains the bridge problems that you would need to do to get an override code for CS18 from Kathi/Professor Fisler if you did NOT first take 112 (or the enhanced track of 111 in Fall 2020).
If you are taking CS111 in Fall 2020 and want to take CS18 in the spring, you should do the optional “advanced” exercises that will be woven through 111 specifically to prepare you for 18, not the ones on this page. The optional exercises (which will NOT count towards 111 grading) will overlap the content of the bridge work for students who have already completed 111.
CS18 has two main goals: (1) to introduce you to object-oriented programming (which structures computations a bit differently than in CS111 and CS17), and (2) to deepen your knowledge of data structures and the key algorithms that work on them. In CS18 we actually implement lists and hashmaps/dictionaries from scratch, and you’ll work a lot more with trees. You’ll build your own implementations of lists, trees, and hashmaps (assuming that a language didn’t provide them already). You’ll learn some new data structures (including graphs), and do projects such as writing the core of a search engine.
Both CS17 and CS111 use a similar style of programming (what 111 did in Pyret). CS18 assumes that style, but not a particular programming language. Everyone in CS18 starts afresh with Java.
The workload in CS18 is higher than in CS111: the homework assignments are longer (more questions) and more open-ended (in terms of what you have to figure out for yourself). The projects are similarly more challenging and open-ended. It’s not unusual for students to spend 12-15 hours a week on CS18 outside of class.
We have had two semesters of experience with students making the jump from 111 directly to 18. The transition has gone smoothly for some and less so for others (with some dropping 18 entirely). Of those who found the transition hard, some note the additional workload. Others noted difficulty figuring out how to get started on the more open-ended assignments. You should definitely have systematic ways of working on programming assignments (planning tasks, working with examples, developing programs in stages) to make the direct jump. If you need more practice with this take 112 before 18.
Put differently, the bridge work is designed to catch you up on specific topics that CS18 assumes, but isn’t designed to deepen your CS skills. In contrast, 112 is designed to give you more practice with programming, breaking down problems, and learning core concepts of CS. If you weren’t able to do CS111 assignments fairly quickly at the end, you would benefit from taking 112 before CS18. Otherwise, you could find the 18 workload a LOT more than if you had come through 112.
In 2020-21, CS112 is only offered in the fall; CS18 will be offered both spring and summer. This means you don’t get a chance to shop 18 before deciding on 112. That said, you can look at the website for CS18 from the spring and see the challenge level of the assignments and projects (setting aside that you won’t yet know Java, which we teach within 18). You can, of course, also shop 112 in the fall.
There will be two windows in which you can submit the bridge problems:
If you submit to the first window, we will be able to let you know before spring semester starts whether we advise you to take 112 first. You can submit each assignment to only one of the two windows: so if you try in the fall and aren’t successful, you’ll have to take 112 rather than try the bridge again for the spring.
Note that you do NOT need to submit the bridge work if you take 112 or do the advanced exercises as part of 111 in the fall semester.
Due to staff constraints under the 3-semester model, we decided that merging 113 into 18 was our best option for accommodating the needs of students across the class years who need to finish or take intro sequences this year. Much of the content intended for 113 is already covered in 18. That means the main difference lies in the pace and workload. Taking 112 first is going to help with both of these, as some 112 content also overlaps that of CS18.
No. The bridge option is only open to students who have passed CS111 at Brown.
As of July 25 2020, Kathi/Professor Fisler is still finalizing the last bridge problem. It will be posted before the end of July.
These assignments serve two purposes: they teach you topics that CS18 assumes, and (for the later problems) help you self-assess whether you are ready for the conceptual complexity of the work in CS18. Your work on all of these assignments should follow the styleof programming we did in Pyret, in which we used a lot of recursion and did not update the values of variables. Each assignment will indicate whether you are required to work in a specific programming language.
See the Logistics section at the bottom of the page for details on how you get admitted to 18 based on these assignments.
Three algorithms: insertion sort, merge sort, and quicksort. You’ll need to be able to implement these three algorithms recursively, and be able to explain how efficiently each yields a sorted list.
Binary search trees are a particular usage of tree to capture sets (collections) of data. You’ll need to understand how the core algorithms work to add, remove, and find items in such a tree, and how their efficiency compares to doing related operations on lists.
Different approaches to solving the same problem can have different characteristics in terms of how fast they execute or how much space they consume. In CS111, we will be discussing this concept intuitively, but we will not show you how to develop actual proofs that the time or space needed for an algorithm is limited to a certain bound. CS17 begins to teach students how to write proofs about efficiency, and we build on that skill in CS18.
Part of what one learns in CS17 is just how to tackle problems that are more complex than those we have done in CS111. In this assignment, you’ll represent a collection of files and folders in datatypes and write programs to process a collection of nested folders and files.
What does a data structure look like for representing a text document with features such as paragraphs, headers, and boldface? This assignment (under development) acts as a small project that practices many of the skills you’ll need to handle assignments and projects in CS18.
You will submit solutions to these problems on gradescope (we will provide a link to the gradescope course/area here by the end of July). In reviewing your work, we will look at whether it solves the problem, is well structured (in style, use of helper functions), and has been appropriately tested: the same criteria that we applied to your work in 111.
Remember, you aren’t doing this work for a numeric grade: instead, you need to convince both yourself and us that you are ready to take on the work of CS18 without first going through CS112. Due to course schedules this academic year, if you wait for CS18 and it doesn’t work out, you won’t have a fallback option until next academic year.