Syllabus
Course Information
CSE 373 covers the theoretical and conceptual foundations of common data structures and algorithms. Specific technical topics we will cover include:
- Algorithm Analysis: big- and little-O, and related complexity classes like big-Omega and big-Theta.
- ADTs (the classification system) and Data Structures (their implementations)): lists, stacks, queues, sets, dictionaries, priority queues, disjoint sets; these will be implemented using linked lists, arrays, trees, balanced trees (eg, AVL trees), hash tables, and binary heaps.
- Graphs and Graph Algorithms: graph search, shortest path, and minimum spanning trees.
- Sorting: approaches for comparison-based sorts (eg, insertion, exchanging/selecting, divide-and-conquer), as well as non-comparison-based sorts.
To a lesser extent, this course will provide opportunities to gain basic familiarity with techniques and tools used in the software industry. In particular, you will be asked to:
- Work on programming projects and integrate your changes into an existing codebase.
- Practice using an industrial-strength IDE.
- Learn techniques for checking correctness, such as writing unit tests with JUnit, designing and checking invariants, and practical techniques for debugging.
These skills were chosen to set you up for success in a software-related role. In fact, this course is typically regarded as useful preparation for technical interviews and a subsequent industry career.
Course Components and Late Policy
Grading
The grade breakdown is as follows:
- Written Homeworks: 28%
- Programming Projects: 26%
- Lecture Activities: 10%
- Exams (2 Midterms + 1 Final): 36%
Assignments: Written Homeworks
We have 7 homeworks, with due dates approximately every week. They assess a variety of skills, including simple coding, theory, and societal impacts. Homeworks must be submitted individually, but collaboration is permitted while working on them, subject to the guidelines below. Homeworks are always due Thursdays at 9pm.
Assignments: Programming Projects
We have 5 programming projects, with due dates approximately every other week. They are primarily intended to expose you to the techniques and tools used in the software industry, and secondarily to give you practice with the data structures and algorithms we discuss in class. One of those techniques include pair programming; you will have the option to work with a single partner and make a single submission for the two of you.
A programming project is graded in two different ways: (1) manually and (2) with the assistance of an autograder. The manual grading focuses on higher-level skills such as debugging and analysis, and is graded by the course staff only once. The autograder, however, focuses on your code's correctness, as determined by a series of automated tests (some of which are private to the course staff), and you can initiate autograder testing on your code at any point and as often as you like. We recommend submitting early and often, to early receive feedback but also to "lock in" a "good enough" grade in case your code should suffer a catastrophic last-minute failure or you become unavailable immediately before a deadline.
Many students tend to fixate on perfecting their autograder score rather than the purpose of the programming projects, which is familiarity with tools. We remind students that these projects' collective weight in your course grade is the smallest of the major categories, and to budget your time accordingly. For example, if you were to spend 10h to get the "last 20 points" of a programming project, you might find that it is the this quarter's most inefficient use of your time with us.
Lecture Activities
Our lectures have a variety of in-class activities, containing before- and in-class thought questions designed to enhance the day's topics and to promote active learning. These are administered using PollEverywhere. Since they are intended to be low-pressure, you will receive credit for attempting the activity (ie, your answer can be incorrect). These are due immediately after lecture.
Exams
We will have 2 midterm exams and one final exam. All exams will be administered in the regular lecture hall at their regularly-scheduled times (ie, midterms will be held during the lecture period, and the final exam will be held according to the university-wide schedule).
Late Policy and Adjusted Denominators
We expect all assignments to be submitted on time and, for that reason, we apply the following late penalties at the end of the quarter to all assignments (ie, to both written homeworks and programmming projects):
- For the first 12h late, we will penalize your submission by 2%. We call this the "my computer crashed" policy.
- For the next 12h late, we will penalize your submission by 5%.
- For the following 12h late, we will penalize your submission by 10%.
- For the final 12h late, we will penalize your submission by 20%.
- No submissions will be accepted more than 48h after its original deadline.
For example:
- Assume you submitted the wrong programming project and don't correct it until 4h after the duedate, after which you earn a score of 19/20 points. At the end of the quarter you will receive 98% * 19/20 = 93.1% for that assignment.
- Work schedules you for an unexpected shift and causes you to submit your written homework 25h late. You receive 45/50 points for that submission, which is then adjusted to 90% * 45/50 = 81% for that assignment.
For lecture participation, we will adjust the course grade's denominator down by 20%. For example, if we offered 90 activities over the quarter and you attempted 85 of them, the denominator would be 72=90*80% and you would receive a grade of 85/72 for participation. Any answers above the denominator may be applied, at the instructor's discretion, towards extra credit.
Please note that this policy is designed for quotidian events; if you have truly exceptional circumstances or need further accommodations, please contact the course staff as soon as possible to arrange an appropriate strategy for completing your work.
Course Norms and Policies
Climate
Our code and our projects are made better by considering a variety of viewpoints. Each student's experiences and abilities are essential to creating a thriving learning community, 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 & inclusive learning environment. Should you feel uncomfortable bringing up an issue with a staff member directly, consider submitting anonymous feedback, talking with the CSE academic advisors, or contacting the Office of the Ombud.
Collaborating with Humans
Learning these ideas is challenging. We encourage you to discuss specific problems from this class 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.
Interesting computer science, the type of science which makes news and changes lives, are done by teams of technologists working in collaboration; we intend to create a similar climate in this class. When working on lecture activities, homeworks, and projects, you should ensure each member of your group is treated with respect and can make a contribution to the final solution.
Cheating with Humans
Alas, students sometimes confuse collaboration with cheating. We want to be clear that learning collaboratively is different from sharing answers. Ultimately, the difference between collaboration and sharing answers boils down to "whose brain generated the materials I submitted for grading?". If the answer is "me", then you learned from your collaboration; that’s great! Please do more of that! Go you!! However, if the answer is "my collaborator", then you were sharing answers; please don't do that.
A healthy collaboration resembles this:
- No collaboration-generated materials (eg, code, hand-written notes,
screenshots) are ever referenced when you are working on the
materials that you will submit for grading.
- You MAY NOT ALLOW your collaborators to take away collaboration-generated materials, either. Recall that misconduct penalties apply to students who provide answers in addition to those receiving them!
- Take a 30 minute break (eg, go for a run, watch a TV show, wash the dishes) after your collaboration and before writing up the materials you will submit for grading
- Cite the names of all your collaborators, regardless of whether they are human or whether they are currently taking this course
Working with AI
This course uses the Allen School "AI as Reference Tool" policy. In brief: you may use AI for general course questions and ungraded work, but not for graded assignments, quizzes, exams, or any deliverable that counts toward your grade. Read the full policy carefully so you understand what counts as general support versus graded work.
Additional Policies
The guidelines for this course and more information about academic integrity are in separate documents (including, but not limited to, the Allen School's Academic Misconduct Page and the College of Engineering's Academic Misconduct Process). YOU are responsible for knowing and applying the information in these documents.
Special Circumstances
Disabilities and Health Conditions
Your experience in this class should not be negatively-affected by any disabilities or health conditions you have. The Disability Resources for Students (DRS) office can help you establish accommodations with the course staff.
If you have already established accommodations with DRS, please communicate your approved accommodations to the instructor 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.
Extenuating Circumstances: "Don't Suffer in Silence"
More generally, we recognize that our students come from varied backgrounds and can have widely-varying circumstances. If you have an unforeseen circumstance that arises during the course, please do not hesitate to contact the staff to discuss your situation. The sooner we are made aware, the more easily these situations can be resolved. Extenuating circumstances may include:
- Work-school balance
- Familial and/or caregiving responsibilities
- Military duties
- Unexpected travel
- Acute health issues (notably: recall that mental health is still health)
- Concerns for personal safety
- ...
- ... or anything else beyond your control which may negatively impact your performance in the class
While some amount of "productive struggle" is healthy for learning, you should ask the course staff for help if you've been stuck on an issue for a very time.
Resources
Having questions or getting stuck on something is entirely expected in the learning process. If you find something challenging with your studies, that is a sign you are learning! However, learning is not something that you need to do alone; connecting with your peers or asking a member of the course staff for help can get you unstuck and even add depth to your knowledge.
Support Hours and One-on-Ones
If you have conceptual questions or need assistance debugging your assignments, we strongly recommend attending support hours. A common misconception is that these are somehow "reserved" for specific homework questions. This is not true! Support hours are a great resource for clarifying concepts and meeting students with similar issues, too.
We recognize that not every question is appropriate for support 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 support hour. In these circumstances, we recommend requesting a one-on-one.
Ed
We are using Ed for discussion and announcements. This includes both private "staff-only" discussion and public class-wide discussion.
Gradescope
We are using Gradescope for homeworks and lecture activities. This is the authoritative copy of your scores; we will not copy scores into Canvas.
Anonymous Feedback
You can send fully-anonymous feedback to Hannah via this form; note that she cannot respond to your concerns directly.