The course will also have two exams: a midterm and a final.
Excellent documentation will address exactly the key issues, and degree of detail will be exactly appropriate.
Excellent code will be very well thought out and implemented. Excellent code will show mastery of new language features and idioms. On the rare larger assignments, Excellent code will show evidence of thorough attention to abstraction and modularity. Excellent code will be so simple that it obviously has no faults. Instructors will see no obvious ways to make excellent code shorter or simpler. Layout will be consistent and will make good use of scarce vertical space. Excellent code will be of such high quality that the course staff would be happy to maintain it.
Very good documentation will address most key issues, with a good amount of detail.
Very Good code will show correct, idiomatic use of new language features. On the rare larger assignments, Very Good code will show that some attention will have been paid to abstraction and modularity, although one or two opportunities may have been overlooked. Very Good code will contain well chosen names for functions and their parameters, so that it is easy to guess what functions do. Instructors may see one or two ways to make Very Good code shorter or simpler. Layout will be consistent and will make good use of scarce vertical space. Small errors may be evident from reading the code.
Good documentation will cover some key issues, but significant issues may have been overlooked or may have been covered with insufficient detail. Vague generalities may appear where precise specifics are expected.
In Good code, documentation may not be up to expectations: there may be too much or too little. Individual functions will be well organized and readable. Most names will be well chosen, but their may be some exceptions. On the rare larger assignments, opportunities for abstraction and modularity will probably have been overlooked. Good code will get the job done, but possibly in a way that could be shorter or simpler. Layout may be inconsistent in a few places. Errors may be evident from reading the code, but instructors will believe that code could be made correct with only modest changes.
Fair documentation will show evidence of effort, but the degree of coverage and detail will be significantly short of what the course staff believe is needed to foster success.
Fair code will contain significant faults. Instructors may not be able to figure out what all functions do. Layout may be inconsistent or waste scarce vertical space (e.g., every other line may be blank). Fair code may show evidence of a 'clone and modify' approach to program construction. Names may be poorly chosen. Possibly a Fair program could be replaced by code half its size. Given Fair code, instructors may believe major changes would be required to make the code correct, or instructors may be unable to understand why the code might be correct.
Poor documentation may fail to address key issues or may address them perfunctorily.
Poor code may be undocumented or inappropriately documented (e.g., overcommented). Poor code will often be lengthy out of all proportion to the problem being solved. Poor code may be laid out on the page in a way that is hard to read. Poor code often shows evidence of its history: extra copies of functions, unused logic left lying around, old code commented out, and so on. Poor code may be so complex that it has no obvious faults.
You will receive No Credit for work that you cannot explain.
No Credit will be received for work that is deemed to be plagiarized. Submitted code may be examined for potential plagiarism using automated heuristics. Plagiarism is a form of academic fraud, which is unacceptable. If academic fraud is suspected, appropriate steps will be taken. Submitting someone else's work as your own is likely to lead to suspension or expulsion.
Each exam consists of multiple problems; you may be expected to read and write code. Each problem is worth a certain number of points; the number depends on how hard I think the problem is and how long it takes to complete the problem. Most problems are in multiple parts of varying difficulty:
Every exam is unique, but on average, if you earn two-thirds of the available points, your grade will probably be Good or Very Good.
This weighting may be adjusted at the discretion of the instructor.
Participation 5% Homework assignments 60% Midterm exam 15% Final exam 20%
When determining final course grades, we consider the total picture including not only all of your work but any grading tendencies I have observed during the term. My goal is the final course grades should reflect a consistent standard, consistently applied.
In a typical class, a consistent record of Very Good homework, together with commensurate examination grades, will lead to a course grade in the A range. If a significant portion of work is rated Excellent, a grade of A+ is possible. Work rated Good corresponds to a wide range of passing grades centered roughly around B. Work rated Fair will lead to low but satisfactory course grades; if a significant fraction of your work is Poor, you can expect an unsatisfactory grade (D or F).