I had two classes this past quarter taught by a professor with a very different grading system. He used a program he wrote called the "code critic" to have us submit exercises into his grading queue. Only working code could be submitted and we could only have three assignments in the queue at once. He would then use his program to return the code with criticism added on any lines not to his liking and mark the assignment as "Not done," "Almost done," or "Done." If he didn't mark it done, we had to fix the code in response to criticism. These criticisms were very picky, even sometimes dealing with the naming of functions and variables.
At the end of the quarter we were graded on how many assignments we were completed, and how much we grew as programmers. If our assignments at the end of the quarter did not require any resubmissions, this was reflected in our grade.
I think this method was an extremely effective alternative to traditional grading. I learned more about programming and style in both C++ and Lisp in these two classes than I have in any other classes to date.
Ugh. Asking a CS major to adhere to naming conventions is like asking an art major to color within the lines. It has very little to do with computing.
Also, many students fail to connect what they learn in one class to what they learn in another. Thus, we often see students with high grades in algorithms, data structures, and software engineering who nevertheless hack solutions in an operating systems class with total disregard for data structures, algorithms, and the structure of the software.
That is to say pass fail grading of programs, grading should be similar to an English class how you express it is just as important as what you express.