views:

120

answers:

4

I'm going to be teaching a scripting and tool development class to a group of 3D animators. In amongst teaching them coding fundamentals, I plan to have them pick a repetitive task they must perform frequently and have them iteratively develop a tool to automate or simplify this task as an assignment.

What I'd like to know are some criteria that can be used for grading programming assignments such as these? Some of the criteria I came up with were:

Does It Work - Does the tool perform it's task, does it break on certain cases, etc.

Code Cleanliness - Has the code been properly indented, is their coding style consistent, etc.

Documentation - Are functions well documented, are any "clever" bits of code commented, is it under-commented or over-commented, etc.

Efficiency - Has the script been optimized to run quickly, has a lot of unnecessary optimization been done on a task that isn't run very often, etc. (This one I'm not going to put to much emphasis on since these aren't professionally developed tools usually the tool working is more important than speed)

Are there any others?

+7  A: 

Clarity. It's important that their code be comprehensible to anyone competent who should chance to open the file.

Kalium
should be the most important one. I hate it when people write 30 lines of code for something that could be done in 10.
ggfan
@ggfan, yes but it's equally bad when someone tries to be too clever and write 30 lines of code in 1. This one falls somewhere between Cleanliness and Documentation.
Soviut
Clarity is good, for it imples maintainability, and learning to write maintainable code is extremely importent.
LeonixSolutions
Agreed! It's also good to remember that you're only half as bright as you think you are. It's harder to debug code than to write it. If it takes all your mind to write a certain piece of code, it's probably going to be impossible to debug. Clean up and make it right!
Simon
+2  A: 

Does the way the student went about the exercise indicate that they have paid attention to what was taught in class?

You are right to look beyond "does it work"; look for general approach and "craftsmanship".

Do you teach the importance of testing? Look for test cases.

If they had freedom to choose their tools, did they choose wisely?

(no plagarism, obviously)

LeonixSolutions
They generally won't have freedom to choose their tools since Maya has a limited set of modules, they'll probably just use the code editor I provide them and they'll be working at the Maya command line most of the time.
Soviut
Strongly agree about tests. In fact I would have them write the tests first and hand them in (And grade those) before doing the project.
HLGEM
LeonixSolutions
+1  A: 

Are the invariants documented? Are there any unit tests?

Is the entire script broken up into modules or other units of about the right size? (The inability to break up codes of over 100 lines is a bugbear of beginning programmers.)

Norman Ramsey
I agree with marking clean modularity, however, I'm not even going to bother teaching them about functions or classes immediately, so that kind of criteria would come much later.
Soviut
A: 

Tell Them how it is going to work in terms of file locations etc. Provide one set of data for Them to test ón and another for testing their solutions.

Thorbjørn Ravn Andersen