Grading Policy

This is primarily a programming course, thus you must demonstrate that you have completed some programming during the semester in order to have a chance of receiving a passing grade. While your grade is based primarily on how well you do on several programming assignments, part of the grade is also based on written work that may be assigned during the semester and on class participation (specifically presentations, class discussions, and useful posts on the course bulletin board).

There are two kinds of programming assignment: group and mastery assignments. Mastery assignments are solo projects, on which you must work by yourself according to the course collaboration policy. These mastery assignments are designed to ensure that that everyone who completes the course is "certified" as capable of writing and understanding reasonably complex programs. As such, you must complete at least one such assignment in order to receive a passing grade for the course.

All non-mastery assignments are group projects. Small group assignments will be done by two students, medium by three or four students, and large by four or five students. Your partner will be chosen randomly for the small group assignments and based on your recommendations for the other group assignments. For each group assignment, one project artifact must be handed in.

Often group assignments will have several smaller deliverables that must be submitted electronically before the final deadline. Each submission should show "real effort and achievement" towards the final goal. These submissions will be graded on a one, two, three scale. One means that up to one point may be subtracted from your final project grade, two means a half-point may be subtracted, three means nothing may be substracted. Thus, if you get less than a two on any of these intermediate deliverables, you cannot earn more than a B+ on the assignment.

Note, only one summary grade will be given for each group assignment. Thus your grade depends not only on your programming skills but on your ability to work in a group. More credit will be given to programs that have minimal, but collaborative, functionality than to projects that have one piece working perfectly, but do not represent the integrated efforts of the group. In addition to the group's submission, you must submit an individual project analysis within three days after handing in the project artifact. This analysis will not affect your group grade, but may impact your personal grade. For example, if your group project fails, but you write a good, concrete, and detailed analysis of the project you may receive a D on the assignment, but an A on the analysis.

A final project will be a large group project that will be assigned instead of a final exam. This final project must be completed and handed in before the course's scheduled exam time. Your final projects will be presented in an open session, attended by your classmates, graduate students, and other faculty members during the scheduled exam period. Additionally, you must meet with the professor as a group to demo your project and discuss its details. Plan on this demo taking approximately an hour --- everyone in the group must attend this demo.

There may be some optional assignments whose completion is required for an A+. The percentages given below assume each of the projects above is assigned. If, during the semester, a project is not assigned, they may be updated to reflect their relative weight in the course. In short, these percentages are given as guidelines -- not fixed weights.

Class participation, written work   5%
Mastery projects 25%
Small group projects 10%
Medium group projects 25%
Large group project 20%
Exams, quizzes 15%

Grading Criteria

In general, to earn an A on any assignment you must go beyond what is expected. Meeting all requirements is worth only a B+. Meeting all requirements superbly can earn an A-. Doing more than is required, or doing astonishingly good work, is the only way to earn an A.

Note that several things contribute to the grade awarded for an assignment, not just the program's functionality. Each part will be graded on a scale of 1-5; roughly 1 is a D, 2 is a C, 3 is a B, 4 is an A-, 5 is an A. Grades of 3+, 4+, etc. are possible. Grades mean roughly the following:

1 poor, little indication of effort
2 ok, on track, but needs real work
3 good, functional, some room for improvement
4 very good, complete
5 outstanding

Several areas will be judged in giving a summary grade for each assignment.

criteria weight
pre- and post-project work
design documents, prototypes, in-class discussion, evaluations
10%
coding
comments, good use of programming language, lack of redundant code, consistency in style, small functions, well packaged
10%
design
loose coupling, high cohesion, appropriate encapsulation and patterns, good use of classes, inheritance when appropriate
20%
completeness
meets specification, performs task as delineated in assignment
20%
robustness
program handles errors appropriately, does not crash
20%
project specific
different projects test different concepts (e.g., speed, user interface, threads, etc.)
10%
project artifact
complete, readable, understandable, stylish, and substantial
10%
extra
goes above and beyond specification
up to +20%
Your score in each category will be added together to arrive at the summary score for the project.

Note that your program's design and robustness each count for as much as completeness. This implies that a solid, working sub-set of the complete program, with a design that clearly supports easily adding the remaining functionality, will receive a higher grade than a completely functional program that was hacked together at the last minute and was not obviously tested. Unlike in other Computer Science courses where the program's functionality is primary, this course focuses on program design. In fact, the project requirements are usually chosen to highlight a specific set of design ideas. Simply implementing all of the requirements without evidence you have thought about how to design them for flexibility will result in a low overall grade. On the other hand, small bugs in some of the requirements will be tolerated if the design is extremely well done.

No Late Submissions

This class moves at a demanding pace and getting even a few days behind can be hard to recover from since, like a domino effect, each tardiness tends to propagate through the following assignments. Late work also makes extra work for the staff since we try to get things graded as soon as possible. Thus all projects must be turned in on time. If, for some reason, you (or your group) cannot meet a specific deadline you should hand in your best effort by the deadline. You should then to make sure to write a detailed project analysis, including what you would have done if you had more time and how you will avoid such problems in the future.

This may seem overly harsh, but it is important that you do not get behind in this course, its pace is too fast. The secret to successfully surviving this course is to start early and work steadily; it is not possible to cram or skim in Computer Science courses. If you are having trouble, be sure to see one of the course staff as far before the due date as possible. Do not give up, ask for help.

Comments?