The following applies to all programming classes. Non-programming classes will be given class specific guidelines.
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.
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.
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.
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.