CS 473: Homework Policies

The course staff must critically examine several thousand pages of homework submissions this semester! We desperately need your help to make sure homeworks are graded and returned quickly. If you have any questions or concerns about these policies, please don't hesitate to ask in lecture, during office hours, or on Piazza.

I apologize in advance for the length of this document. Most of this stuff is obvious to almost everybody, but after teaching algorithms for a couple of decades, I've seen a lot of strange things.

What homework is for

Algorithm design and analysis is a skill that can only be developed through practice and feedback, just like cooking or basketball or integration or gardening or interviewing or teaching. Yes, there are several things that are useful to know and understand, but that knowledge and understanding is not enough. That comfortable feeling of "Oh, yeah, I understand this" when you follow a well-presented lecture or hear a TA carefully explain the solution to a homework problem is a seductive and dangerous trap. You can only learn to do the thing by actually doing the thing.

The homework is your opportunity to practice doing the thing. The lectures and textbook and office hours hopefully provide good intuition and motivation and justification for the skills we want you to develop, but the best way to develop those skills is by trying to solve the problems yourself. The practice is far more important than the solution.

Because the homework is intended to help you develop new skills, you are likely to get stuck; for some problems, you may have no idea how to even start. And that's okay. That's why we have a textbook and lecture videos and office hours and Piazza and a library and Wikipedia; helping you get unstuck is part of our job. That's why we encourage students to work together; not so that you can share solutions, but so that you can share ideas and suggestions and feedback.

Similarly, you won't necessarily develop a complete solution to every homework problem yourself, and you may not be able to tell which parts of your final submitted solution are correct. And that's also okay. That's why we provide homework solutions—not just to show you the answer, but to help you see your own work more clearly. That's why we grade your homework submissions—not to give you points, but to give you feedback to help you improve.

To get the most out of any particular homework problem, it's important not just to aim for a solution to that specific problem, but to pay attention to how you're solving it. Every problem is an opportunity to practice that kind of problem; every solution is an example of that kind of solution.

It's also important to aim for improvement—not perfection (which is impossible), not being better than other people (which can be toxic), but doing the thing better than you did yesterday, every day.

In practice, course grades in CS 473 are determined almost entirely by exams, which ask you to demonstrate the same skills that the homework is meant to develop; homework scores have minimal impact. So even if your goal is to optimize your course grade, practicing with the homework problems is more important than getting the right answers.

No Late Homework. Ever.

Deadly Sins

We've identified a small number of bad writing (and thinking) habits that are strongly correlated with poor performance in algorithms courses, but are easy to avoid. Homework and exam solutions that commit any of these sins will be penalized. We’re not trying to be scary or petty (Honest!), but we do want to break a few common bad habits that seriously impede mastery of the course material.

Logistics: How to submit

Form: How to write

Please make it easy for the graders to figure out what you mean in the short time they have to grade your solution. If your solutions are difficult to read or understand, you will lose points.

Be Honest

Be Clear

Be Concise

Content: What to write

No “I don't know” credit

I used to offer 25% partial credit for answering any problem with "I don't know". After doing this for 20 years, I was finally convinced to end this practice in Spring 2020. The 25% partial credit was intended to reward self-awareness; I still believe that truthfully admitting ignorance indicates more mastery of the material than submitting a completely incorrect answer.

However, in practice, the IDK partial credit undermined students' confidence, and it introduced a distracting element of gamesmanship. Students who lacked confidence in their own mastery often submitted IDK rather than risking a score under 25%, even when they could produce solutions worth more than 25%. Other students spent far too much mental energy trying to guess whether their partial solution was worth more or less than IDK; I heard several complaints that the IDK policy discouraged students from "trying" or "guessing". At least for these students, IDK credit shifted the focus of homework and exam questions toward risk-avoidance or grade optimization, and away from the actual course material.

Especailly during the late 2010s, I saw struggling students increasingly use IDKs in a way that was clearly self-destructive, such as answering IDK to a majority of the final exam questions, meeting the minimum homrwork requirement by submitting 16 IDKs, or ignoring the fact that submitting IDK for any homework problem is actually worse that submitting nothing at all (unless you're already failing for other reasons).

In particular, there is some evidence that the IDK policy unfairly impacted female and underrepresented minority students.

So no more partial credit for "I don't know". We want you to make a good-faith effort to solve every problem, especially on exams.

(While I'd love to report that this policy change had a positive effect on stress and exam grades, COVID makes comparisons with earlier semesters difficult to impossible.)