Anticipated Frequent Questions
This AFQ (Anticipated Frequent Questions) should cover most of your questions. Because I have tried to cover most questions I have gotten and am likely to get, I would appreciate it if you would read this in its entirety first.
Note: All course numbers below refer to computer science (CSCI) courses: e.g., 0190 means CSCI 0190.
Q: How do I enroll in this course?
There is only one way to get into 0190: to follow the placement process. This takes place over the summer, and is now closed. If you placed into the class you were sent an invitation by email with further instructions.
Q: Is there any other way of getting into 0190?
No, sorry. We have tried different options in the past, and evolved this entrance structure based on our findings.
Q: I heard 0190 is limited in size. Is that true?
No! There is no size limit on 0190: anyone who does well will get in. Therefore, you are not competing with your classmates.
Q: Can I still try to get into in this course?
Sorry, no. The only way to get into the course is through the placement process, which has long since completed.
Q: If I pass the placement process, do I have to take 0190?
No! You will have “shopping period” to finalize which course you want to take. You can’t use this period to get into 0190, but you can choose to take a different course instead.
If you choose to take a different course, go ahead! You don’t have to inform us or even justify
your choice. Brown CS is virtually unique in offering four
different introductory offerings leading to the concentration—
Q: How do I keep on top of things, and where can I ask questions while the assignments are in progress?
We will continue to use the EdStem board that we used in the summer.
Be sure to not post hints or solutions publicly! Be aware of the Academic Integrity policy.
Q: How “introductory” is the course?
This is a complicated question.
On the one hand, this course is open to everyone, and I welcome everyone who has placed into it to stay and finish. Every year, over 10% of students who successfully finish the class had no prior computing background, and about a third had only a little. Combined, that’s nearly half the class!
On the other hand, the course was originally created to cater to students who have prior computing experience and want to go faster and farther. The course does have numerous students who fit this profile. It isn’t fair to them to retard their development.
To accommodate this wide spectrum of students, everyone has to respect the
right of other students to be in the class and get the most from it. The course
will sometimes digress into more advanced computer science topics. These will
be explicitly signposted. Students with no prior background need to make peace
with this (someday you will know everything that was said, and much more—
To create this classroom environment while still giving ample room for students to grow, I have a simple policy: If you have questions outside the scope of what we’re covering in class, please ask them on EdStem, not in class. I may not be able to answer all of them: that depends on whether they are worded clearly enough for me to understand, whether I think they’re reasonable, and also whether I have time. But you are always free to ask.
Given that this outlet exists, in response to a question that I feel steps outside these bounds, I may say something like, “I have never heard of that”. There’s an extremely good chance that I have heard of it, and may even know a good deal about it. That’s my hint that you’re violating the policy, and I’m hoping to diffuse the situation without calling you out explicitly.
Q: Why does the early part of the semester look so hectic?
This is on purpose. We want you to experience as many assignments as possible before the free add deadline so you can make an informed decision about 0190 without incurring a financial penalty. (The lecture schedule is also designed to give you a taste of several components.) The rapid-fire deadline pressure eases up after that initial period, though the difficulty of the assignments also increases, commensurate with the duration.
Q: Wouldn’t it be better to have breaks between assignments?
It would: taking breaks is healthy. In fact, there are already breaks built in implicitly. In general, you can assume that about 20% of an assignment’s time is slack baked into the schedule. (That is, were we scheduling breaks, we would take about 20% of the time out of each assignment to create breaks.)
If this course were the only thing you were doing, we would build in (more) explicit breaks. The reason we don’t is to avoid over-constraining you. You have many other things going on: other courses, extra-curriculars, friends, family, life. They each have their own demands and deadlines. To avoid adding even more constraints, we let you decide how best to schedule your work. Nevertheless, we do encourage you to take breaks and believe the schedule has time for it.
Q: Are there any exams in this course?
There are no scheduled exams. However, there may be some in-class or other “spot” quizzes. You are required to complete these, in addition to all the assignments.
Q: Why do you want anonymous submissions?
To the extent possible, we want to eliminate biases when grading. These may include biases both in favor or against people based on attributes such as race, gender, or even how they present themselves in person. To make clear we are serious, we will impose a small penalty if you do include personal identifying information (unless asked to).
I know this runs counter to what you have probably been told by countless prior instructors, and maybe even those in your other classes. If you’re turning in pieces of paper, it is important to label them clearly. Since your submissions here are electronic, that’s not a problem.
Q: Do we change languages once the semester begins? Why?
Yes we do: we’ll be switching to Pyret.
We use Racket for the placement because we want you to learn the content in How to Design Programs. Since that book is written using Racket, it would be really confusing if we made you read code in one language and write code in another.
We switch languages because there are things about Pyret we prefer for teaching 0190, which will become clear as we work through the semester. Indeed, even though it’s used in many other contexts now, Pyret is designed primarily for 0190.
We also think it’s really healthy for you to confront more than one
language. If you go on to do any more computing at all, you’re sure to
Finally, Racket and Pyret are, while syntactically extremely different, semantically actually quite similar. So you can learn how your ideas transfer between languages and see that significant differences in syntax do not always imply major differences in behavior.
Q: I’ve also heard that …
The only definitive source of information about 0190 is this site.
A few students do make various sweeping claims about aspects of 0190. Many of the things we read are slightly or even completely wrong. Sometimes students make strong statements based on their personal experience, but not only is this limited to a very small sample, even then it’s sometimes incorrect! However, we can’t publicly contradict many of these statements because to do so would be to reveal private student information.
Therefore, don’t assume that our silence means we’ve seen and agreed with what is stated. We suggest you ignore these rumors, but if you do trust them you do so at your peril.
Q: What is the content of 0190?
In principle, 0190 is an amalgam of the other introductory sequences. It was supposed to cover the entire first year curriculum.
In practice, however, this is not possible with the available time. Nevertheless, 0190 does cover all the basic expectations of the first year (with two important exceptions, below), namely: teaching you a rigorous, structured program design methodology; giving you several useful programming skills; teaching you about algorithm and data structure design; teaching you about algorithm analysis; explaining trade-offs inspired by these analyses; and teaching you several basic algorithms and data structures covering linear data, tree-shaped data, and graph-shaped data.
What 0190 does not cover is: these topics in as much depth as those other courses can; all the algorithms and data structures within the above list of topics that they do; some of the more sophisticated or nuanced analyses; and some topics that are usually taught but that we’ve decided are not required of the first year sequences.
The two big topics that 0190 does not teach (that is required of the year-long sequences) are Java and object-oriented programming. (Those are not at all the same. Want a quick, one-minute self-test? Explain why loops are not object-oriented.) If you have these topics from prior education, you may be fine. You may also be able to teach it to yourself. Of course, you can also take 0200 after 0190.
Q: What should I do after 0190?
After you have completed 0190, you have numerous options.
We will devote an entire class session to talking about this, before you need to sign up for courses in the spring. This conversation will be much easier to have once you’ve seen much of the course’s content. Therefore, we suggest waiting until then.
Q: If I’ve taken 0111, 0150, or 0170 before, should I take 0190?
No. You should instead proceed to the next course in that sequence. You will learn more from them.
Q: If I’ve taken 0160, 0180, or 0200 before, should I take 0190?
No. You should instead proceed with the rest of the curriculum.
Q: If I’ve already taken 0020, 0030, 0040, or 0931, should I take 0190?
0190 may indeed make a lot of sense. You will still need to take the placement process. If you don’t place in, please take one of the other three introductory courses (0111, 0150, or 0170).
Q: Why are some assignments released a while after the corresponding material is covered in class?
There are two reasons.
First, assignments take time! If we released them as soon as we covered a topic in class, we’d have to greatly reduce the time for the previous assignment, which will affect its preceding assignment, and so on.
Second, and more importantly, you learn better by revisiting material. If every assignment immediately followed its class coverage, you would not be forced to recall it. Spacing it out forces you to revisit it. Indeed, some topics you may see three times: in class, in lab, and in an assignment, all spaced out.
Q: Will every topic covered in class end up in a homework?
No. The course does not exist solely to “teach to the test” (or, in this case, the homeworks). By design, We will discuss topics in class that are not covered in homeworks. These topics are included to broaden your sense of what computer science covers (and, course evaluations suggest, succeed in doing so). We hope seeing this broader landscape will help you better appreciate what computer science can be, and perhaps even entice you into pursuing one of those branches.
Q: What is the purpose of labs?
Labs serve two different purposes.
Some labs are reinforcement of material that you see in lecture and will need for assignments. There is usually not much ambiguity about these.
Other labs, however, are designed to teach you skills that help you become more effective at computing. Being successful in computing requires not only theoretical foundations but also practical skills that let you get things done quickly and efficiently. Some of you may have a few of these skills already, but many students don’t. Some are probably not even aware of the existence of the tools you wil learn. Therefore, these labs are intentionally disconnected from lecture content: this is not by mistake or accident but by design.
Q: I have a question not answered above! Where do I send it?
Address it to me.