CSE 331: Course Info

Students are expected to be familiar with all of the information below. Read it fully and carefully.

We have also prepared an inductory video, available here (as "cse331-24sp-pre-quarter", slides here), which discusses the goals of the course. At the end, we highlight a few of items from below that we want to be sure you don't miss while reading it through. Please find time to watch the video before the first lecture on Monday, March 25th.

Course Structure

The goals of this course are teach students to:

  • Reason accurately so that the code they write is likely to work correctly the first time it is run.
  • Follow the accepted software engineering practices of reasoning, testing, and using the type system so that any reasoning mistakes are likely caught before a user sees them.
  • Practice defensive programming so that they will likely catch any errors that make it past the reasoning, testing, and the type system.
  • Understand the structure of larger-scale (client-server) programs so that they can effectively debug the failures do make it past those steps.
  • Structure their programs so that they are easy to understand, easy to change, and modular.

Prerequisites

The course assumes knowledge of the Java programming language at the level covered in CSE 123; however, students will not program in Java in this course. Instead, Java mainly will be used as a point of comparison for the language that is used (TypeScript).

Topics

We expect to cover (at least) the following topics during the course:

  • Ensuring Correctness
  • Testing
  • Reasoning about Functional Programs
  • Reasoning about Imperarative Programs
  • Abstraction
  • Debugging
  • Client and Server Applications
  • Design Patterns

Textbook

There is no required textbook for the course. However, students may find the articles linked on the Resources page useful to read at some point during the course.

Additionally, many students, early in their CS careers, find the following book helpful (although it will not be referenced much if at all during the course):

  • The Pragmatic Programmer by Andrew Hunt and David Thomas, 20th anniversary (2nd) edition, Addison-Wesley, 2020.

Lectures

Lectures will be given in person, at the locations and times shown on the time schedule. The afternoon lecture will also be recorded for the benefit of students who are sick or otherwise unable to attend.

Sections

Each week includes a TA-led quiz section. These will not be recorded, but the printed material used will be posted on the section list and calendar.

Each quiz section will be focused on preparation for the next homework assignment. A substantial portion of the time will be spent on practice problems similar to those appearing in that homework. It is very important that students take the time to work through the practice problems before attempting the homework to make sure they understand how to solve them.

Past experience indicates that section attendance is extremely important for being successful in the course. For that reason, participation in section is expected. Those who are sick or otherwise unable to attend can complete the practice problems on their own and submit their solutions in Gradescope by 5pm on Thursday. (If a student is completely unavailable on the day of a quiz section, they can contact the instructors or their section TA to make special arrangements.)

If students do not attend section, do not submit a solution to the worksheet in Gradescope, and do not make special arrangements to submit later, then the staff will interpret that as a statement that the student is confident they can complete the homework on their own without any help from TAs, in particular, that they do not need one-on-one help in office hours. As a result, TAs will allocate their extremely limited time in office hours to students who do attend section or submit the worksheet on Gradescope. (Of course, students who skip section can still ask questions on the message board.)

Homework

Homework assignments will generally be posted late Thursday evening, so that students can start the assignment on Friday. As noted above, Thursdays are intended to be used for working on the section worksheet, reading the official solutions, and asking questions to clarify any issues that were unclear.

Assignments can require either solutions in the form of written answers or typed code or both. Generally, the amount of code required will increase as the course progresses.

Past experience tells us that some of the homework assignments in this course can be very time consuming for some students. Students should plan to have at least 8 hours available per week to work on assignments, with the expectation that some assignments could require even more time depending on the student's background.

Students are expected to complete all homework assignments. Students who receive no (or essentially no) credit for multiple assignments risk failing. Outside of those circumstances, however, failing the course is highly unusual.

Occasionally, we will discover errors in an assignment after it is posted (typically, just small typos). We will maintain a log on the website with all changes made to the assignment. If (and only if) we believe there is potential for students to submit correct solutions to the earlier version, we will also email all students about the change. In particular, we will not send email if the earlier version is obviously nonsensical. (Most typos fall into this category.)

Exams

The course will have a final exam but no midterm. See the Exams section below for further details.

Getting Help

Students can ask questions at any time on the message board. During normal working hours, they should receive a response within a fairly short period of time (almost always under an hour).

Each member of the course staff will have at least one office hour every week, where students can get one-on-one help. See the home page for times and locations.

Note, however, that office hours are the most limited resource available to students — those held near the due date of assignments are almost always oversubscribed — so asking questions on the message board should always be preferred.

As noted above, office hours will be reserved for students who either attended section or submitted a solution to the section worksheet in Gradescope the prior Thursday. Those who skip section can still ask questions on the message board, but one-on-one help in office hours is reserved for students who worked on the section problems as expected.

Course Staff

James Wilcox

jrw12@cs.washington.edu

Section A and B

OH: Thursday 11am

Bio: Hi, I'm James! I grew up in the Chicago, Kansas City, and Nashville areas before moving to western Massachusetts for college. I came to Seattle 10 years ago to go to grad school at UW and earned my PhD in CS in 2021. My research areas are programming languages, verification, and distributed systems. I like puzzles in the broadest sense, and I especially enjoy the puzzle of convincing myself or others that a piece of code is correct. I started as an Assistant Teaching Professor in the Allen School in Autumn 2022. Between my PhD and joining the faculty, I worked at a startup in Seattle. Outside of work, I enjoy running and singing, but not at the same time.

Adam Fuegmann

afuegm25@cs.washington.edu

Section BB and BD

OH: Tue 11:30-1:20, Wed 12:30-1:20 (CSE2 131)

Bio: Hey everyone! I'm Adam, a senior in Computer Science. This is my third quarter teaching 331, and I can't wait for you all to see how awesome this class is! Outside of classes, you'll inevitably find me studying with friends in the Undergrad Commons at Gates. When I'm not studying, I like reading, playing some good ol' fashioned video games, and studying Japanese. Feel free to stop by OH whenever you'd like!!

Alex Zhang

azhang7@cs.washington.edu

Section BC

OH: Thu 10:00-11:00 (CSE 2nd floor breakout)

Bio: Hey everyone! I'm a fourth-year CS student in the BS/MS program and I'm originally from Pullman, WA. This is my 6th time TAing 331. Outside of school, some of my hobbies are boxing, hiking, skiing, and soccer. I look forward to spending the quarter with everyone!

Ali Toghani

at007@cs.washington.edu

Section AB and AE

OH: Tue 3:30-4:20 (CSE2 121)

Bio: Hi, I'm Ali, a fourth-year CS student. Outside of classes, you can often find me watching "The Office", experimenting with cooking, or playing Fifa/chess. I transferred here last fall, so if you have any questions regarding that experience, please feel free to ask!

Collin Dang

cdang38@cs.washington.edu

Section BB

OH: Mon 4:30-5:20 (CSE 2nd floor breakout)

Bio: Hey everyone! My name is Collin and I am a BS/MS student. This is my second time as a TA and my first time teaching section. Some of my interests include finance, artificial intelligence, and full-stack development. Feel free to reach out to my email or check out my personal website at https://www.collin-dang.com/.

Edison Leung

edleung@cs.washington.edu

Section BA

OH: Mon 12:30-1:20 (CSE 2nd floor breakout)

Bio: Hi! I'm Edison. I am currently a junior majoring in CS. This will be my 6th quarter TAing 331. I have lived most of my life in the Greater Seattle Area and love the spring weather over here. In my spare time, I like to snowboard and watch movies. I look forward to getting to know you all this quarter!

Gargi Panatula

gargipan@cs.washington.edu

Section AA

OH: Tue 1:00-2:00 (CSE2 131)

Bio: Hi everyone! My name's Gargi and I'm a senior in CS. This will be my 8th quarter TAing 331 and I'm super excited to share my passion for this class! Outside of CS, I'm minoring in Entrepreneurship and spend my spare time doing Bharatanatyam and rollerskating (although not at the same time).

George Zhang

gzhang02@cs.washington.edu

Section BC

OH: Fri 12:30-1:20 (CSE2 121)

Bio: Hi! I'm George, a junior double majoring in computer science and applied mathematics. This will be my second quarter TAing 331 and I'm looking forward to meeting everyone! When I (occasionally) find free time I enjoy cooking and playing volleyball.

Jaela Field

jaelaf@cs.washington.edu

Section AD and BE

OH: Wed 9:00-10:00 (CSE 2nd floor breakout)

Bio: Hello, I'm Jaela! I'm super excited to be TAing 331 this quarter! I am a BS/MS student and this is my 9th quarter TAing this course. When I'm not doing school, I love to cook, bake, and hike! Come visit me in OH or section; I would be so happy to help you learn in this really great course or just to chat :)

Katherine Murphy

kate2001@cs.washington.edu

Section AC and AD

OH: Wed 12:30-1:20 (CSE2 131)

Bio: Hello everyone! I'm a BS/MS student and this will be my 12th quarter TAing 331, so I've been at it for a while now. :) In my free time, I enjoy skiing, baking, and spending time with my puppy, Izzy. I look forward to meeting you all this quarter, and cannot wait to see you in my OH or section! Feel free to stop by to ask questions or just to chat!

Lainey Gikyo Jeon

gikyoj@uw.edu

Section BA

OH: Thu 3:00-4:00 (CSE2 121)

Bio: Hi all, I'm Lainey! I am a junior studying computer science with a minor in education. In my free time, I like listening to music, snowboarding, and watching horror movies. Please feel free to visit my office hours with any questions or to chat- I am super excited to meet everyone! :)

Liza Zakharova

lizazak@uw.edu

Section AC

OH: Tue 11:30-12:20 (CSE2 131)

Bio: Hi guys! My name is Liza and I'm a third-year studying computer science. This is my third quarter TAing and my first quarter TAing 331. Outside of class I enjoy skiing, dancing, learning new languages, and playing codenames. Feel free to reach out about anything!

Medha Gupta

medhag2@cs.washington.edu

Section AB

OH: Mon 11:30-12:20 (CSE 2nd floor breakout)

Bio: Hi everyone! I am a 2nd year CS student and this is my 1st quarter TAing 331. Outside of classes, I enjoy reading, baking, and singing horrendously to Bollywood songs. Some of my hot takes are that I don't like boba but love pineapple on pizza. I look forward to meeting everyone this quarter!

Michelle Arquiza

marquiza@cs.washington.edu

Section BE

OH: Mon 1:30-2:20 (CSE2 151)

Bio: Hi everyone! I'm Michelle, a third-year student studying Computer Science, and this will be my 4rd quarter TAing 331. Outside of school, I love to cook, play games, and visit new cafes. Feel free to stop by my OH and reach out if you need anything (or have any cafe/drink recs)!

Riva Gore

rivagore@cs.washington.edu

Section AE

OH: Tue 9:00-10:00 (CSE2 131)

Bio: Hi everyone! I'm Riva, a second-year majoring in CS. This is my first quarter TAing 331 and I'm looking forward to meeting you all! Outside of class, I like to bake, binge K-dramas, watch Bollywood movies, and read. Feel free to reach out and say hi!

Vinay Pritamani

vprita@cs.washington.edu

Section AA

OH: Tue 1:30-2:20 (CSE 2nd floor breakout)

Bio: Hi everyone, I'm Vinay Pritamani! I am a second-year majoring in Computer Science. This is my third quarter as a TA, and my first as a TA for 331! Outside of studies, I enjoy playing and watching the sport of cricket. I look forward to meeting all of you this quarter!

Homework Mechanics

Submission

All work will be turned in via Gradescope. For each assignment, you will turn in your written work and code separately.

You will turn in your written work to the "HW# Written" assignment on Gradescope. Make sure that any handwritten work is legible (and dark enough) for us to read. If the graders cannot read your solution, they cannot give you points. Also, when you turn in your written HW to Gradescope, please match each HW problem to where you did your work. If you do not do this, you may receive a point deduction.

You will turn in your code to the "HW# Code" assignment on Gradescope. You only need to submit the final version of each of the files you worked on in the assignment.

In the HW instructions, for each coding problem, we will identify which files you will need to upload to Gradescope. It is crucial that you only upload the files that we instruct you to, or else you may not pass the autograder. For example, if HW1 Problem 30 says to upload file example.ts and Problem 60 says to upload fun.ts, you should only upload example.ts and fun.ts to Gradescope. You should not put example.ts and fun.ts into a folder, and then upload the folder to Gradescope, as this will cause you to fail the autograder.

Be sure to look for any error messages from the autograder when you submit, and be sure that you received all of the auto-graded points. If you did not, you can examine the error messages, identify the problem, and then submit a corrected solution. Make sure you leave enough time to fix any errors that identified by the autograder. Try to avoid submitting for the first time in the last few minutes before the assignment is due because that will not leave you enough time to fix any problems encountered.

Regrades

If grading mistakes occur, students are encouraged to bring them to the attention of the course staff and see that they are corrected. They can do so by requesting a regrade in GradeScope, with the following caveats:

  • We will only entertain regrade requests for one week after the grades are initially are posted. In particular, students searching for extra points late in the quarter by requesting regrades of problems from early assignments will be ignored.

  • While regrades can (and should) be used to fix mistakes where a correct solution is mistakenly marked incorrect, they cannot (and should not) be used to request changes to amounts of points deducted for errors. Deductions are applied consistently to all students. We will not give one student a smaller deduction than others who made the same (or very similar) mistakes, so do not ask us to do so.

  • If students wish to fix an inconsistency between the grading of two assignments that had similar answers, both students must request a regrade. That way, the staff can determine whether the appropriate correction is to add points to the student with the lower score or remove them from the student with the higher score. If only the student who lost points requests a regrade, it will be ignored.

  • For the final assignment, HW9, the staff will not regrade individual parts. Students can request a regrade for the entire assignment, and their points may go up or down as a result.

Policies

Inclusiveness

Students should expect and demand to be treated with respect by their classmates and the course staff. All students belong here, and the staff is here to help them learn and enjoy a challenging course. If any incident occurs that challenges this commitment to a supportive and inclusive environment, students should let the staff know so the issue can be addressed. You can use the anonymous feedback tool if you would like to tell us something anonymously.

Late Policy

Homework assignments are designed to be completed by the due dates listed. Situations may arise, however, where students are unable to complete the assignment by those dates. For that reason, the staff will allow students to submit assignments one day late with no penalty, provided that the following conditions are met:

  • Students use no more than one late day per assignment. A “day” means 24 hours from the original due date/time.

  • Students use no more than four late days total during the quarter.

Late work not meeting these conditions (i.e., more than 24 hours on one assignment or more than four assignments) will only be accepted after a discussion with course instructor. There is no need to talk to the instructor until all 4 late days have been used or more than one late day is needed on an individual assignment.

Students do not need to take any special action when submitting an assignment late. The course staff will note the late submission and keep track of how many late submissions have occurred.

In addition, please note that:

  • Anything more than 10 minutes late is just as late as something submitted the next day.

  • Late days are intended to cover any emergencies that arise. We do not grant extra late days beyond the first four, just for emergencies — those four are intended to cover most emergencies.

  • Finishing an assignment one date late usually puts the student behind schedule for the next assignment.

    The day after the assignment is due is intended to be focused on the section component of the next assignment. If a student is unable to fully concentrate on quiz section, then they go into the next assignment at a disadvantage. Hence, it is always to the students benefit to finish each assignment on time.

Collaboration

Students are allowed to discuss homework problems with others, but they must write or type their solution individually, without assistance.

Student solutions are not group work. Students can work together to solve problems, but then, they must leave the group, taking no written or electronic records of group work with them; wait at least 20 minutes; and then write up / code up their solution on their own, unassisted. Students who initially solve problems with a group, must list the other group members as "collaborators" in the written part of their solution.

This policy clearly precludes copying code off of the Internet. Hence, students should not consult the Internet for problems or key-phrases. This includes Google, Stack Overflow, reddit, and any other website. However, students may consult the internet for ideas, definitions, and understanding general concepts.

Each student should keep anything they plan to submit as a solution completely private. Under no circumstances should they give a copy of their code or written work to another student, as that would clearly violate the rules listed above.

AI Assistance

AI tools such as GitHub Copilot or ChatGPT are clearly not allowed under the policy described above. While using Copilot is entirely reasonable on personal projects, it must be turned off when completing the assignments in this course.

Such tools have essentially memorized all the code on the Internet. Asking the tool to produce code from its memory is no different, as far as we are concerned, from searching for the code and then copying it yourself. We explicitly disallow the latter, so the former is also disallowed.

On the other hand, students are allowed to look at outside resources in order to build up their understanding and then use their understanding to solve the problem. It is understanding that will get students a job. (No one will pay someone just to type prompts into ChatGPT. They can do that themselves!) Hence, any technique that short circuits the process of building up understanding is adverse to a student's long-term career goals, and so we disallow it.

Academic Integrity

As noted above, the staff expects each student to write their own solutions, independently. Attempting to misrepresent another student's solution as their own would be unfair to the other students in the course and constitute academic misconduct in violation of the Allen School policy. Any such violation will be reported to University, and the instructors will make every attempt to ensure the harshest allowable penalty.

Note that, in cases where one student copies the solution of another, both students have violated the policy and both will be disciplined. Again, all students should keep their solutions private.

If a student is ever unclear about whether their discussions with other students went over the line, they should (a) ask and (b) describe their collaboration clearly on their assignment. If they do, the worst that will happen is losing some points. That is much better than the alternative.

Accommodations

Please refer to university policies regarding disability accommodations and religious accommodations.

Grading

Homework Grading

Students are responsible for making sure that they submit solutions to the final version of the problems posted on the website. (As noted above, the initially posted versions of assignments sometimes contain errors.) Students should confirm that they have solved the final version by consulting the change log on the website before submitting their solutions.

Graders will identify incorrect answers in submitted solutions and deduct points commensurate with the severity of the errors made. They will aim to deduct points consistently across all assignments making the same or similar errors.

In addition, the course has the following policies:

  • Graders will ignore requests to change the amount of points deducted. These amounts, as long as they are applied consistently, are entirely at the discretion of the course staff.

  • Graders will ignore legalistic arguments about why incorrect solutions should be accepted under an alternative reading of the problem statement. Incorrect answers will be marked as such as long as the staff believes the intention of the problem statement was clear.

  • Talking to a staff member does not take away the student's responsibility to submit a correct answer. The staff will not accept incorrect answers due to a claim that some staff member said it was acceptable. Students sometimes misunderstand what TAs are trying to say, and in any case, it remains the students responsibility to make sure their understanding of the problem statements matches up with the plain meaning of the instructions given in the assignment or class.

Course Grades

Overall scores for the course will be determined roughly as follows:

75% Homework
25% Final exam

Homework assignments will not be weighted equally because they are of different length and sophistication. Later assignments will generally be weighted more heavily because they are more involved. In particular, we expect the individual assignments to have the following weights in the overall grade:

6.0% each HW1–2
8.5% each HW3–8
12.0% HW9

That said, we may need to adjust the weights if any assignments turn out to be much more difficult or easier than expected.

Overall percentage scores will be translated into course grades as described in the following table:

96.5% 4.0   84.0% 3.4   71.5% 2.8
94.5% 3.9   82.0% 3.3   69.5% 2.7
92.5% 3.8   80.0% 3.2   67.5% 2.6
90.5% 3.7   78.0% 3.1   65.0% 2.5
88.5% 3.6   75.5% 3.0   63.0% 2.4
86.0% 3.5   73.5% 2.9   61.0% 2.3

Grades for scores below 60% will be determined by the instructors on a case-by-case basis. (In particular, we reserve the right to pass students whose percentages would fall below 2.0 if we continued the table above.)

We expect the median grade to be about 90% on the homework assignments and 80% on the exams. That would translate into an overall percentage score of 87%, using the tentative weights in the first table above. Per the second table, that translates to a 3.5 grade as it is above 86.0% and below 88.5%.

Exams

The will be no midterm exam this quarter.

The final exam will be held on June 4th from 12:20-2:20 in KNE 120. Note that this may not be at the time and place listed in the UW final exame schedule. If you have a conflict, please contact course staff as soon as possible and at least a week in advance of the exam.

Students must bring their UW ID and have it ready to be checked during the exam.

The exams will focus on the theoretical material, especially reasoning. This is in contrast to HW7-8, which will focus on practical skills, namely, building full-stack applications.

More details on the exam will be added here during the final week of class...

Advice For Students

  • Start assignments early. Aim to complete them the day before they are due. Assignments are often more difficult than expected, and students should also to leave time to make and correct mistakes.

  • Prefer the message board to office hours. Office hours get very busy, especially in the last 48 hours before assignments are due. (Yet another reason to start early is so that students can attend office hours that are less busy.) Even just before assignments are due, however, questions on the Message Board are usually answered within a short period of time.

  • Do not skip class to work on homework, not even late in the quarter when students are more tired and busy. Doing so often seems like it will save time in the short run, but it will cost time in the long run.

  • Think about which lecture material applies to that homework problem. As described above, each assignment is intended to apply ideas from lecture, so if it does not seem that any lectures apply to a given problem, it is nearly certain that the student did not understand some part of some lecture.

  • Focus on understanding, not on getting points. A student's understanding of the material, not the points they received, is what will get them a job and ensure a successful career as a programmer.