Written by Julie Zelenski
We hope your primary goal in taking this course is to learn and master the material and strengthen your programming chops, but earning a pleasing grade for your efforts is likely somewhere in the mix as well. Happily, these goals co-exist nicely! We have a sequence of lab exercises and assignments that guide and challenge you to build up your skills and we will reward you for working hard on them. The exams will follow up to let you demonstrate that growing mastery. You will be the best judge of how much a given course component contributes to your learning (and thus how much to emphasize it for its learning benefit), but we want to share the general scheme by which course grades are determined, so you can make informed choices that optimize for great outcomes in both.
Overview
Your overall course grade will be determined by the following percentage breakdown:
15% lab participation
35% homework assignments
12.5% midterm exam #1
12.5% midterm exam #2
25% final exam
Below is more detail on homework/lab breakdown. To receive a passing course grade, you must have passing work on both the coursework and exams. Restated, if you fail the exams, then you will fail the class in spite of any astounding performances on the assignments or vice versa.
You may replace (at most) one of your midterm scores with your score on the final exam. If you need to miss a midterm exam for any reason (illness, emergency, conflict with another activity, etc.), or you simply do not score as well on a midterm as you do on the final, this policy will apply. You are not required to formally notify me of your desire to apply the policy; my spreadsheet that calculates final grades will simply apply the formula most favorable to you. It is my goal that the class averages for the three exams be similar, but this is not guaranteed.
Grades will be assigned no stricter than the usual scale of 90% = A- or better, 80% = B- or better, etc. A more generous curve may be adopted at the instructors discretion, depending on exam difficulty or other factors.
Coursework
There will be weekly labs and regular programming assignments. Most of your learning will come from this hands-on work. Reading the text and listening in lecture only go so far, it is only by getting your hands on the keyboard and investing in exploring, observing, developing, and debugging that truly builds up your skills and accelerates your mastery. Your efforts in lab and assignments contribute 50% of your course grade.
You earn 25 points for each lab. During the quarter there will be N labs (8 or 9 depending on quarter schedule) and we expect participation in N-1 of them. You will earn full credit having missed one lab or can earn a nice 25-point bonus for participating in all labs.
The writeup for each assignment will indicate the number of functionality points available (typically 75-150) and how points will be apportioned in grading (re: sanity, comprehensive, robustness, stress, efficiency, and so on). Assignment code review is scored using buckets (--/-/ok/+ which roughly correspond to percentages 50/70/85/100, these style buckets usually contribute ~20% relative to functionality total). You can also earn a few bonus points for making an on-time submission. The details for a particular assignment may be a bit different, so refer to the writeup to be sure.
Your coursework percentage is the sum of lab and assignment scores divided by the total number of available points. Attending all labs or earning on-time points adds to the numerator but not the denominator, making them true bonus points. Mapping percentage to letter grade will use the ordinary scale:
>= 90% A-/A/A+
>= 80% B-/B/B+
>= 70% C-/C/C+
>= 60% D
< 60% Not passing
Exams
You may replace (at most) one of your midterm scores with your score on the final exam. If you need to miss a midterm exam for any reason (illness, emergency, conflict with another activity, etc.), or you simply do not score as well on a midterm as you do on the final, this policy will apply. You are not required to formally notify me of your desire to apply the policy; my spreadsheet that calculates final grades will simply apply the formula most favorable to you. It is my goal that the class averages for the three exams be similar, but this is not guaranteed.
Course grade
Median course grade is generally placed in neighborhood of B/B+ border. Coursework scoring is on absolute scale, no curve applied, and scores are very strong (median homework average trends in mid 90s, which is phenomenal!) Exams typically have lower absolute score. When you aggregate the two together, they produce a course grade median around the targeted B/B+. Extrapolating from raw numbers gives you a reasonable idea of where your course grade is headed. You can run some what-if analysis to try out different scenarios (what if my performance stays same/goes up/goes down?) to see how much of any effect possible changes would have.
For the CR/NC grading option, any course grade of C- or higher earns CR.
To pass the course, both the coursework and exam aggregates must each be passing work. Restated, if the composite of your exams is failing, then you will fail the class in spite of an astounding performance on coursework or vice versa. Passing performance on the coursework is a percentage >= 60% on the aggregate of all assignments/labs. Passing performance for the exams will be set at around -1.75 standard deviations below the class median of the composite score of the two exams.
Good learning and good grades
Labs
- Making the effort to consistently attend lab gives you great guided practice and earns a high A -- these are points to not miss out on!
- Don't let the fact that lab is graded on participation produce lackluster effort-- your investment in thoughtfully working the lab exercises and resolving your questions gives a great starting point for the assignments.
Assignments
- The first half or so of the assignment points are earned by passing sanity check. Sanity is a deliberately simple test, but passing it is an important milestone that demonstrates you have achieved a critical mass of success and grading will reward you with a solid chunk of points. Focus on passing sanity check can be a good way to drive your early progress.
- The remaining assignments points are scored through a battery of advanced tests with varied and comprehensive coverage. To pick up those points, you'll need to have an organized plan for implementing, testing, and debugging to ensure the full gamut of required features work as specified.
- Take care that your understanding keeps pace with your code. Attempting to manhandle the code without stopping to think things through is not recommended. You might eventually force the code into a working state and even earn a satisfying score, but if it's not paired with an authentic understanding how and why it works, it will be difficult for you to reproduce that success on the exams.
- The code review is much about qualitative feedback than quantitative. When you work out the numbers, you can see that it is not a huge factor in grading, but please don't conclude it is unimportant. Carefully reviewing and responding to our feedback is one of the best ways to grow your skills and prepare yourself to meet the later challenges in this course and beyond.
- Other pages to check out for further information and tactical advice: best practices for assignments, how assignments are graded, advice on testing.
Exams
- The mastery we are looking to assess with the exams isn't created by a night of cramming, it is built up throughout the quarter. Monitor your progress and use our post-task self check upon completing each lab/assignment to identify holes or confusion to be shored up before moving on.
- More advice about exams themselves.