It shouldn't be necessary to mention this in an advanced class,
but the issue has come up in the past so I feel that I should state my
policies clearly up front.
Dishonest behaviors, including but not limited to plagiarism, copying
of another student's work/code (or providing your own to another),
group consultation on individual projects or work, etc., will not be
tolerated. Specific types of cheating include, but are not limited
to:
- Copying code from another person.
- Copying code from the Internet or another source.
- Reading someone's paper program listings (e.g., discarded in the
trash).
- Allowing another person to copy your code.
- Leaving your class files world readable. (!)
- Copying/plagiarizing text from another person, the Internet, a
published work, etc.
- Discussing program design with another person.
- Discussing proofs or mathematical methods with another person.
- Attempting to steal another person's code (e.g., by cracking,
password sniffing, etc.)
- Failing to document the use of external Java libraries (i.e.,
libraries other than those included with the JDK).
- Violating copyright on external libraries.
- Violations of the University policy on acceptable computer use
(included in this document by reference from
http://www.unm.edu/~ubppm/ubppmanual/2500.htm).
For the group project, substitute ``group'' for ``person'' above.
If you have any question of whether a behavior is acceptable,
please ask me about it before you do it.
My general feeling is that being caught cheating should be more
painful than not having done the assignment at all. Therefore, I will
generally at least assign a negative penalty equal to the full
value of the assignment if I discover someone cheating on an
assignment (though I reserve the right to assess a greater penalty,
including outright failure from the entire course). I.e., if an
assignment is worth 10% of the final grade, the individual would
receive not zero credit for the assignment, but -10%. In
cases where multiple students were involved, all students aware of the
activity will be punished. And, of course, if you're clever enough
not to get caught, then you're clever enough not to need to cheat in
the first place.
I do not issue ``Withdraw-Pass'' to students I've found cheating. If
you're caught cheating, you either complete the course, or take a
``Withdraw-Fail''.
That said, this is an upper-division course, you're all adults,
and design is a fundamentally much more social activity than people
usually give it credit for. So there are aspects of the class
in which you're encouraged to talk to one another:
- The reading assignments are intended to be group discussion
work. I encourage (and even require) you to discuss them
among yourselves before coming to class. The corresponding report
is also a group assignment, and should include the names of everyone
who participated. (Please, if you didn't participate in developing
critique, don't put your name on it.)
- The group project is, obviously, group work - you're
expected to share design, code, work, etc. with the other
members of your group.
- You may discuss the problems but not the
solutions. E.g., you can discuss the project
specification, what's being asked for, etc., but not the
design of a project, specific data flows, etc.
- You may discuss coding style, grammar, spelling, etc., with
other people.
- You may discuss algorithms/data structures in general (e.g.,
``Help me understand how partition works in
QuickSort()'', but not the role of such things in
specific projects.
- You may discuss how the tools (e.g., emacs,
javac, CVS, etc.) work, including limited
amounts of debugging assistance (``What the heck does
javac mean when it says `Foo.java:192:
non-static method foo() cannot be referenced from a static
context'?'')
Exams are, of course, completely individual work.
Most importantly, if you have a question about whether some specific
collaboration is permissible, please ask me before you do it.
Terran Lane
2004-01-21