Instructor: Megan Monroe
Email: mmonroe@cs.tufts.edu
Office: Joyce Cummings Center, Room 440D
Office Hours: Wednesday 2-4pm
Lecture: Joyce Cummings Center, Room 270
Section 1: Tues/Thurs 9:00-10:15am
Section 2: Tues/Thurs 10:30-11:45am
Lab: Joyce Cummings Center, Rooms 235 and 240

Final Exam: This course will have an in-person final exam on Friday, December 15th. The Section 1 exam is from 3:30-5:30pm. The Section 2 exam is from 12:00-2:00pm. Please do not ask me why Tufts scheduled these exams in reverse order. I don't know the answer.

Table of Contents

This page contains course information pertaining to:

Course Overview

This course serves as an introduction to computer science via the programming language C++. You will learn how to devise precise procedures for solving problems, and how to specify these procedures using the C++ programming language. Along the way, you will strengthen your computational thinking skills (helpful for any form of problem solving) and begin to form a mental model of how a computer operates.

CS11 does not assume any prior programming experience. Even if you have never programmed before, this course is for you! That being said, CS11 is a fast-paced, challenging course that may require more of your time and effort than what you’ve experienced in other courses. By staying aware of the course policies, following the advice of the course staff, and taking advantage of the provided resources, you will set yourself up for success in this course regardless of your background.

Course Goals

By the end of this course, students should be able to:
  1. Demonstrate computational problem solving with basic programming constructs.
  2. Interpret a sequence of English instructions (an algorithm) as a C++ program and vice versa.
  3. Apply computational thinking to solve problems.
  4. Assess a C++ program’s aesthetic value and functional correctness.

Course Expectations

These expectations are designed to prevent students from missing important information or misunderstanding policies that are essential for succeeding in the course. If you experience a negative outcome in CS11 (e.g. losing points on an assessment, missing a regrade request window, not begin granted an extension) due to a failure to meet one of these expectations, that outcome will not be changed.

By taking CS11, the instructor expects that a student will:
  • Read this entire syllabus during the first week of class.
  • Follow the three CS 11 axioms:
    1. Start early. Unlike, say, a set of individual math problems, a program has to function as a whole. The more you build, the more carefully you must think about how the various components fit together. If you’re rushing, it’s far more likely that you’ll break something than build something functional; give yourself as much time as possible!
    2. Think before your code. A program is just a faster and more reliable version of a procedure that can be done with a pencil and paper. If you do not have a clear idea of how you would solve the problem with a pencil and paper, then you are not ready to write code for it.
    3. Write a little, test a little. Finding a bug in 5 lines of code is far easier than finding a bug in 500 lines of code. A good program is written in small, testable increments. You should not write the next section of your program unless you have a clear plan for how to test it.
  • Read all pinned Piazza posts carefully throughout the semester (Piazza is explained below). This is the main mechanism for distributing information to the whole class, including changes to policies, deadlines, etc.
  • Adhere to all the policies outlined in this syllabus.

Final Grade Breakdown

Your course grade will be produced as a weighted sum of your scores in four categories:
  1. Labs (10%)
  2. Homework (60%)
  3. Midterm (10%)
  4. Final Exam (20%)
All grades will be posted on Gradescope for students to review. We do not expect to apply a curve to any portion of this grade.

Homework Logistics

In general, homworks will go out every Wednesday and be due at midnight the following Tuesday (there will be a longer project towards the end of the term). Each homework will be comprised of three components:
  1. A written component that will be submitted via Gradescope
  2. A programming component that will be submitted via our submit11 system
  3. A style component that evaluates how well your code conforms to our style guide
Homework grades will be posted to Gradescope for students to review.

Written

The written component of your homework must be submitted as a .pdf via Gradescope. Failing to submit your written component or submitting a non-pdf document will result in a loss of credit for this component.

Programming

The programming component of each assignment must be submitted via our submit11 system. First and foremost, the programing component of your homework must compile on our Halligan servers in order to receive any credit. Once your submission has compiled, it is evaluated by comparing its output to the output that our solution code produces.

With the exception of HW0, programming submissions will be graded by an automated system that uses the program, diff, to compare a submission's output to our ground truth. Students will learn to use diff during their second lab sesssion and are expected to use it for testing before submitting all of their susequent homeworks. It is not reasonable to assume that a program is working properly if it is not passing the diff tests.

For the majority of the homework assignments, we will be providing one or more sample input files that students may use for testing. While these tests are designed to be generally representative of the tests we will be using for grading, they are not intended to be comprehensive. Students are expected to create their own input scenarios and test them using diff.

The triplicate of compile-diff-submit should become the cornerstone of every student's submission process.

Late Homework

Homework is expected to be submitted on time. However, we recognize that the exigencies of college life occasionally thwart a homework deadline. In such circumstances, there are two types of extensions:

Late tokens: A late token grants you a 24-hour extension on an assignment. Each of you has 4 of them to use over the course of the semester. A maximum of two tokens can be used on any single assignment. Using a late token requires no action on your part. Our grading scripts will automatically check the date of your submission and deduct the appropriate number of tokens. However, there are two things that you can do to ensure that your late tokens get accounted for properly:
  1. If you intend to use a late token: Do not submit your written component until you are ready to submit your final code. This will prevent a partial submission from being graded.
  2. If you do NOT intend to use a late token: Do not submit anything after the due date. We grade your most recently submitted work. If that work came in after the due date, it will be counted as late.
When you do use a late token(s), it will be reported along with your homework and lab grades when they are posted. Once you have used all four of your late tokens, late work will no longer receive credit. It is your responsibility to keep track of your late token usage.

Late tokens are designed to accommodate short-term setbacks like catching a cold or an ill-timed deadline in another class. Again, there is no need for any e-mails or explanations. Just turn in the assignment when you get it done, and the late token accounting will happen automatically.

Dean-approved extensions: Extenuating circumstances occasionally exceed the conveniences of the late token system. In these cases, students must proactively reach out to their dean to request an extension (we rarely grant extensions that are requested on or past the due date). Your dean will then work with the course staff to make appropriate arrangements.

Regrade Requests

All regrade requests must be submitted via Gradescope within one week of the assignment grades being released. In cases where it is not immediately obvious how to submit a regrade request for a particular component of an assignment, it is always fine to submit the request on the first problem of the assignment or pose your request as a private Piazza post.

A regrade request may or may not result in a new grade being assigned. The new grade may be higher or lower than the original grade. You are always welcome to ask for an explanation of the grade you received.

Lab Logistics

Attendance in lab is mandatory. Our weekly labs are designed expressly to prepare students for the current homework. Students will work with a partner to complete a small problem or activity in the allotted time.

Ideally, you will finish the lab in the allotted time, but it’s totally ok if you don’t. Simply submit what you have at the end of your lab session and, if you feel comfortable with the concepts involved, move on to your weekly homework assignment. You’re also welcome to keep working on the lab after your lab session. Labs are due by the Friday of the week the lab was released. As long as you’ve put in a good faith effort, you will receive a Complete lab grade. Lab grades will be posted to Gradescope as a component of the weekly homework grade and adhere to the same regrade deadlines described above.

Technical Resources

Textbook

This course has one optional textbook, which serves as a helpful supplementary reference: Problem Solving with C++ by Walter Savitch. ISBN: 0133591743 (7th Edition or higher).

Piazza

The preferred means of contacting the course staff is via Piazza, an online forum where students can ask and answer questions. General questions about the homework, course policies, C++, or Linux should be posted publicly so that your classmates can benefit from the answers and any resulting discussion (before posting a question, please check to see whether your question has already been asked!). Questions that are personal in nature, or that pertain to specific pieces of code that you have written should be posted privately to the course staff.

Make sure you sign up for the CS11 Piazza page. Piazza will host all of our major course announcements. It is your responsibility to check in regularly to avoid missing any information.

Course Techware

This course relies on a small number of critical programs and scripts that support the basic routine of completing and submitting labs and homeworks. It is crucial that students arrive at a basic understanding of these technologies in order to complete their work without issues. You will learn about these technologies during the first few weeks of class, but further descriptions and instructions for them can be found on the course website in the CS11 Tech Guide.

TAs and Office Hours

We have a squadron of TAs who will be holding office hours in the large collab room overlooking the baseball fields on the 4th floor of the Joyce Cummings Center (Room 401). When you arrive, you can "join the queue" to receive help by writing your name on a list maintained on a whiteboard. When it’s your turn, a TA will come find you! The full OH schedule is posted and kept up to date as a pinned Piazza post.

OH assistance is meant to help you along or provide a nudge in the right direction; we expect that you will try to grapple with your issue yourself before asking for help. To help you follow this practice, you are expected to provide a specific topic or question to receive help. Here are some poor examples of specific topics/questions: “why doesn’t my program work?”, “debugging”, “I don’t know what’s going on”. Here are much better examples: “why does my program print a number when it should print a letter?”, “debugging a compiler error”, “I don’t understand the assignment’s directions”.

Collaboration and Academic Integrity

You are encouraged to discuss general CS11 concepts with anyone. This includes lecture slides and coding demos, lab handouts, reading material, and C++ concepts (functions, pointers, classes, etc.) and syntax (“how do I write a for loop?”, “how do I create an integer variable?”). You are also welcome and encouraged to fully collaborate on labs with a partner.

The collaboration policy for homework assignments is more nuanced. As described above, homeworks will be comprised of two components, a written component and a programming component. For each of them, we have slightly different policies about which forms of outside help and collaboration are acceptable:

Written

The goal of our written problems is to give you practice at finding pieces of information that you have not expressly been given in class and lab. This skill allows you to eventually function independently as a programmer, and is critical for all computer scientists to master. As such, you are expected to find the answers to written problems yourself. You may not confer with classmates, and may only minimally query the TA staff. From there, however, any means of finding an answer is fair game. You may search the internet, consult their textbook, write test programs - anything.

Programming

Both your classmates and the internet at large can be invaluable resources, so long as they are used according to the following policies:
  1. You may search the internet and talk to other students about general programing concepts and C++ syntax, but not about assignment-specific code or strategies. For example, it is fine to ask "How do you structure a 'while' loop in C++?", but it is not fine to ask "How do you write a Caesar Cipher decryptor in C++?" Assignment-specific questions should only be posed to the course staff.
  2. You should never be looking at or discussing another student’s code and no one outside of our course staff should be looking at or discussing your code. This also applies to testing and debugging: you may not help test or debug another student’s code, and you may not receive help testing or debugging your code from anyone other than the current course staff. If a TA sees you participating in any of these activities, it will be reported.
  3. Only submit code that you can explain. We reserve the right at any time to ask you to explain a piece of code that you submitted. If you cannot explain the code, then we will have no choice but to assume that it is not your work.
  4. Do not plagiarize code! Lifting partial or complete solutions from anyone (classmates, online sources, strangers) is completely prohibited. You must not submit code that others wrote or that you wrote for a previous class (or a previous iteration of CS 11).
  5. No questions, student solutions, or instructor-provided solutions should be posted online in any capacity (except as a submission to Gradescope). This means that you are prohibited from posting any of your work for 11 in a public Github repository.
Any violation of the above policies will be considered cheating, and all students involved in any capacity will be forwarded directly to the Office of Student Affairs, who will investigate the case independently. Their sanctions range from horrible to inconceivably horrible. It's not worth it.

Inclusivity and Accessibiliy

Respect is demanded at all times throughout the course. We realize that everyone comes from a different background with different experiences and abilities. In the classroom, participation is encouraged, and should always be used to better everyone in the class.

Tufts University values the diversity of our students, staff, and faculty; recognizing the important contribution each student makes to our unique community. Tufts is committed to providing equal access and support to all qualified students through the provision of reasonable accommodations so that each student may fully participate in the Tufts experience. If you have a disability that requires reasonable accommodations, please contact the StAAR Center to determine appropriate accommodations. Please be aware that accommodations cannot be enacted retroactively, making timeliness a critical aspect for their provision.