Grading Standards for CSC 2/454

Most programming assignments will have two due dates.  The first will be for a trivial “pre-assignment” whose purpose is to force you to start thinking about things.  The second will be the main due date.  I will also be requiring completion, on a roughly weekly basis, of on-line quizzes based on the “Check Your Understanding” exercises that appear every ten pages or so in the textbook.  Finally, there will be an in-class midterm exam and a cumulative final during exam week.  Several past exams (with suggested answers) are available on-line as study aids. 

End-of-semester numeric scores will be weighted roughly as follows: 

Letter grades will be assigned by subjectively identifying brackets in the numeric scores.  There is no pre-determined grade distribution.  In particular, I have no objection to giving all high grades (or all low grades) if it seems appropriate.  As noted on the policies page, extra credit will be available on many of the assignments and the exams; it you do enough, it may move you up a grade.  Eight students (out of 110) benefitted from this in 2020; ten (out of 136) in 2021. 

Programming assignments will be handed in electronically using the script ~cs254/bin/TURN_IN on the CSUG network.  You should run the script in a directory containing: 

  1. A copy of (all files of) your source code. 
  2. A listing of the output of your code on your own test data, and on any official test data provided by the TAs.  You may find the script program useful for capturing output; read the man page. 
  3. A README.txt or README.pdf file (see below). 

Be sure to remember the no late assignments policy.  If you don’t manage to complete the assignment on time, turn in what you have.  I will be very generous with partial credit.  If you don’t turn in anything by the due date, you will get a zero. 

Be sure to check Blackboard frequently for any additional instructions from the TAs or instructor. 

We will strive to grade assignments within one week of the due date, at which point grades will be available to you via Blackboard.  Additional information may be sent to your official University email account.  Please note that I calculate grades in my own separate spreadsheet.  Scores and statistics for individual assignments should be correct in Blackboard, but the whole-course calculated average will not.  If you have any questions about a project grade, please consult the undergrad TA who evaluated it or, if you need further help, the Grad TA.  For questions about exams, or if the Grad TA is unable to resolve an issue, come see me.

README files

Your README file for each assignment should contain whatever information you think is necessary for a typical user to run your program and for a software maintainer (or grader!) to understand (and evaluate) your code.  Much of this information may be included on the original assignment web page; you only have to fill in the parts we didn’t provide for you already.  Information for the prospective user includes details on calling conventions, input and output data formats, limitations, bugs, and special features.  Explain both the negative aspects of your program (limitations, known bugs) and the positive aspects (extensions, special features).  If you don’t include the former, we will assume you didn’t realize the limitations were there.  If you don’t include the latter, you may not get extra credit.  For the person who has to understand the insides of your code, you may need to describe your choice of modularization (abstractions), data structures, and algorithms.  Be sure to explain anything you did that is likely to be different from what other students may have done, and justify any design decisions for which the rationale isn’t immediately clear.  Your write-up should be clearly written, using full sentences and paragraphs.  This writeup need not necessarily be long, but it is important.  All writeups must be in plain text (README.txt), markdown (, or PDF (README.pdf) format.  Other formats (e.g., Word, LibreOffice, or postscript) will not be accepted. 

Coding expectations

For each programming project, points will be divided roughly 80/20 between the code itself and the external documentation (README file).  A more detailed rubric will be posted for each assignment.  In general, your code should implement everything that was required in the assignment.  It should produce the right output given normal, expected inputs, and some sort of reasonable response to unexpected inputs.  Unless otherwise instructed, and as long as it does not severely compromise programming style, you are expected to use the most efficient data structures and algorithms.  Stylistically, your code should have well designed abstraction boundaries and variable names; declarations for all constants; and a judicious number of helpful comments.  To paraphrase Don Knuth, instead of thinking of programming as explaining to the computer what you want it to do, think of programming as explaining to the TAs what you want the computer to do. 

You are encouraged to share ideas with fellow students, but only one person or team can get credit for actual code (see the course rules for academic honesty). 

Last Change:  03 October 2022 / Michael Scott's email address