Syllabus


Course Description

Includes substantial programming experience in languages that expose machine characteristics and low-level data representation (e.g., C and C++); explicit memory management; interacting with operating-system services; and cache-aware programming.

Prerequisites: CSE 351 (The Hardware/Software Interface)



Course Components and Grading

The grade breakdown is as follows, though we reserve the right to make reasonable adjustments as the quarter evolves:


Exercises

People become great programmers by writing lots of code and learning from that experience -- practice makes perfect, after all! We will be assigning a mandatory programming exercise with most lectures, due before the next lecture. These will be relatively short and simple, but they will reinforce the material from lecture. We provide feedback and sample solutions, but the grading is deliberately coarse-grained:

We expect Minuses and Zeroes to be rare; we also expect Check Pluses to be uncommon at first, but that they will become more common as you gain more practice and earlier feedback is taken into account. In recognition of the fact that learning involves learning from mistakes, we will drop your lowest exercise score (out of a planned 21 activities) from the course grade calculation.

An unfortunate artifact of Gradescope's numeric scoring is that Check Plus must be mapped to a score of "4" whereas a Check is mapped to a "3", etc. We ask that you use the verbal description of your grade (eg, "Check") rather than its numeric one (eg, "3"), because Gradescope's numeric description doesn't match the non-linear translation we will use during the end-of-the-quarter grade calculation. For example, we do not consider a Check Plus submission (in Gradescope parlance, a "4") to be "33% better" than a Check submission (a "3").

As with the larger homeworks, exercises must be completed individually and will be tested/graded using the CSE linux environment.


Homeworks

There will be four major programming assignments during the quarter; these homeworks are designed to build on top of each other, so it is in your interest to make sure that earlier submissions are rock-solid.

As with the shorter exercises, homeworks must be completed individually and will be tested/graded using the CSE linux environment.


Lecture Activities

Lectures have a variety of before- and in-class activities submitted via PollEverywhere; these activities must be submitted synchronously (ie, they must be answered as soon as they are presented) and late submissions will not be accepted. For this component, you will receive credit for completing the activity (ie, your answer can be incorrect).

Furthermore, we have a policy we call "80% is 100%"; you will receive full credit for this category if you participate in >= 80% of the offered activities. For example, you will receive full points for lecture activities if you complete 64 out of the ~80 questions that we expect to ask during the quarter.

In-person participation can be tricky to assess equitably, so we do not attempt to do so. Although we will not grade it, we still strongly encourage in-person participation, as it is positively correlated with higher scores in other categories (eg, final exam).


A Word About Code Quality and Legibility ...

The code that you submit for exercises and homeworks must be high-quality and easy-to-read. To help you learn what "quality" and "legibility" means, we will be using a variety of automated tools (eg, cpplint, Valgrind) and online guides (eg, the Google C++ guide, linked on our resources page). In this course, we take quality very seriously and will weight these scores appropriately.



Late Policy

There are absolutely no late submissions accepted for exercises or lecture activities.

We expect homeworks to be submitted on time; however, we realize that our deadlines may occasionally overlap with another class's or that work may schedule you for an unexpected shift. In recognition of this fact, you are allowed a total of 4 late days, which are defined as the 24-hour period after a due date. We consider late days as an optional tool for managing your time; if CSE 333 were your only class and your only job, you wouldn't use them at all. For this reason, unused late days have no impact on your grade at the end of the quarter; on the other hand, if you exceed the late days afforded to you, you will lose 20% off your score for each day an assignment is overdue.

Regardless of how many late days you have remaining, no homework will be accepted after 2 days have elapsed.



Inclusion

Our code and our projects are made better by considering a variety of viewpoints. Your course staff is committed to the values outlined in the Allen School's inclusiveness statement, and you are expected to uphold a supportive and inclusive learning environment.

If, at any point, you are made to feel uncomfortable, disrespected, or excluded by a staff member or fellow student, please report the incident so that we may address the issue. Should you feel uncomfortable bringing up an issue with a staff member directly, consider sending anonymous feedback or contacting the Office of the Ombud.



Resources

Office Hours and One-on-Ones

If you have conceptual questions or need assistance debugging your assignments, we strongly recommend attending office hours.

We recognize that not every question is appropriate for office hours, however. For example, you may wish to discuss your extenuating circumstances, need support/advice for a personal issue, or have followup questions from a previous office hour. In these circumstances, we recommend requesting a one-on-one by writing a private message to the course staff, indicating with whom you would like to meet and what days/times you have available. We will try to schedule a time to meet no later than 2 days of your request, depending on the staff's current workload.

Ed Discussion

We use Ed for discussion and announcements. This includes both private "staff-only" messages and public class-wide discussion.

Gradescope and Canvas

We use Gradescope for exercises and homeworks. We will use Canvas only for Panopto recordings, Zoom links, and late-day tracking. Gradescope is the authoritative copy of your scores; we will not copy scores into Canvas.

PollEverywhere

We use PollEverywhere to administer before- and in-class lecture activities.

CSE Linux Environment

All assignments (homeworks and exercises) in this class will be graded on the CSE Linux environment. Different linux distributions and linux-like systems (MacOS, for example), while fundamentally the same, have subtle differences in libraries and header files. These differences are substantial enough that code developed outside of the CSE Linux environment has a strong probability of failing to work correctly when tested on CSE systems.

To prevent unpleasant surprises, we strongly recommend that you work on the assignments in the CSE Linux environment. There are three ways to do this:

  1. Log into a Linux PC located in one of the undergraduate workstation labs.
  2. Remotely log in to attu.cs.washington.edu.
  3. Install and use the CSE home VM on your personal machine.

Textbooks

There are no strictly required texts for this courses. Most people will find it useful to have both a C and a C++ reference; suggestions are given below. We strongly recommend that you have a copy of the C++ Primer, as C++ is a big, complex language and it is hard to understand how it all fits together from just Google and Stack Overflow snippets and folklore.

Strongly Recommended (i.e., basically required):

Suggested:

Anonymous Feedback

You can send anonymous feedback to the instructor, but please note that she cannot respond to you directly.



Cheating and Collaboration Policy

Learning these ideas is challenging. We encourage you to discuss course activities with your friends and classmates as you are working on them, because you will learn more in this class if you work with others than if you do not. Ask questions, answer questions, and share ideas liberally; we want a class that is open, welcoming, and collaborative, where we can help each other build the highest possible understanding of the course material.

Learning collaboratively is different from sharing answers. Ultimately, the difference between collaboration and sharing answers boils down to "whose brain generated the submission?". A good rule-of-thumb for distinguishing between these two is this: Can I, or my collaborator, attempt an immaterially-different question (eg, allocating an integer instead of a double), by myself/themself?. If the answer is “yes”, then someone learned from your collaboration; that’s great! Please do more of it! Go you!

However, if the answer to this question is “no”, then you were sharing answers. In particular:

You are the one who is responsible for understanding and applying Allen School's Academic Misconduct Policy, which applies to students who provide answers in addition to those receiving them. If you are in doubt about what might constitute misconduct, contact the course staff describing the situation and we will be happy to clarify it for you. When it comes to the potential for sharing answers, it is better to ask permission than to beg forgiveness.



Accommodations and Extenuating Circumstances

Please refer to university policies regarding disability accommodations and religious accomodations. These policies have strict timelines associated with them, so we encourage you to read through and apply these policies at the start of the quarter if you believe they may apply to you.

More generally, we recognize that our students come from varied backgrounds and can have widely-varying circumstances. If you have any unforeseen or extenuating circumstance that arise during the course which hinders your ability to learn or to submit work, please do not hesitate to contact the staff to discuss your situation. The sooner we are made aware, the more easily we can help. Extenuating circumstances may include: