Grading Guidelines

The following applies to all programming classes. Non-programming classes will be given class specific guidelines.


General Grade Meanings

  • A 90 : Exceptional Student has risen above and beyond expectations in all areas and has mastered the course material.
  • B 89-80: Above Average Student has risen above expectations in most areas and has mastered most course material and is above average in all areas.
  • C 79-70: Average Student has completed all work as assigned and demonstrated competency in most areas and met the minimum expected standards.
  • D 69-60: Below Average Student has fallen below expectations in key areas, has not mastered key course material, and does not demonstrate an understanding of the basic material.
  • F 59 : Failure Student has failed to meet most of the minimum standards and has not developed an understanding of most of the material.

Relative Grading Guidelines for Programming

Programming and computer science in general are very challenging subjects for most students. Programming requires an above average time commitment compared to many other endeavors. Grading takes this into account and you are expected to rise to this challenge to learn to be a professional programmer.

Programming Specific Grade Meanings

All submissions are graded on a A-F, 25, 0 scale (on a 100 to 0 scale). Your grade is based on the overall quality of your submission, how well it conforms to the submission guidelines, how well it conforms to the instructions, etc. This means a submission is not graded by starting at 100 and “subtracting” points for mistakes, but rather based on overall quality, accuracy, good procedural and object oriented programming practice, and producing correct output. Grades will typically be 100, 95, 90, 85, etc. based on the following.

  • A 90 Your code is excellent, conforms exactly to instructions/specifications. Any problems are minor and would only require a small “tweak” to achieve 100.
  • B 89-80 Your code is above average, conforms by far to the majority of instructions/specifications. Problems are substantial, but easily fixable.
  • C 79-70 Your code is average, conforms to most instructions/specifications. Problems are substantial and would require some effort to correct.
  • D 69-60 Your code is below average, conforms to few instructions/specifications. Problems are substantial, and would likely require a complete rewrite of most of the code.
  • F 59-50 Your code is well below average, conforms to few or no instructions/specifications. Problems are very substantial and will require a majority or complete rewrite of the code.
  • 25 Substantial and almost complete failure to adhere to instructions/specifications. Code essentially “runs,” but is done mostly incorrectly and/or produces incorrect output.
  • 0 See below.

  • Notice that "fails to follow instructions/specifications" is the dividing line between C and D. Being a developer is very much about adhering to specifications. If you can't at least follow instructions and adhere to specifications, then you can't be professional programmer.

Grading Factors

Automatic Zero

All programming courses are taught with a similar philosophy to what you can expect on-the-job. On-the-job, there are many things which have nothing to do with code but will determine whether your code is accepted into the codebase. Similarly, these concepts will be mirrored in the academic environment and determine whether or not your code is accepted for grading. If any of the following requirements are violated, your code will not be accepted for grading, and you will receive an automatic zero. On-the-job, if you break these rules often enough, you will be fired, regardless of your code quality. In programming courses, if you break these rules often enough, and you will fail, regardless of your code quality. Remember, you are not learning simply to code, you are also learning to be a professional programmer, and that title carries with it a lot more than simply coding.

  • Failure to include a file comment header exactly as instructed.
  • Failure to document/comment functions and methods exactly as instructed.
  • Failure to produce output exactly as examples or specifications dictate.
  • More than two violations of any best practices. One or two violations will be down-graded, more than two is an automatic zero. Read about procedural programming best practices, object oriented best practices, and Web programming best practices.
  • Failure to submit properly as instructed. This includes all the following:
    • Submitting incorrect links. Use the web URL, not the SSH or .git link!
    • Submitting links incorrectly. Use the write submission option, not comments!
    • Any stray files in your repo. Triple check your repos!
    • Submitting zip files not as directed or with stray files/directories. Triple check your zip files!
  • Failure to use your repo properly. This means you MUST commit often, small, smart! If you fail to do so, your work will be rejected regardless of your code quality.
  • Language specific:
    • C/C++: Failure to compile without warning and/or error for any reason.
    • Python: Failure to interpret without warning and/or error for any reason.
    • Web programming: Failure to run without warning and/or error in the console for any reason. This includes things as simple as a missing favicon. Any warning or error is unacceptable.
Why automatic zero at all?

If you look at the list of automatic zero, you will see each item has two things in common, they are perfectly and easily avoidable, and they are critical to your success as a professional. For example, submitting the correct link for your assignment. In this requirement you are simply asked to copy/past a correct link, nothing more. Two clicks, and look at the link and make sure it is the correct one - that's it. This is a task you will be expected to perform as a professional, and failing to do it correctly could mean failure to deliver the correct product, and you will be terminated. More simply, it's a matter of basic competence. If you cannot perform two clicks and observe something this simple is correct, what are the odds you can program well? Zero. The link is not the point. The point is attention to detail and training the student in attention to detail. If you look at each item, that's all they are, simple attention to detail. If you do not have this basic level of attention, you cannot be a programmer, and your grade will reflect that.


General Grading Philosophy

Just because it works, does not mean you get a good grade. All of the following count (and will be explained during assignments): Modularity, Architecture, Style, Elegance, Good Practice, Robustness, and Accuracy. The simple statement, "it works" is worth nothing. The statement "it works and is programmed with good practice, elegance, good architecture, style, modularity, robustness, accuracy, and according to instructions" is worth EVERYTHING.

You programs must run in a command prompt environment on Linux (Python, C/C++) or in Chrome on Linux (web programming). Failure to run on Linux will be rejected. See FAQs for why.

You are not simply learning to write programs that "work." You are learning proper programming technique, proper architecture, good programming practice, and how to write maintainable code, as well as discipline, logic, and how to think like an engineer and a computer scientist.

An academic analogy: Imagine you are in a writing class. You are told to write a story about your last vacation, it has to be 2,000 words or more, and you are given specific guidelines on how to format your story and submit it (e.g. typed, double-spaced, 1" margins, etc.). Imagine you write that story, and you very accurately describe your vacation, but you have spelling errors, grammar errors, run-on sentences, inconsistent and poor formatting, you only wrote 800 words, and you submit it handwritten on the back of 270 bubble gum wrappers. Despite the fact you accurately described your vacation, your assignment will fail, and you should expect it to. You would not be able to credibly argue; "But I wrote about what I did on vacation!" Obviously the point of such an assignment in a writing class is not to explain your vacation, but rather to learn and demonstrate proper writing techniques and discipline.

That is how you need to think of learning to program. You are not learning programming. You are learning computer science, engineering, computational thinking, logic, and mental discipline. The programming itself is simply a demonstration of those concepts.

A real-world analogy: Suppose you order a ham sandwich at a restaurant and you want it with mustard on wheat bread. Then you get a ham sandwich with mayonnaise on white bread. When you complain and the waiter says, "Hey, it's a ham sandwich! You got what you ordered! I ate one just like that yesterday and it worked for me!" Would you accept that answer? Probably not. Why? Because the waiter did not adhere to your specifications. The fact that you got a version of a ham sandwich which "worked" for someone else is worthless to you because it's not the version you specified. It might be the most perfect, beautiful ham sandwich with mayonnaise on white bread in the Universe, but it's worth exactly ZERO to you because it did not adhere to your specifications.

It works" is worth nothing."It works and it's done right" is worth everything.