--- tags: Documents-F23 title: From CS111 to CS200 (Fall 2023 version) --- # From CS111 to CS200 (Spring 2024) **Note: This page is about taking CSCI 200 without CSCI 112. It does not apply to taking DATA 200.** You can take DATA 200 directly after CSCI 111, without doing extra work. This guide tries to help you decide whether going directly to CSCI 200 is right for you. It also contains the bridge problems that you will need to do to get an override approval for CS 200 from Prof. Nick (or whichever professor is teaching it in the semester that you want to take it). **Logistics Summary:** If you want to take CS200 in the spring, you need to: - Join the `111 -> 200` Gradescope using the code linked in Ed *(Email Milda to get the code if you were enrolled in 111 in a previous semester)* - Complete all of the bridge assignments listed further down on this page. - Submit your work on each problem by August 2, 2024. We appreciate earlier submissions (and submissions as you finish each assignment, rather than all at once) - **After we check off your work**, request an override in CAB. We will not approve any overrides until after you've submitted everything and we've had a chance to review it. (**Updated Apr 2024**) Even though the department is using a new [enrollment model](https://cs.brown.edu/courses/enrolling/), the enrollment capacities for CS200 are made with the understanding that CS111 students will enroll in August after completing the bridgework, so there is no registration disadvantage for waiting until August. :::danger Please do not email Milda/Nick/Kathi about override requests; Milda will e-mail you after she looks through all of your bridge work with next steps in August. ::: In assessing your work, we will look at whether it solves the problem, is well structured (in style, use of helper functions, etc), and has been appropriately tested: the same criteria that we applied to your work in 111. There's no numeric grade cutoff. Rather, you need to convince both yourself and us that you are ready to take on the work of CS200 without first going through CS112. #### Can we use office hours? What about during break? As we approach the end of the semester, the office hours schedule will have indicators for hours in which the TAs are comfortable handling CS200 questions (not all of the TAs went beyond CS111). TA hours will end after the mini-project comes in at the start of reading period. Milda will monitor Ed sporadically over break. You will also have access to Milda's recorded office hours videos. ## What is CS200 / What Does it Cover? CS200 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 CS200 we actually implement lists and hashmaps/dictionaries (which we'll cover in late April) from scratch, and you'll work a lot more with trees. You'll build your own implementations of lists, trees, and hashmaps. 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 called functional programming (what 111 did in Pyret). CS200 assumes that you've seen that style of programming and builds on the computer science concepts you've already seen, but is designed to gear you up with working with a new style of programming and a new language (Java). ## How does CS200 compare in style to 111? The workload in CS200 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 CS200 outside of class. The lecture style will be similar to what you've experienced in 111. ## Should I take 112 or go directly to CS200? We have had seven semesters of experience with students making the jump from 111 directly to CS18 (and now 200). The transition went smoothly for some and less so for others (with some dropping 18/200 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 feel you need more practice with this, take CS112 before CS200. Note that this does **NOT** mean that you have to be able to finish all of the 111 assignments quickly. The key is whether you are able to make solid progress on your own before needing help. If you mostly get the problems but need a bit of help on the finer points, CS200 should still be feasible for you. Similarly, you might not be able to finish all of the bridge assignments on your own, but you should be able to make good progress before seeking help. The bridge work is applying skills we've developed in 111 at a deeper level. In contrast, 112 is designed to give you more practice with programming, breaking down problems, and learning core concepts of CS. ### When must we decide which course to take? Only during shopping period when the courses are being offered. CS112 is only offered in the fall, while 200 is offered every semester. You are not obligated to take CS200, even if you submit the bridge work. And you can defer and take CS200 anytime in the future if we approve your bridge work this semester. ### I haven't taken 111 -- can I still use the bridge to start in CS200? No. The bridge option is only open to students who have passed CS111 at Brown. ## Bridge Topics and Assignments These assignments serve two purposes: they teach you topics that CS200 assumes, and (for the later problems) help you self-assess whether you are ready for the conceptual complexity of the work in CS200. Your work on all of these assignments should follow the style of programming we did in Pyret, in which we used a lot of recursion (and did not update the values of variables -- a topic coming in Python). ### Assignment 1: Sorting Lists 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. [Assignment Handout](https://hackmd.io/@cs111/bridge-sorting21) ### Assignment 2: Binary Search Trees 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. [Assignment Handout](https://hackmd.io/@cs111/bsts) ### Assignment 3: Modeling and Processing Hierarchical Data 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. [Assignment Handout](https://hackmd.io/@cs111/filesdirs) ### Assignment 4: Processing Documents and Representing Expressions What does a data structure look like for representing a text document with features such as paragraphs, headers, and boldface? How does a programming language compute a mathematical expressions? This assignment acts as a small project that practices many of the skills you'll need to handle assignments and projects in CS200. [Assignment Handout](https://hackmd.io/4Fg6Z-kcSYuWBtPd2a8Kpw) ### Assignment 5: Proofs of Algorithm Efficiency in the Worst Case 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 CS200. [Assignment Handout](https://hackmd.io/sbP23pIIQGCHufop-mpnpA?view)