--- tags: CS200Prep, 2021 title: From CS111 to CS200 (Spring 2022 version) --- # From CS111 to CS200 (2022 version) **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 code for CS200 from Milda. **Logistics Summary:** If you want to take CS200 in the fall, you need to: - Complete all of the bridge assignments listed further down on this page. - Submit your work on each problem (in Gradescope) no later than **Monday, August 1 2022 (11:59pm)**. We appreciate earlier submissions (and submissions as you finish each assignment, rather than all at once). - Request an override code in CAB. We will approve your request after you've submitted and we've checked the quality of your solutions. (CS200 isn't capped, so there's no risk of your not getting in by waiting until August). :::danger Please do not email Milda about override requests; she will e-mail you when she looks through all of your bridge work. ::: 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? ***While some of the bridge assignments are released before spring break, there will be no hours or Ed monitoring during break. The following help will be available when we come back from 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 in May (date TBD). Milda will hold some office hour/Q&A sessions between reading period and the due date, and she will continue to monitor Ed. More details will come about this in late April. ## 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. Additional details are on the [CS 200 website](https://brown-csci200.github.io/website/). 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 (though in a larger classroom). ## Should I take 112 or go directly to CS200? We have had four 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 or without coming to office hours. 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? CS112 is only offered in the fall, which is good news for you -- you get to shop 112 before deciding on CS200. We encourage this, as it will help you get a feel of the classes before making your decision. You are not obligated to take CS200, even if you submit the bridge work. As always, if we approve your override request, you can shop the class and decide whether or not to take it. ### 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 0: The Waldo problem from Homework 5 If you didn't get to submit this question as part of hwk 5, you can still do so. Use the CS200-Waldo assignment on Gradescope to submit your work on that question (if you submitted this as part of hwk 5, there's no need to submit it again here). [Waldo problem](https://hackmd.io/@cs111/hw5-spring2022#Part-2B-Required-problems-for-those-interested-in-going-directly-to-200-What-comes-before-Waldo) ### 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) <!-- ### The Stacks and Queues data structures Stacks and Queues are list-shaped data structures with a restricted set of operations. - In a stack, new items are added to the front of a list, and all you can do is pull off or look at the first item (you can't extract an element from the middle). - In a queue, new items are added to the back of a list, and all you can do is pull off or look at the first item (this is like waiting in a first-come, first-served line). You'll need to understand how to implement these, and when each is a good choice for a particular problem. *The work for this is on par with a lighter homework assignment.* --> ### 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)