Links: [ prereqs | objectives | resources | class | setup | assessments | exams | grades | participation | texts | policies ]
CSE351 (The Hardware/Software Interface): CSE 351 provides students with rudimentary knowledge of C programming; the ability to write, run, and debug programs; familiarity with Linux and the use of Linux compilation, editing, and debugging tools; a solid mental model of the relationship between high-level programming languages and assembly-level compiled code; simple data structures such as linked lists, trees, hash tables, and queues.
CSE 123 (Intro to Computer Programming III): CSE 123 is not a direct prerequisite (CSE 351 prerequisite), but some of its topics are beneficial to review for CSE 333. This includes classes, inheritance, good style practices, and simple data structures such as linked lists, trees, hash tables, and queues.
Although we review these topics in CSE 333, we expect students to have deeper familiarity of these pre-requisites courses (or equivalent).
At the end of this course, students should be able to:
We use a few education platforms and tools throughout the course.
| Tool | How we use it |
|---|---|
| Canvas | Our gradebook. It also hosts lecture recordings and Zoom links. |
| Gradescope | Where assessments are graded, released, and regraded. Used for all code or exam submissions. |
| Ed Discussion | Discussion board for all questions you may have related to the class (or otherwise). |
| GitLab | Hosts your Git repos; submit by tagging commits. See Git Basics and GitLab Setup. |
| Poll Everywhere | In-class polls for participation. |
Lectures will be hosted at these times:
We will try our best to record lectures via Panopto. Sections will not be recorded.
Although we try to record lectures, we can make no guarantee that the recordings will be available immediately or at all. This class is not a distance-learning or hybrid class so our ability to provide recordings is best effort.
You should plan to attend class regularly. Historically, students who skip lectures have struggled later in the course.
All assignments and exercises in CSE 333 are written, built, and graded in the Allen School's Linux environment (currently Rocky Linux with gcc/g++ version 11). Although your code may compile on other systems (including other Linux distributions), always do a final check on a CSE machine before you submit.
There are several supported ways to get a working environment. These are described in detail on the Environment Setup page:
Many students use VS Code to remotely connect to one of these environments. This gives them the benefits of an IDE on their local machine, even though their code builds and runs on our CSE systems.
You will also the Allen School's GitLab to track your work and submit it; follow the GitLab Setup and Git Basics guides to get your repositories set up.
All assessments are due at 11:59pm unless specified otherwise. That means you must commit your submission to the appropriate Gitlab repository AND tag that commit before midnight to receive credit.
Your submissions are evaluated on two dimensions: correctness (do you follow the spec) and code quality (do you follow the style guide).
Every week, we provide students with an exercise to practice material from the recent lectures. Students have ~4-5 days to complete these. They are designed to be short, stand-alone assessments that test a specific set of concepts.
Exercises are distributed and submitted through your exercise GitLab repository. We grade them on the CSE Linux environment and return feedback. Exercise solutions are posted 24 hours after the due date. After they are posted, we can no longer accept late work related to the exercise.
There are four major programming assignments over the quarter, each substantially larger than an exercise. They are designed to build on top of one another. Cumulatively, they give you experience building a real system. Since all of the homeworks assessments are in a sequence, errors may compound. We recommend you fix any issues in earlier homeworks before moving on to later parts.
Like exercises, homework is submitted through your homework GitLab repository by tagging a commit.
If you find an error in grading, please let us know within one week of the assignment being returned.
Assignments are expected to be done on time, but we know that sometimes you just need a little slack for an unexpected problem or that "last" stubborn bug. For the entire quarter, you start with four free late days, and you can earn more by participating in the course or by instructor discretion (see the participation section below).
Late days can be used on both exercises and homeworks:
If you are not finished with an assignment and have no remaining late days, turn in your best effort for partial credit. This policy may not be the same as in other classes, so you are responsible for understanding it if you choose to submit late work.
And of course, there are always truly unusual situations that require
some flexibility. We'll do our best to work with you if you're having
problems, or if unexpected emergencies or illnesses occur. Please
contact the course staff as soon as you can using the
cse333-staff[at]cs email address.
We will have one midterm exam and a final exam. The midterm exam will be held during lecture about halfway through the quarter. The final exam will be held during the last week of classes during the summer quarter.
The primary purpose of exams is to provide an opportunity to review and solidify understanding of course material, especially concepts that are not covered comprehensively in programming assignment or exercise code.
The initial plan is the following. We reserve the right to make reasonable adjustments to this as the quarter evolves:
Project assignments are assigned two scores: one for program operation (correctness) and one for code quality (style). These two scores are converted to a percentage and weighed roughly equally in the overall project assessment, even though the raw point scales may be quite different.
If you discover an error in grading, please bring it to our attention within one week after the assignment or project is first returned.
We want this class to be an active, collaborative space, and we reward showing up and engaging with the material. You can earn up to 4 participation points per week:
Participation is not part of the grade calculation… so what can you do with these points? As you reach certain milestones, you unlock perks:
Engineering classes tend to treat technical material as the only thing that matters. That focus is understandable, but it can lead new graduates to undervalue the skills that shape a career: being kind, staying engaged, and collaborating well with others. The students who thrive, both in this class and beyond it, are the ones who pair strong technical ability with the ability to work alongside and learn from the people around them. Rewarding students who invest in those habits is exactly what this participation system is meant to do.
There are no required texts for this courses. However, most people will find it useful to have both a C and a C++ reference; suggestions are given below.
Many of these books are freely available to UW students through the
UW Library's subscription to Safari Books Online. Go to
https://www.oreilly.com/, click
sign-in at the top right, and enter your @uw.edu email
address. You will then be directed to a standard UW netid login, after
which you can access everything on the site.
The course web resources page has links to several useful C, C++, and Linux reference and tutorial sites.
Please refer to university policies regarding disability accommodations and religious accommodations.
In general, we are always trying to improve the course. If something seems inaccessible or difficult, just reach out to the course staff. We make adjustments (even within the same quarter) based on student feedback.
Cheating is a serious offense that can lead to a failing grade and a formal misconduct case. In short: the work you submit must be your own, and you may not use generative AI tools (like ChatGPT, Claude, or Gemini) or IDE auto-complete to produce any part of your graded work.
You may use AI to understand course concepts in general, but never on a specific graded assignment, directly or indirectly (for example, by pasting in a spec, starter code, or tests). If you are ever unsure whether something is allowed, ask the instructor first. Please read our full Academic Integrity policy, which includes concrete examples of allowed and disallowed AI use.