7 Grading🔗

What are grades for? Our philosophy is that grades are a way of giving you motivation to learn and improve, not a way of separating people into categories. You should get a grade according to what you have learned, and you should be exposed to various ways of learning and have multiple opportunities to show what you have learned.

As such, our grading system is designed to ensure that you:
  • Keep up with the work and don’t fall behind (by assigning penalties for late work)

  • Come to class prepared to engage in learning and discussion (by having an in-class quiz)

  • Have done your "reading" (watching in this class) so that you to understand basic concepts (by having video lectures, and implementation follow-along assignments)

  • Have a chance to internalize and extrapolate on what you have learned (by having extension and other programming assignments)

We will work with you to ensure that you have the opportunity to get the grade you feel you deserve, by showing us that you have learned the material and engaged in learning.

However, we also understand that sometimes things come up, and you don’t have time in the week for all of your classes. As such we have a buffer built into the grading system.

There are 116 points possible in the class. You start with 0 and earn points to earn your final grade. There are five different kinds of assignments:
  • There are twenty-four quiz assignments designed to ensure you come to class prepared, and refresh in your mind older concepts, worth 1 point each.

  • There are seventeen implementation assignments designed to illustrate a different aspect of programming language implementation, worth 1 point each.

  • There are eight extension assignments designed to give you practice adding new language features and refactoring the interpreter, worth 6 point each.

  • There are three programming assignments designed to teach you about functional programming design patterns worth 3 points each.

  • There are another six programming assignments designed to expose you to new languages and programming approaches worth 2 points each.

  • There are two survey assignments designed to help me know where you’re coming from and what your experience is, worth 2 point each.

At the end of the semester, I will calculate your grade using grade defined as

fun grade(points :: Int) :: Symbol:

  cond

  | points >= 93: #'A

  | points >= 90: #'A-

  | points >= 87: #'B+

  | points >= 83: #'B

  | points >= 80: #'B-

  | points >= 77: #'C+

  | points >= 73: #'C

  | points >= 70: #'C-

  | points >= 67: #'D+

  | points >= 63: #'D

  | points >= 60: #'D-

  | ~else: #'E

and applied to the number of points you earned.

Because there are 116 points possible, you can in principle complete and submit only 19 of the 41 1-point assignments, say, and still get an A. Before headlong adoption of this strategy, please consider:
  • You must ace every other assignment for this strategy to net an A.

  • Simply ignoring a foundational assignment will make it more difficult to ace the later assignments, by virtue of later material relying on it.

I recommend you strive to do all the assignments, counting on this buffer for the cases in which you don’t earn full points.

Assignments earn half credit after the due date. It doesn’t matter how late old assignments are turned, in they will be worth the same number of points at any point after the due date As such, it is more worth your time to turn in the next assignments for full credit, before attempting to catch up on old assignments. . Turn in incomplete assignments before the due date to get some credit at the full-credit rating. Though still strive to make sure that it at least compiles.

I reserve the right to adjust the late penalty down (so that you are not penalized as much) for the class as a whole and for individual students as their situations warrant. I will strive to set and apply penalties as fairly as possible.