Demos: you are expected to demonstrate a detailed, working understanding of the code. As part of the demos, we will ask you to find and explain the specific parts of code that implement given functionality. We expect you to find these pieces of code quickly without having to shuffle through or read large parts of your code. In addition, we expect you to explain the general approach you took without referring to the code itself. You must demonstrate good working knowledge of the code to get credit. Please note that any partner can be asked about any part of the code. The point of having two-person groups is that two people can often figure out things and write code faster than one. But, if each partner understands and learns from only half the project, the point of giving the entire project is lost. There is a reason why each part of the project have been included. To summarize, you may hack only half the project but you are expected to understand all of it.
Each demo should be scheduled within one week of the project due date -- usually in the office hours of one of the TAs. It is your responsibility to schedule a demo.
Grading: projects will be graded as follows: 20% basic concepts, 20% structure and 60% correctness. We have structured the grading this way to encourage you to understand the basic concepts and to think through your solution before you start coding. Part of being a good engineer is coming up with simple designs and easy to understand code. Particularly for large software systems, like operating systems, which often live for a long long time. Some details:
We expect anyone who has made a reasonable effort on the project to do well on the code knowledge part of the evaluation. We expect anyone with correct code to do well on the basic concepts section. After all, it is rather difficult to write working code if you do not understand the basic concepts. A question you may be asking: could we place less emphasis on delivering a fully debugged version of the program? We believe that being able to apply the concepts you learn is crucial in this course, and we intend the grading standards to reflect this belief. For this courses, being able to apply concepts means being able to deliver working code. We recognize, however, that developing Nachos code may be difficult, and we will try to give reasonable partial credit for demonstrating an understanding of the concepts and an ability to write code that reflects that understanding even if the code is not completely correct. To do well in the class, however, your code must work and be free of conceptual bugs.