Link

Syllabus

Table of contents

  1. Goals
  2. Course Tools and Components
    1. Tools
    2. Components
      1. GPA Distribution
      2. Programming Projects
      3. Individual Exercises
      4. Exams
      5. Extra Credit
  3. Policies
    1. Late Policy
    2. Collaboration Policy
      1. Programming Projects
      2. Written Exercises
      3. Permitted Collaboration
  4. Receiving Help from Staff
  5. Inclusion
  6. Accommodations
    1. Extenuating Circumstances
    2. Disabilities
    3. Religious Accommodations

Goals

The primary focus of this class is on gaining a strong theoretical and conceptual understanding of common data structures and algorithms as well as how they can be practically applied 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, disjoint sets
  • Graphs and graph algorithms: graph search, shortest path, and minimum spanning trees
  • Algorithm analysis: asymptotic analysis, 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 larger projects
  • 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

And finally, this course also emphasizes the importance of making and justifying effective design decisions. All of the above skills are those that are traditionally a part of any technical interview, thus this course is typically considered an important pre-requisite when applying for development positions.

Prerequisite: CSE 143.

Course Tools and Components

Tools

We use GitLab to distribute starter code for programming projects; this is also how you will submit your solution. 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 a book we recommend this one.

We use Gradescope for grading. Your exams will be uploaded to Gradescope on your behalf, and you are responsible for submitting your programming projects and individual written exercises (described below). Gradescope is where you will receive your grades and any feedback from course staff.

In lecture, we use PollEverywhere for in-class peer-instruction questions, in which you solve a question related to lecture content, discuss with your peers, and vote on the answer. This is designed to give you a chance to check your understanding of the material by applying it on-the-spot, as well as an opportunity to interact with your classmates. To participate in polls, 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:

Lastly, 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.

Components

Your final grade will be a combination of weekly assignments, two midterms and a final take home assessment as follows:

CategoryWeight
Programming Projects35%
Individual Exercises20%
Midterm 115%
Midterm 215%
Final-Review Assignment15%
Total100%

GPA Distribution

Due to the nature of this remote quarter we have decided to no longer curve this course and instead will be awarding GPAs based on the following percentages. Please note: these percentages are minimum guarntees, your final GPA could be higher if the score distributions skew too low. These percentages are based on final grades from 5 quarters of this course and represent a consistent pattern of performance, so we feel confident that you can achieve these levels.

Percent EarnedLetter GradeGPA
95A+4.0
90A3.5
80B3.0
60C2.0
50D0.7

Note: If you have a specific GPA goal in this course, please feel free to reach out to Zach and Kasey so we are aware and we can work together to ensure you meet your goal. We are also happy to schedule 1:1 time or you are welcome to come to our office hours to discuss your current progress and how to work towards your goal.

Programming Projects

There will be 6 programming projects assigned this quarter. These will give you an opportunity to explore data structures and algorithms in code as well as give you experience with the software development process. You are welcome, and in fact encouraged to complete these in pairs, however if you like you can work alone. Both partners will submit the same code and receive the same exact grade for the project (before any late day deductions). We suggest using IntelliJ IDEA as your Java editor (IDE). You will receive starter code for each project via GitLab. You will submit your code via Gradescope, as this allows us to use an automatic grader so you can receive feedback and your scores immediately. Please be aware we do use the Measure Of Software Similarity (MOSS) to ensure academic integrity.

Individual Exercises

There will be 6 individual exercises assigned this quarter. These will help to reinforce the topics discussed in lecture and prepare your for the exams. These will be assigned and submitted via Gradescope. As the name indicates, these are intended to be individual assignments, however you are encouraged to collaborate. Please review the academic misconduct guidelines closely to understand our policies.

Exams

Due to the unique nature of our remote quarter we have decided to explore a slightly different approach to exams.

There will be two midterm exams, conducted during class time 8:30am-9:20am PST.

  • Midterm 1 will be on Friday April 24th
  • Midterm 2 will be on Friday May 29th If you cannot take the midterms at these times, please inform the lecturers ASAP

The midterms will focus on “mechanical” style problems that test your understanding and retention of the data structures and algorithms we introduce in class. The midterms will be open note, including lecture notes, your assignments and even the internet. However, any form of collaboration or communication between students or any other humans (tutors, roommates, well intentioned parents) is strictly prohibited. Note that there will be multiple versions of the exam to help ensure fairness.

Instead of a timed final exam we will be assigning a take home assignment during finals week. This exam will focus on the “free response” style of problems that test your mastery of design and synthesis of the concepts we cover throughout the quarter. This will be a collaborative assignment as well as open note.

Extra Credit

We will have several mechanisms to earn small amounts of extra credit throughout the quarter. The extra credit will only affect your grade by potentially pushing you up to the next GPA if you are very close.

These mechanisms include:

  • Post-lecture review questions - these will be posted on Gradescope after each lecture by 6pm, and will be available for submission for 48 hours. We encourage you to complete these review questions if you are concerned about your grade in this course or your understanding of the lecture material.
  • Project feedback surveys - there will be a survey at the end of each project in which you give us feedback about your experience completing the project. We’ll read this feedback and take it seriously to try and improve the projects for future quarters.
  • Student feedback surveys - there will be at least one survey during the quarter asking for student feedback about the course and the online logistics. We’ll take this feedback and use it to try and improve the course during the quarter.

None of these mechanisms are graded for correct answers – if you complete any of these, you will receive the extra credit for that work.

Policies

Late Policy

Homework assignments (both projects and written exercises) are due on Gradescope before 11:59pm. Due to the unique circumstances of this quarter students will be given 7 late days for the duration of the course. A single late day enables you to submit an assignment 24 hours after the deadline without penalty. You may use up to 3 late days on a single assignment, however please note that submissions will close 72 hours after the deadline. If you submit an assignment late and have remaining late days, we will automatically apply them for you.

If you use all your late days, a late penalty will be applied to your score according to the following chart:

LatenessPenalty
1-12 hours-2.5%
13-24 hours-5%
25-48 hours-10%
49-72 hours-30%
73+ hoursRequires lecturer permission

Note that late days are individual, so a late submission of a partner programming assignment will apply to each partner according to their current state of late days.

There is a small 5-minute grace period for last-minute submission issues. Any lateness afterwards will be calculated by rounding up your lateness to the nearest whole hour. The autograder will not automatically compute lateness deductions, but Canvas will be updated periodically to have the actual grades.

We will use Canvas as the final gradebook for this course, so please ensure that all your grades are correctly entered. If you see any mistakes (sorry we are human) please fill out the following form to let us know: Canvas Grade Issue Form

Note on Extenuating Circumstances

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

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 definitely 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.

Programming Projects

The following applies to collaboration on programming projects when interacting with students other than your partner. Reminder: you are allowed to fully collaborate with your partner.

Learning collaboratively is different from sharing answers. Here are some guidelines to keep your interactions “collaborative” and not “cheating”:

  • You should never directly show another student your code. This means you should never send your files to another student nor should you screen share your work for other students.
    • Instead you are welcome to describe what is happening either verbally or in text.
    • It is ok to share small snippets of code, but this should be only a couple lines at most, never entire methods.
  • If you are helping another student, don’t just tell them the answer; they will learn very little and run into trouble on exams. Instead, try to guide them toward discovering the solution on their own.
    • You should not be spelling out code for any other students to directly type.
  • You should not be working on assignments in close collaboration with another person or group of people from start to finish.
    • Your work should not substantially resemble anyone else’s beside your partner!
    • Try to collaborate on specific issues or questions as opposed to the entirety of an assignment.
  • Please NEVER distribute solutions at any time, even after the course is over. This includes both solutions that you wrote and any solutions you may have obtained. “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. group chat with a few friends).

Written Exercises

  • We encourage collaboration between any students on exercises.
  • You can talk through problems, the process, and your ideas, but you should not copy answers. If you are collaborating on the process and the ideas, you’ll be to write up separate answers without that qualifying as cheating. If someone else has done the work to get an answer and you copy that answer without going through the process and the ideas, that also qualifies as cheating.

A good rule-of-thumb for distinguishing between collaboration and sharing answers is this: Can I attempt an immaterially-different question (eg, sorting in ascending order instead of descending order), by myself, without my collaborator? If the answer is “yes”, then you learned from your collaboration; that’s great! Please do more of it! However, if the answer is “no”, then you were probably sharing answers and you might want to review that problem some more.

Permitted Collaboration

Sharing answers is one form of cheating, but all forms of cheating are disallowed in this course. You should not claim to be responsible for work that is not yours. For clarity, examples of specific activities are listed below.

  • Discussion of approaches for solving a problem.
  • Giving away or receiving significant conceptual ideas towards a problem solution; such help should be cited as comments in your code. For the sake of others’ learning experience we ask that you try not to give away anything juicy, and instead try to lead people to such solutions.
  • Discussion of specific syntax issues and bugs in your code.
  • Using small snippets of code that you find online for solving tiny problems. For example, searching for “uppercase string java” may lead you to some sample code that you copy and paste into your solution.

Please cite any of the above collaborations as comments!

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 instructors an email describing the situation and we will be happy to clarify it for you.

Receiving Help from Staff

Piazza is our online discussion forum. For most questions about the course or materials, Piazza is the right place to ask: the course staff read it regularly, so you will get a quick answer. We strongly recommend posting publicly so that other students benefit by seeing the question and its answer. 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.

Piazza privacy
The use of “Piazza Careers” is not required and you do not need to put any personal information in the website.

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.

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 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.

Accommodations

Extenuating Circumstances

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, please do not hesitate to contact the instructors to discuss your situation. The sooner we are made aware, the more easily these situations can be resolved. Extenuating circumstances include work-school balance, familial responsibilities, religious observations, military duties, unexpected travel, or anything else beyond your control that may negatively impact your performance in the class.

We are all humans, life happens! Our ultimate goal as a course staff is to provide you the ability to be successful. Even if you feel there’s nothing we can do to help, we as a staff always want to hear about the challenges our students are facing if you feel comfortable sharing.

Disabilities

Your experience in this class is important to us. If you have already established accommodations with Disability Resources for Students (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