Grading

This year (2021), we have overhauled the grading scheme in CS 121, and are following a specifications grading approach. Many of you have likely not encountered specifications grading before, so we encourage you to carefully read this page to make sure you understand how it works.

Coursework Grading Scale

Previously, graded work received a score between 0 and 100. This year, each piece of graded work will receive one of four discrete scores:

  • Exemplary (E): The work is either perfect, or has only very minor flaws.

  • Satisfactory (S): While the work has some room for improvement, the student has put in a good-faith effort to complete all the work and demonstrated sufficient mastery of the material. Only minor revisions would be needed for the work to be Exemplary.

  • Needs Improvement (N): The student has put in a good-faith effort to complete the work, but revealed a lack of mastery in the material that can be addressed via concrete feedback. The work could become Satisfactory or Exemplary with some major revisions.

  • Ungradable (U): The student did not submit any work, or did not complete a sufficient portion of the work (e.g., completed less than half the work that was assigned).

This is often referred to as the ESNU scale. It is important that you avoid thinking of these scores in terms of how they map to an A, B, C, etc. (the manner in which we compute your final grade is described below). The ESNU scale is intended to help you understand your mastery of the material, so you can identify areas for improvement as the quarter progresses. Each assignment will include a more precise description of what is required for an E, S, N, or U.

Final Grade

This class is divided into six modules, and involves four types of coursework: Short Exercises, Programming Assignments, Timed Exercises, and a Final Exam (both the modules and the coursework are described in more detail in the Course Structure page).

Your final grade will be largely determined by how many modules you submit work for, as well as the amount of satisfactory and exemplary work that you submit across those modules. In a specifications grading scheme, you should think about the grade you’re aiming for, and ensure that you’re on track to meet the requirements of that grade. We encourage you to initially aim for an A, but then reassess your goal as the quarter progresses.

The high-level requirements for each grade are described below (we provide the exact requirements further below):

A- or A

Exemplary work across all the modules

You must submit work for nearly all the assigned coursework, with practically all that work being at least satisfactory, and a majority of it exemplary.

P, B-, B, or B+

Satisfactory work across all the modules

You must submit work for nearly all the assigned coursework. While most of that work must be at least satisfactory, there is more flexibility to absorb less-than-satisfactory work in the short and timed exercises, as well as in the final exam.

C-, C, or C+

Satisfactory work across most (but not all) of the modules

You must submit work for at least 4 modules, where most of the work you submit is at least satisfactory. You do not need to take the final exam.

Your final grade will be computed based on the ESNU scores you obtain throughout the quarter. You will receive a total of 30 ESNU scores, divided as follows:

  • Exercises (Short and Timed): Each set of short exercises contributes one score, for a total of 6 short exercise scores throughout the quarter. There are two sets of timed exercises, each with four timed exercises (and with each timed exercise contributing one score). So, there is a total of 8 timed exercise scores throughout the quarter, and a total of 14 exercise scores (6 short and 8 timed) throughout the quarter.

  • Programming Assignments: Each programming exercise contributes two scores, for a total of 12 throughout the quarter.

  • Final Exam: The final exam includes four problems, each contributing one score, for a total of 4 scores.

You should avoid thinking of these scores as making up some percent of your final grade. For example, if the Exercises contribute 14 out of the 30 scores, that does not mean that the Exercises are worth nearly half your final grade.

Instead, your exact grade will be determined based on the table below, where the columns represent the following:

  • N + S + E: The minimum number of non-Ungradeable scores (i.e., N’s, S’s, and E’s) achieved by the student. This represents the amount of work the student has done in good faith.

  • S + E: The minimum number of scores that are, at least, Satisfactory. This represents the amount of work that the student has done in good faith, and which has room for only moderate/minor improvement.

  • E: The minimum number of Exemplary scores. This represents the amount of work done by the student that is of superior quality.

Each row specifies the minimum number of scores that you must achieve to earn that grade. You will earn the highest grade for which you meet all requirements.

Exercises (out of 14)

Programming Assignments (out of 12)

Final Exam (out of 4)

Grade

N+S+E

S+E

E

N+S+E

S+E

E

N+S+E

S+E

E

A

12

11

9

12

12

10

4

4

2

A-

12

10

8

12

11

9

4

3

1

B+

9

8

6

12

10

7

3

2

1

B

9

8

4

12

9

7

3

2

0

B-

9

7

2

12

9

4

2

2

0

P

9

7

2

12

9

4

2

2

0

C+

6

4

2

10

8

4

0

0

0

C

6

3

0

9

7

2

0

0

0

C-

6

3

0

8

6

0

0

0

0

Here is how we expect most students to achieve each grade (although as long as you meet the scores, exactly how you meet them does not matter):

If you want to get this grade…

This will typically involve the following:

A- or A

  • Submit exemplary work on the programming assignments. You should make sure your code passes all provided tests, and you should be careful about your code quality, but there is room for work that requires some improvement early in the quarter.

  • Submit exemplary work for all of the short exercises, and most of the timed exercises.

  • Take the final exam, and submit satisfactory or exemplary work for most of the questions on the exam.

P, B-, B, or B+

  • Submit satisfactory work on the programming assignments, where at least some (but not most) of the work is exemplary. You should make sure your code pases a substantial amount of tests, but not necessarily all of them. While you should be careful about your code quality, there is room for work that requires substantial improvement early in the quarter.

  • Submit satisfactory work for all the short exercises, and some of the timed exercises, where at least some (but not most) of the work is exemplary.

  • Take the final exam, and submit satisfactory, but not necessarily exemplary, work on at least half the questions on the exam.

C-, C, or C+

  • Submit satisfactory work for at least four programming assignments.

  • Submit work for all the short exercises but not the timed exercises or, alternatively, submit work for some combination of short and timed exercises totalling roughly half of all the exercises. Most of the submitted work must be, at least, satisfactory.

  • If you do work of sufficient quality on the first five modules, you do not need to complete Module 6.

  • You do not need to take the final exam.

To help you compute your final grade, including potential outcomes under a number of scenarios, we provide a grade calculator where you can enter scores for each piece of coursework, and see what final grade you would get.

Resubmissions

You will be allowed to resubmit at most two programming assignments (except PA6, the final programming assignment, which cannot be resubmitted). More specifically, once a programming assignment is graded and returned to the class, there will be an approximately two week window for you to resubmit that assignment (or, if you were unable to submit the assignment initially, to submit it to make up for that missed submission). This means that, if you produce work that needs some improvement, you will have a chance to address the graders’ feedback to improve your score on that assignment (or to make up for a missed submission).

Short Exercises are designed so that you can determine your score on the exercises by running a series of automated tests. This means that you can find out your score well ahead of the deadline, and make adjustments or seek help as needed. Additionally, while we will not accept short exercise submissions after the stated deadline, you can submit a set of short exercises as many times as you want before the deadline (we will only look at your last submission).

Late Submissions

Late submissions will not be accepted in this class, except under extraordinary circumstances. Please bear in mind that the grading scheme is set up to absorb a reasonable amount of less-than-satisfactory work, and also allows you to resubmit at most one programming assignment.

That said, to be clear: if you encounter some sort of emergency (medical, family, etc.) please reach out to your instructor as soon as you are able to do so. We are more than happy to find ways to provide additional flexibility in these situations. Ideally, you should notify us of these circumstances before the work is due so we can discuss options with you.

In other words, our late submission policy applies to ordinary circumstances: if you are having a busy week, if your RSO has an event that overlaps with a deadline, etc., then the grading scheme will have some built-in flexibility for this. Instead of trying to argue for a few extra days to work on an assignment, you should just submit the work you have completed by the deadline, so you can get feedback on that work and use that feedback to improve your work in future assignments, or even to resubmit the assignment as described above.

Grading Disputes

Except in very specific cases (described below), you cannot dispute the score assigned to you on a piece of work. The score you receive on a piece of work is meant to convey feedback on your level of mastery, and you should take it as an opportunity to understand the areas of improvement in your work. You are more than welcome to ask us for concrete advice on how to improve your work, and we are always more than happy to have those kind of conversations with students, including going over your code. On the other hand, we will not entertain requests to change your score just because you feel your work deserved a higher score.

There is one exception to this: if a grader made an factual mistake in your grading. Please note that this only includes cases where a grader makes an erroneous statement about your code in their feedback. It does not include cases where you simply disagree with whether something deserves to be flagged as incorrect.

For example, suppose you receive a piece of feedback that says “Incorrect: Function X did not check that parameter Y is greater than zero”. If function X in your code did perform this check, and the grader missed this fact (and erroneously gave you that feedback), you can ask us to review this decision. Please note that, even if the feedback is amended, it may not affect your actual ESNU score.

We ask that you keep these requests brief and to the point: no more than a few sentences identifying the exact statement that the grader made and the reasons you believe the statement was mistaken, including references to specific parts of your code (e.g., “I did check the value of the parameter in line 107”). Focus on laying out the facts, and nothing else.

Finally, it is also your responsibility to make these requests in a timely manner. Requests to review grading mistakes must be submitted no later than one week after a graded piece of work is returned to you. After that time, we will not consider any such requests, regardless of whether the request is reasonable and justified.