CSCI 0112 builds on the data-focused programming introduced in CSCI 0111. Students will learn how to structure their programs so that subproblems can be solved in isolation. We will discuss several algorithms–abstract descriptions of computations–and students will get practice implementing working programs from these abstract descriptions. We will continue our study of data organization, covering several new ways of storing and accessing information. We will also continue to discuss program efficiency; students will learn how to reason about the performance of their programs. Finally, like CSCI 0111, CSCI 0112 will foreground the ethical considerations programmers must think about when developing software.

High-level information

Time and location

MWF 1:00-1:50, in Salomon Center 202

Instructor

Tim Nelson (tim_nelson@brown.edu)

Teaching Assistants

HTA: Amanda Hernandez Sandate, Mithi Jethwa

UTA: Edward Wibowo, Sarah Comlan, Zuhair Khouri

STA: Christian Armstrong, Jo Gasior-Kavishe

Course website

https://cs0112.github.io

Prerequisites

CSCI 0112 assumes students have taken CSCI 0111.

Much of the content in this document is adapted with permission from materials developed by Kathi Fisler and Doug Woos.

Learning objectives

After completing this course, students will be able to:

  • Develop medium-sized programs with multiple interacting components;
  • Understand high-level descriptions of algorithms well enough to produce working implementations;
  • Reason about the social implications of new software and algorithms;
  • Connect concrete problems and subproblems to abstract programming concepts; and
  • Work with others to develop, test, and analyze programs and program components.

Continuing in computer science

After CSCI 0112, students can take CSCI 0200 in the spring to complete the introductory CS sequence.

Course culture

Students taking CSCI 0112 come from a wide range of backgrounds. We hope to foster an inclusive and safe learning environment based on curiosity rather than competition. All members of the course community – students, TAs, and the instructors – are expected to treat each other with courtesy and respect. Some of the responsibility for that lies with the staff, but a lot of it, ultimately, rests with you, the students.

Be aware of your actions

Sometimes, the little things add up to creating an unwelcoming culture to some students. For example, you and a friend may think you are sharing a private joke about other races, genders, cultures, etc, but if you do this in a public space and a classmate overhears it, it can have adverse effects. There is a fair bit of research on something called “stereotype threat”, in which simply reminding someone that they belong to a particular culture or identity (on whatever dimension) can interfere with their class performance.

Stereotype threat works both ways: you can assume that a student will struggle based on who they appear to be, or you can assume that a student is doing great based on who they appear to be. Both are potentially harmful.

Bear in mind that diversity has many facets, some of which are not visible. Your classmates may have medical conditions (physical or mental), personal situations (financial, family, etc), or interests that aren’t common to most students in the course. Another aspect of professionalism is avoiding comments that (likely unintentionally) put down colleagues for situations they cannot control. Bragging in open space that an assignment is easy or “crazy”, for example, can send subtle cues that discourage classmates who are dealing with issues that you can’t see. Please take care, so we can create a class in which all students feel supported and respected.

Be an adult

Beyond the slips that many of us make unintentionally are a host of explicit behaviors that the course staff, department, and university (and beyond) do not tolerate. These are generally classified under the term harrassment, with sexual-based harrassment a specific form that is governed by federal laws known as Title IX.

Brown’s Title IX Web site provides many resources for understanding the terms, procedures, and policies around harrassment. Make sure you are aware enough of these issues to avoid crossing a line in your interactions with other students (for example, repeatedly asking another student out on a date after they have said no can cross this line).

Your reaction to this topic might be to laugh it off, or to make (or think) snide remarks about “political correctness” or jokes about consent or other things. You might think people just need to grow a thicker skin or learn to take a joke. This isn’t your decision to make. Research shows the consequences (emotional as well as physical) on people who experience harrassment. When your behavior forces another student to focus on something other than their education, you have crossed a line. You have no right to take someone else’s education away from them.

In light of recent reports about such issues on campus, Brown is taking additional steps to reduce this form of harm. Therefore, if we cannot appeal to your decency and collegiality, let us at least appeal to your self-interest. Do not mess around on this matter. It will not go well for you.

Issues with Course Staff

Professionalism and respect for diversity are not just matters between students; they also apply to how the course staff treat the students. The staff of this course will treat you in a way that respects our differences. However, despite our best efforts, we might slip up, hopefully inadvertently. If you are concerned about classroom environment issues created by the staff or overall class dynamic, please feel free to talk to us about it. The instructor and the HTAs in particular welcome any comments or concerns regarding conduct of the course and the staff.

Sometimes, you may not be comfortable bringing this up directly to us. If so, you are welcome to talk to Laura Dobler (the CS dept diversity coordinator) or to the Department Chair, Ugur Cetintemel. You may also reach out to the general email in the Title IX office.

As a department, we will take all complaints about unprofessional or discriminatory behavior seriously.

Logistics

The classroom

Our time in the classroom will be a mix of traditional lecture and discussion-based activities. Please come to class ready to engage with the material and ask questions about things you don’t understand. The pre-class drills (discussed below) should help you with this!

CS112 will support both synchronous and asynchronous participation. Lectures include hands-on exercises. Students attending lectures synchronously will work on these exercises in small groups, simulating working with nearby students in a classroom. In synchronous labs, students will work on practice problems with classmates and a TA in the room (or online if they are participating in lab remotely). Synchronous groupings will settle into having the same people, to foster community among students. Students attending asynchronously will have lecture capture and staff help to form alternative study groups. All students will have access to faculty and TAs through an online discussion board, as well as one-on-one appointment-based slots.

Time expectations

In addition to 3 hours a week in lecture and 1 hour a week in lab, students will be expected to spend 6-8 hours a week outside of class on homework, projects, lab, and drills, plus an average of 2 hours per week toward the end preparing for the final project.

Required materials

There is no textbook for the course; all readings will be provided digitally.

You do not need a computer to complete the assignments, as you will have access to several computer labs in the CIT. If you are completing the course remotely and do not have access to a computer, please reach out to the Professor to let us know and we will work with you to find a solution.

Assignments, exams, and grading

All assignments will be posted and handed in online. Approximate grading weights for each type of assignment are listed below.

All homeworks and projects will be due on Tuesdays at 9pm Eastern Time, and you will never have a homework assignment due at the same time as a project (although homework due dates may overlap with project design checks). There will generally be either a homework assignment or a project due every week. Drills will be due at 12pm on Mondays and Fridays (so if you’re a late sleeper, please plan on doing them the day before!).

Drills and lecture activities (15%)

Drills are short online quizzes that will be due shortly before class every Monday and Friday. These should take around 30 minutes to complete, and are designed to help us–and you!–understand which subjects you’ve internalized and which subjects we might need to spend more time on.

Approximately once a week, there will be an extended lecture activity with an associated hand-in, to be completed with the study groups discussed above. Students attending lecture synchronously should complete these activities in lecture. Asynchronous study groups should meet virtually to complete these activities. We understand that students will sometimes have to miss lecture or be unable to meet with their group, so it’s fine if students occasionally need to complete and hand in these activities individually; most of them, however, should be done in groups, and students may not get credit for repeated individual handins. If you’re having trouble meeting with your study group, please reach out to us!

Drills and lecture activities will be graded for completion only as long as you appear to be taking them seriously, and full credit will be given if you complete 80% of them.

Labs (10%)

You will have a one-hour lab session every week. Labs are hands-on programming projects where you’ll practice writing code and integrating concepts learned in class in order to solve new problems. In addition, there will be a STA discussion at the beginning of each lab session. You’ll write programs in small groups guided by our course TAs. Labs are graded based on attendance, and you can miss two labs during the semester without penalty. Students who have confirmed conflicts for all available lab sections can make arrangements to complete labs independently and discuss them with the TAs in office hours.

Homework assignments (25%)

Homeworks, due approximately once per week, are designed to help you understand the course material and put it into practice. They will consist of short programming assignments, which you will work on individually. Programming assignments will be graded for correctness as well as code style and test quality.

Projects (30%) (10% each for three projects)

There will be three larger programming-focused projects, which are designed to help you apply your programming knowledge to interesting problems and to learn how to work with a team. For each project, you will work in groups of 2-3 to design and implement a solution to a data-focused problem. Before starting to implement your solution, you will have a “design check” with a TA in order to make sure you’ve thought through the problem and come up with a reasonable design. For each project you’ll hand in the code you wrote as well as a writeup describing your design and reflecting on the project. The course projects are independent of each other, and project groups can (but are not required to) be different for each one. You will have two weeks to complete each project: one week for the design and another week for the implementation.

Final project (20%)

Your last project for the course will be an independent project, done in groups of 1-3 students. With the help of the course staff, your group will design a project that demonstrates your understanding of the material you learned during the semester. You will then implement the project and present your results, answering questions about the design decisions you made and about how your code solves your chosen problem. This final project will serve as the course’s final examination; there will not be a written final.

Late assignments

Each student will have six “late days” that can be used throughout the semester on homeworks and projects. Each late day allows the student to hand in a homework one day late. No more than three can be used on an individual assignment. Late projects count against each partner’s late days. Late days cannot be used on project design checks; missing a design check will result in a 30% penalty on that project’s grade.

If your assignment is handed in late, you (or your project partner) are out of late days, and you have not been granted an extension (see below), your assignment will not be graded.

Extensions

Please contact the instructors directly regarding extensions. Requests for routine issues such as work in other courses or interviews should normally come out of your allotment of 5 late days. Extensions for more substantial illnesses and personal issues will be granted on a case-by-case basis. If you think you need an extension on an assignment, please reach out to us as early as possible.

Blocklists

To avoid conflicts of interest in grading, TAs may not grade students with whom they have current or past close personal or professional relationships. Either students or TAs may declare grading conflicts. If there are a particular TAs who you feel should not be grading your work, please contact the HTAs or Tim so we can configure grading assignments accordingly.

We use anonymous grading for as many assignments as possible (roughly, everything except the course projects). For assignments graded anonymously, blocklists apply–TAs will not know whose work they are grading.

Regrade requests

You are encouraged to look over your assignments after they have been graded. If you find a possible error or believe that you lost too many points, please submit a regrade request through the course hand-in software. You should initiate such inquiries within one week of receiving your grade. The grading will be freshest in your TA’s mind during this time, and this prevents a backlog of requests from arising towards the end of the semester.

One-time Lab Switches

If you discover that you cannot make your lab section during a particular week, you can email the TAs (both your original lab TA and the lab TA for the session you’re switching into) to temporarily switch into another lab section. You should send this email at least 24 hours in advance of your scheduled lab. That way, the TAs will have sufficient time to read your email, help you find an open slot in another lab, and confirm the change. If you email the TAs with less notice, say only 2 hours in advance of your scheduled lab, and no TA is able to help you before your usual lab time, you are expected to go to your assigned lab.

Accomodations

If you feel you have physical, psychological, or learning disabilities that could affect your performance in the course, we urge you to contact SAS (formerly SEAS). We will do whatever we can to support accommodations recommended by SAS.

Religious Observance

If you require accommodation for religious observance, please contact Tim at least a week before the deadline in question to make arrangements.

Personal Emergency

In the event of a medical or family emergency, contact Tim to work out accommodations. Documentation (like a letter from health services or a Dean) is preferred in these situations, but when in doubt: ask. In a crisis situation, don’t wait on documentation: talk to me (Tim) right away. We’ll figure out a plan together.

I also want to add that mental health is health, and not all disabilities are visible. If you’re struggling with a mental health or other “invisible” challenge, you can be confident that I will take your situation seriously and work to accomodate it just as I would a visible illness.

I understand if you may not be used to asking for accomodations, or know exactly what types of acommodations you may need, but I want to make sure your wellness is a priority, and will do my best to help you get what you need out of this course. Another resource to be aware of are the Computer Science Health and Wellness Advocates.

Getting help

Our goal, as a course staff, is for every student to do well in the class. As such, we encourage you to ask questions about anything you don’t understand. Whether you are confused by something from lecture or are having trouble with an assignment, please reach out to us!

Ed

Our course uses Ed for online discussions. You can use it to ask questions about course concepts, assignments, and logistics. Posts can be either public or private; public posts are visible to everyone, while private posts are visible only to course staff. Any questions having to do with your particular solution to an assignment should be private; all other posts should be public (if you have a question about something, it’s very likely that other students do, too!). The course staff reserves the right to make private posts public if the answer is of general interest.

Ed is a discussion forum, so please feel free to respond to questions and comments–it’s great when students can learn from each other! When doing so, keep in mind the Course culture guidelines.

Posts made on Ed after 10pm are unlikely to get a response until the next day.

Email

Please post questions about the course to Ed rather than emailing the course staff–it’s very useful to have all course questions in one place where any of us can answer them. If you are unable to log in to Ed, you can contact the whole course staff at cs0112tas@lists.brown.edu.

If you have concerns of a personal nature (a problem with a project partner, for instance), please email the instructor: tim_nelson@brown.edu.

Office hours

Each TA will hold walk-in office hours per week (also accessible by Zoom). Tim will hold one walk-in hour, and is also available for appointments. Each week’s schedule is available on the course website (under the “Hours” tab).

Please come to office hours! Coming to office hours does not send a signal that you are behind or need “extra help”; on the contrary, the most successful students are usually those who come to office hours early and often.

Feel free to come to Tim’s office hours even if you don’t have a specific question about an assignment; Tim is happy to chat about the course material, computer science in general, careers in computer science, etc.

Collaboration Policy

Our collaboration policy attempts to balance the benefits of students learning together and the need to work problems on your own for understanding.

Labs are done in groups of 2-4 students, depending on the activites in a particular week. There are no restrictions on collaboration within lab groups.

Projects are done in small groups. There are no restrictions on collaboration within project groups. Project partners are expected to work on the entire project together, rather than to divide the project into parts to complete separately. Dividing the work defeats the learning goals for the project. For the first 3 projects, you shouldn’t consult any students outside of your group. For the final project, you may discuss project topics with other groups, but may not share code.

Drills should be done alone, as they are designed to help you and us assess whether you understand the concepts needed for the next lecture.

For homeworks, you are permitted to discuss high-level ideas with other students and provide limited debugging help. You should feel free to help classmates understand why a program is resulting in an unexpected output or error. You can also discuss an assignment question at a more general level than the code: discussing what the question is asking, what topics it draws on, and other similar non-code issues. However, you must produce your code and other responses that you hand in on your own.

The following activities, for example, are NOT allowed:

  • Sharing code files with another student for any reason;
  • Sitting next to another student while writing up solutions while looking at what the other is typing;
  • Sending code for a homework question to a classmate “just so they can look at it to figure out how to do the problem”;
  • Looking at a classmate’s code and suggesting changes beyond those needed to help debug an error;
  • Obtaining a solution online, or from someone not in the course; and
  • Leaving your work in unprotected directories or services (including github) where other students can find them.

For homeworks and projects, we have automated tools to detect code similarity. These tools have proved effective in detecting students who have shared code, despite efforts to “fool” them. We will follow Brown’s Academic Code procedures on any suspected violations. Note that those who provide solutions are held partially accountable, even if they didn’t think the other student would use their work. We understand the pressure to help friends when they ask: please don’t put other students in the position to say no to such requests.

If you have questions about the boundaries of the policy, please ask. There is never a penalty for asking.

Course announcements

Course announcements will be made via Ed. Time-sensitive announcements will also go out via email.

The course staff may issue clarifications to assignments up to 48 hours before the due date.

Written by Tim Nelson, Doug Woos