Not registered for the course, but interested in following along? Check out the materials we provide publicly in 20su.


In this course, you will gain a strong theoretical and conceptual understanding of common data structures and algorithms, as well as how to apply them within larger programming projects.

Specific topics we will cover include:

  • Data structures and ADTs: lists, stacks, queues, sets, dictionaries, linked lists, arrays, trees, balanced trees, AVL trees, hash tables, priority queues, binary heaps, and disjoint sets.
  • Graphs and graph algorithms: graph search, shortest path, and minimum spanning trees.
  • Algorithm analysis: asymptotic analysis, and P and NP complexity classes.
  • Sorting and divide-and-conquer.

This course is also designed to have a practical component to help you gain basic familiarity with techniques used within industry. In particular, you’ll be asked to:

  • Work on large programming projects and integrate your work in an existing codebase.
  • Learn how to use an industrial-strength IDE.
  • Learn techniques for checking correctness: writing unit tests with JUnit, designing and checking invariants, etc.
  • Learn how to collaborate on a single code base using source control repositories.

Finally, this course emphasizes the importance of making and justifying design decisions. Taken together, all of the above skills are chosen to set you up for success in a software-related role, and in particular this course is typically regarded as useful preparation for industry and technical interviews.

Prerequisite: CSE 143, or similar Java programming experience.

Course Components

Grade Breakdown

Your percentage grade in this course will be weighted using these categories:

Category Weight
Programming Projects 45%
Individual Exercises 25%
Exam I 15%
Exam II 15%
Total 100%


There will be five programming projects (P0 through P4). Each project contains an auto-graded programming portion and a writeup component. Starter code is distributed on the CSE GitLab and your solutions to both parts are submitted on Gradescope.

Starting with P1, programming projects will be partner-based. You could:

  • Work with someone you know. You will have the option of choosing a partner before starter code for P1 is distributed.
  • Join the partner pool. We will randomly pair you up with another student. This is the default if you do not explicitly choose a partner.
  • Work alone. If you would like to work alone, you must explicitly opt-out of the partner pool. We do highly encourage a partner, as our projects are designed with a two-person workload in mind.

A sign-up form will be distributed in advance of projects to allow you to make your selection from the choices above.


There will be four individual written exercises. They focus on mechanical, theory, and basic application problems to reinforce content from lecture, and are explicitly designed to provide practice for the exams. Exercises are distributed on the course website in PDF form and due on Gradescope. Exercises are to be completed individually, although you may discuss concepts and problems at a high-level as outlined in our Collaboration policy.


There will be two exams during the quarter—see the course calendar for dates. The exams are open-note and unlike the individual exercises, group submissions are allowed. Instead of being timed, each exam will be open for 48 hours. The exams are written to be completed within one sitting, but you can use the entire 48 hours to work on them.

We will announce special Exam Office Hours for you to ask any clarification questions about the problems, but TAs will not give you detailed help or hints on your solutions.

More details about the exams will be published closer to their release.

Extra Credit

There are several opportunities to earn small amounts of extra credit throughout the quarter. The extra credit can affect your grade by potentially pushing you up to the next grade point if you are very close (e.g. 3.0 to 3.1). They are meant to be fun extensions rather than required parts of the course. Our advice is to complete extra credit for your own learning or review, but it is unlikely to be an efficient use of your time if you are completing it solely to boost your grade.

GPA Distribution

Due to the unusual nature of an online quarter, the course will not be curved to a specific median. Instead, we will assign final GPAs using a bucket system: if you earn at least the percentage specified in the left column, your course grade will be at least the grade listed on the right. These are minimum guarantees: your final GPA could be higher if the overall distribution skews too low.

Percent Earned GPA
95 4.0
90 3.5
80 3.0
60 2.0
50 0.7

If you have a specific GPA goal in this course, please feel free to reach out to the course staff or directly to the instructor and we can work together to talk about what you can expect in terms of meeting that goal.



Each student receives seven late days for the entire quarter. You may use late days on projects or exercises, and each allows you to submit up to 24 hours late without penalty.

No assignment may be submitted more than 3 days (72 hours) late without permission from the course instructor. This also means there is a practical upper limit of 3 late days usable per assignment.

After all late days have been exhausted, there is a 5% penalty on your grade for each late day that you would have used. The deduction will not be immediately applied on Gradescope, but will be reflected in the final grades you see on Canvas.

To use a late day, just submit late and we will keep track of late days used and lateness deductions for you. Note that late days are individual, so a late submission of a partner programming assignment will use a late day from each group member, and lateness deductions will apply to each partner according to the current state of their late days.

There is a small grace period for last-minute submission issues, but you should plan ahead to avoid depending on it.

Note on Extenuating Circumstances: If you have extenuating circumstances for an assignment, please contact the instructor as soon as possible to discuss accommodations. See the section below on Extenuating Circumstances.


Learning these ideas is challenging. We encourage you to discuss course activities with your friends and classmates as you are working on them. 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. However, to encourage everyone to learn the material, we impose restrictions on the information you may share with your classmates (see below).

Whenever you receive help from a third-party source, please cite any help that you receive as a method comment in code or as a footnote in writeups. There is no penalty for working with too many classmates. When in doubt, you should always err on the side of giving credit.

Ultimately, the goal of enrolling in this course is for you to learn this material, so that you will be prepared for exams, for research, for job interviews, etc. Engaging in academic misconduct does not help you towards that goal. If you are in doubt about what might constitute cheating, send the course staff an email describing the situation and we will be happy to clarify it for you.

Collaboration on Projects

You are allowed to fully collaborate with your project partner and submit a single submission together. For working with students outside of your partnership, you must observe these additional guidelines:

  • You should never directly show another student your code.
    • Instead, you are welcome to describe what is happening either verbally or in text.
    • It is okay to share small snippets of code, but this should be only a couple lines at most, never entire methods.
  • You should not be working on assignments in close collaboration (“in lockstep”).
    • Your work should not substantially resemble anyone else’s besides your partner!
    • As a guiding principle, collaborate on specific issues or questions as opposed to the entirety of an assignment.
  • You should never distribute solutions at any time, even after the course is over.
    • “Distribution” includes uploading them to public websites (e.g. a GitHub repo), group repositories (e.g. your club’s/frat’s/sorority’s “answer bank”), or private chats (e.g. a group chat with a few friends).

We may run MOSS (Measure of Software Similarity) on student submissions to detect over-collaboration.

Collaboration on Exercises

You can talk about problems, the process, and your ideas, but you should never show another person your writeup or final answer. It is cheating if someone else has done the work to get an answer and you see that answer without work. It is awesome if both of you work together to arrive at a common answer.

If you are working with another person over Zoom, you should typically share a whiteboard rather than your screen, so that you are in the process of sharing ideas rather than observing answers.

This is important, so allow us to restate it: please cite your collaborators. There is no penalty for doing so.

Collaboration on Exams

You are allowed to fully collaborate with the students in your group and submit a single submission together. For working with students outside of your partnership, you must observe the same additional guidelines as for exercises.

Course Tools

This quarter, we will use a number of different tools in CSE 373. Reach out to the course staff if you have questions about using any of them.


Lectures and sections will be delivered live via Zoom sessions, which students may join via their UW Zoom accounts. Zoom meeting links are published on our course Canvas page. Please note that although our course will offer live sessions, resources will be provided for students who cannot make those live sessions. Lecture recordings will be made available via Canvas, and review videos will be published as a substitute for sections.

UW Privacy Office’s Statement on Zoom

This course is scheduled to run synchronously at your scheduled class time via Zoom. These Zoom class sessions will be recorded. The recording will capture the presenter’s audio, video and computer screen. Student audio and video will be recorded if they share their computer audio and video during the recorded session. The recordings will only be accessible to students enrolled in the course to review materials. These recordings will not be shared with or accessible to the public. The University and Zoom have FERPA-compliant agreements in place to protect the security and privacy of UW Zoom accounts. Students who do not wish to be recorded should:

  • Change their Zoom screen name to hide any personal identifying information such as their name or UWNetID.
  • Not share their computer audio or video during their Zoom sessions.


This quarter we will trial the use of Discord for office hours and community building. More information about the 373 Discord server, how to join, and its associated privacy policy can be found on the office hours page of our website.


We use Piazza for course discussion and announcements. If you need to send the course staff a private message, we recommend using email instead of Piazza’s private messages. This makes sure that everyone is notified.

The use of Piazza Network (formerly Piazza Careers) is not required, and you do not need to put any personal information in the website to use it for instructional purposes this quarter.


Like many other CSE courses, we are mainly using Canvas as a gradebook and a place to find Zoom recordings. Please refer to the course website for most course information, including assignment specs and due dates.

CSE Gitlab

We use GitLab to distribute starter code for programming projects. Every student in the class will be given a GitLab repository to use in the process of development; this is also where you will store your solution when you’d like to submit it. For this reason, we recommend getting familiar with the basic git workflow, such as pulling, committing, and pushing changes. You can find short articles online describing these operations, but if you prefer an in-depth introduction we recommend this one.


We use Gradescope for submitting assignments and giving feedback. You will submit all your assignments for the course here: individual written exercises and exams (described below) will be uploaded directly by you, and you will submit programming projects by importing from your GitLab repository. Gradescope is where you will receive your grades and any feedback from course staff.


We use PollEverywhere for in-lecture activities, which will be used at various points in the quarter to enhance your learning. The intention of using PollEverywhere is not to take attendance, but rather to give you a chance to check your understanding of the material by applying it immediately in short problems—no part of your grade will require completing PollEverywhere activities to earn credit. To participate in PollEverywhere activities, first register your UWNetID on the Poll Everywhere website (more information at IT Connect). Then, in lecture, you may vote using either of the following options:

Getting Help from Staff & Peers

Discussion Board

Piazza and Discord both serve as online discussion forums. For most questions about the course or materials, they are the right place to ask: the course staff read them regularly, so you will get a quick answer. On Piazza, you can also submit questions anonymously if you are more comfortable doing so. However, if you need to send the course staff a private message, we recommend using email instead of Piazza’s private messages.

To meet with us, the best way is to visit our virtual Office Hours. Many of us are available at other times by appointment. In Office Hours, you can ask questions about the material, receive guidance on assignments, and work with peers and course staff in a small group setting.

Office Hours

Office Hours are scheduled times where you can meet with members of the course staff to discuss course concepts, get assistance with specific parts of the assignments, or discuss computer science and/or life outside of it.

Because of the unique circumstances in our online quarter, the majority of office hours this quarter will be held via Discord. More information about Discord and its associated privacy policy can be found on the office hours page of this website.

Course Climate

Extenuating Circumstances: “Don’t Suffer in Silence”

We recognize that our students come from varied backgrounds and can have widely-varying circumstances. We also acknowledge that the incredibly unusual circumstances of this particular quarter may bring unique challenges. If you have any unforeseen circumstances that arise during the course, please do not hesitate to contact the course staff or the instructor to discuss your situation. The sooner we are made aware, the more easily we can provide accommodations.

Typically, extenuating circumstances include work-school balance, familial responsibilities, health concerns, or anything else beyond your control that may negatively impact your performance in the class. Additionally, while some amount of “productive struggle” is healthy for learning, you should ask the course staff for help if you have been stuck on an issue for a very long time.

Life happens! While our focus is providing an excellent educational environment, our course does not exist in a vacuum. Our ultimate goal as a course staff is to provide you with the ability to be successful, and we encourage you to work with us to make that happen.


Your experience in this class should not be affected by any disabilities that you may have. The Disability Resources for Students (DRS) office can help you establish accommodations with the course staff.

DRS Instructions for Students

If you have already established accommodations with DRS, please communicate your approved accommodations to the lecturers at your earliest convenience so we can discuss your needs in this course.

If you have not yet established services through DRS, but have a temporary health condition or permanent disability that requires accommodations (conditions include but not limited to; mental health, attention-related, learning, vision, hearing, physical or health impacts), you are welcome to contact DRS. DRS offers resources and coordinates reasonable accommodations for students with disabilities and/or temporary health conditions.

Reasonable accommodations are established through an interactive process between you, your lecturer(s) and DRS. It is the policy and practice of the University of Washington to create inclusive and accessible learning environments consistent with federal and state law.

Religious Accommodations

Washington state law requires that UW develop a policy for accommodation of student absences or significant hardship due to reasons of faith or conscience, or for organized religious activities. The UW’s policy, including more information about how to request an accommodation, is available at Religious Accommodations Policy. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request form.


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 and maintain a supportive and inclusive learning environment. Should you feel uncomfortable bringing up an issue with a staff member directly, you may consider submitting anonymous feedback or contacting the Office of the Ombud.