1 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 have, 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: I’ve been admitted to 0190. How do I register? Will you give me an override code?

You don’t need to do anything for now. We’ll give you instructions in class.

Q: Can I still try to get into in this course?

If you have passed the summer placement process and been invited to take 0190, then of course, yes. Start coming to class and you’ll get further instructions. Otherwise, sorry, no. The only way to get into the course is through the placement process, which has long since completed.

You might wish to argue that your background should exempt you. Unfortunately, we have found that prior computing experience is not predictive of success in 0190, which is why we created a placement process in the first place. In fact, many students with prior experience fail the placement process itself.

Over the years we have refined the placement process and find it very useful in telling students whether or not to take 0190. Therefore, we use that process only for admission.

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, we will not hold this against you in any way. You don’t have to inform us or even justify your choice. Brown CS is virtually unique in offering three different introductory offerings leading to the concentration—to say nothing of a half-dozen other introductory courses for non-concentrators—so we are deep believers in choice, just like the rest of Brown. We respect your freedom to choose and the choices you make without judgment.

Q: How do I keep on top of things, and where can I ask questions while the assignments are in progress?

Please use the Piazza board. You should use your Brown email address to access the board.

Be sure to not post hints or solutions publicly! Be aware of the Honesty and Sharing policy before you sign up.

Q: Are there any exams in this course?

No. I don’t believe exams are a useful way of measuring learning except inasmuch as they can be proctored to detect cheating (for which we have other mechanisms). In return, they are too dependent on test-taking ability, time preferences, not being ill on a particular day, personal constraints, etc. Therefore, this course has no exams, only 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.

In case you’re wondering: yes, your identity is recorded when you submit. However, we run an anonymization script before distributing work for grading. Therefore, the graders only see an anonymous token (e.g., “103”) in place of your identity.

You may then wonder what happens when you go in for help after you get graded material back. Would that deanonymize you for the future, i.e., will that TA henceforth know who person 103 is? No, because the script randomly assigns different tokens on each use. Therefore, there’s no reason to believe person 103 from the previous assignment is the same as 103 on this one (in fact, there’s a very high likelihood it’s a different person).

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 encounter—and quite likely be forced to use—many more, other languages. Developing some linguistic flexibility is really healthy for you.

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: The early assignment schedule for 0190 seems quite hectic. Why is that?

We want you to be able to make an informed choice about courses. Therefore, we want to give you a chance to see enough difference work in 0190 before the add deadline so you can decide whether to stay or to switch to 015 or 017. For this reason we load up several assignments in rapid order at the beginning of the semester. That way, by the add deadline, you have a pretty good sense of what’s in 0190.

Note that the seemingly slower frequency of assignments later in the semester doesn’t mean the course gets a lot easier. The assignments are just more sophisticated and need more time.

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. Most of these are based at best on incomplete information—often extrapolating just from their experience, and perhaps not even accurately—and some are plain incorrect. Even when we see incorrect information we sometimes cannot contradict it in public, because of student privacy laws. 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: How bad is the workload?

According to the 2015 Critical Review, the average hours per week for the three introductory courses the previous year was:

Course

  

Average hours

  

Max hours

0150

  

9.5

  

18.4

0170

  

15.2

  

26.8

0190

  

9.2

  

16.0

For 2017, the corresponding numbers were:

Course

  

Typical hours

  

Max hours

0150

  

10.7

  

21.1

0170

  

11.8

  

22.2

0190

  

9.0

  

15.0

Q: What is the content of 0190?

In principle, 0190 is an amalgam of 0150/0160 and 0170/0180. 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 one important exception, 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 big thing that 0190 does not teach (that is required of the year-long sequences) is Java. We assume that you either have prior Java experience or, given a semester of programming, can teach it to yourself (using textbooks, on-line tutorials, etc.) over winter break. Or, of course, you can take 0180 in the spring (see below).

Q: What should I do after 0190?

After you have completed 0190, you have numerous options.

First of all, you are welcome to take any course that requires the intro “sequences” (0150-0160, 0170-0180, or 0190) as a prerequisite. This can even include upper-level (1000-level) courses. Yes, some 0190 students start taking upper-level courses in their very second semester of college!

Second, many students take 0320, but not everyone does.

Third, you can also take 0180.

In particular, if you have some Java background, or can acquire it over winter break, you are ready to move on. If you don’t have it and would rather be taught it by a course, you can take 0180, which is the usual follow-up course for 0170 students. There will be some overlap between what you do in 0190 and what you will see later in 0180, but that should just make you better at that material. Indeed, another good reason why students take 0180 is to get reinforcement of the algorithms and data structures content: seeing it again, from a different perspective, and in more depth, is often very helpful, and this material is so important that having it thoroughly under your belt is a good idea.

In general, talk to your academic advisor and to people in the department, especially if you decide to follow an unconventional path. There may be subtle dependencies between courses that you may not appreciate, and talking to people will help you avoid getting into a mess later on.

We know you probably have many more questions about this topic. Don’t worry: We will devote an entire class session of 0190 to it, and will have it just before the spring semester course sign-up period. During this session you will hear from a variety of course staff who took different paths (including all of the above).

Q: If I’ve taken 0150 or 0170 before, should I take 0190?

No. You should instead proceed to the next course in that sequence, namely 0160 or 0180. You will learn more from them.

Q: If I’ve taken 0160 or 0180 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 two introductory courses (0150 or 0170).

Q: Are there major differences this year?

There will be lots of small differences but no major ones.

As in recent years, 0190 will run the duration of the semester, instead of starting a month in.

Q: I have a question not answered above! Where do I send it?

Address it to the professor.