The difficulty comes in "working together" with someone, or asking for assistance. I expect students to help one another in understanding the course material, in understanding what is expected in an assignment, and so forth. But there is a limit, because learning requires grappling with the hard work of actually doing a problem, whether a calculation, a proof, a design, or a program. It could even be as simple as going through the sequence of mouse clicks to accomplish something in a Windows or Mac application. If someone else does it for you, with you just watching, you learn very little.
You may learn from one another, but you may not "collaborate" to the extent that one person is getting the answer from another. There are gray areas where one of these merges with the other; a few scenarios are discussed below. Finding that dividing line can be subtle, but the best distinction is whether you could ask me that same question and get an answer, or whether you could "collaborate" in the same way with me.
If you're very confused about something, and you need a lot of help, do not ask a classmate. Ask me or, if the course has one, the teaching assistant. It is our responsibility to try to help you, but it is your responsibility to seek help from us when you need it.
One consequence of this is that you can't wait to the last minute to work on something, because if you do, you may not be able to ask a question in time. Unless you are very certain that you know how to do something, you should start it early. I think some students end up cheating just because of an inability to accept the consequences of procrastination.
If I feel that a student has clearly stepped over the line on a homework or programming assignment, but that the violation is not sufficient to warrant bringing the matter to the attention of the Academic Dean, I will give that student a -100 on the assignment. Note that this is a severe penalty, much worse than not doing the assignment. Therefore, if, for whatever reason, you think you cannot do an assignment, it is far better and safer to either turn in nothing and get a zero, or turn in something and get partial credit, than to copy someone else's work and get -100. If you feel you have been wrongly penalized, you may appeal to the department chair.
Finally, you should realize that the single most valuable thing that you lose when you cheat is your reputation. I assume that Wellesley students are honest, and I treat them as such. If I know you are a cheater, you lose any such respect. Furthermore, I will not ever recommend a cheater for any scholarship, internship, job, honor or award, and that includes any letters of recommendation. I have to protect Wellesley's reputation and my own.
Suppose you're having trouble doing a hyperlink. You first re-read the lab book that describes how to do it, but you're still confused. So, you ask a friend for help. First, she shows you, using her own document or a fresh document, the steps that she went through. You try the same thing in your document, but you still can't get it to work. So, you ask your friend again, and she comes over and shows you how to do the table of contents for your document. You save the document and turn it in.
In this scenario, everything is fine as long as your friend is showing you using her own document. The moment she starts working with your document, you are both cheating, because you are not doing your work. Remember, every keystroke and mouse click must be your own.
A friend is having trouble with her assignment. You're too busy to go to the computer lab with her and lead her through it, so you lend her your diskette so that she can look at how you did it. She opens your file, changes your data to hers, and saves it onto her disk.
This scenario goes wrong in several places. Don't lend your work to others. If you don't have time to teach your friend, she will have to learn from someone else. Secondly, your friend is wrong for copy/editing your work, instead of doing her own. If she's caught, you will both be found guilty of cheating, since you were wrong to lend her your work, and she was wrong to borrow it.
Suppose the homework consists of a number of calculations. You meet with a couple of friends and work through the problems, discussing how the formulas apply and how the calculations are done. You work jointly on each of the problems, learning from one another. At the end, you each write up the results, turning in separate assignments, with the names of your friends at the top of the assignment.
In my class, this scenario is okay. (You should not assume that this is okay in other classes, including other Computer Science classes.) I have found that this is a helpful way to learn. However, and I can't stress this enough, it's important that every student be participating and learning at each step. Also, each person must write up the results by herself, preferably later, so that what she turns in is her own work. It is okay, even encouraged, to turn in answers that are different from your friends', if you change your mind or disagree. Here are several variations that are bad:
This scenario is not acceptable, because students are not doing and turning in their own work.
Again, she is not doing her own work. Both of you would be guilty of cheating in this scenario.
This is just too many people. An acceptable group is small: two or three people. Four is pushing it (you must check with me before working in a group that large), and then to compare results with another group is too much.
The problem here is that misconceptions tend to propagate. A student who is popular or persuasive may convince half the class of an incorrect viewpoint, which then has to be unlearned. One student with the correct answer can hold her own against one or two friends with the wrong answer, but may be dissuaded when facing a horde. Remember, it's okay to work with others and decide to answer the questions differently: it's better to be independent and wrong than a mindless sheep who is given the right answer. Better yet, sometimes you'll be independent and right.
Two students working on the same assignment, and they decide to start writing their ideas and concepts on the board. Next they write pseudocode for the problem on the board which begins to resemble the actual source code of a solution. They both begin to type in this code-like solution. This is cheating.
Student A is having trouble with a concept that is an integral part of the programming assignment. She seeks help from Student B. Student B shows Student A her code to solve the problem. Student A is able to use this code as her own. This is cheating.
Two students are sitting next to each other in the lab, and they are looking at each other's program to get ideas and better understanding. This is not collaboration; it's cheating.
Legal collaboration is when students discuss the concepts and high-level design. For example, consider the following scenarios.
As in programming scenario (1), the students decide to share their ideas and concepts on the board. However, they stop short of writing code. This is acceptable.
As in programming scenario (2), student A seeks help from student B, but this time B reviews the concepts related to the problem in order to help A. This is acceptable. (Indeed, it's very kind and helpful.) If A is still having trouble she should seek the help of the TA or the professor.