Go back to Course Home Page

Collaboration and Academic integrity in Introductory CSci Classes

“Can I have a copy of your program?” If you have taken another computing class, you might have been asked this by another student. (The answer is no) You yourself might have asked another student. If you get a computer-related job you might be asked this by another programmer. When is it OK to share computer code with others and when is it forbidden? Knowing and following good professional conduct is an important part of learning about computer programming. Companies that employ computer programmers do not want programmers who do not know or do not follow good ethical practices in their work; programming misconduct can lead to serious consequences for companies, including financial penalties, legal penalties, and loss of reputation.

The purpose of this document is to help explain academic integrity issues as they relate to introductory computer science classes (in general) and this course (in particular). While you likely have a general understanding of these issues, how they translate into the computer science field can sometimes be counter-intuitive. This document would not be possible without the original document it is based on by teachers in the Department of Computer Science, and a similar statement used at Northwestern Missouri State University, both of which served as a guide in the preparation of this document. Sections of both documents appear in this one with minor edits.

What is academic integrity?

You are acting with academic integrity to the extent that you do your academic work honestly and ethically. In particular, you are acting with academic integrity if you are:

  • Taking full credit for your own work, and giving full credit to others who have helped you, or whose work you have incorporated into your own
  • Representing your own work honestly and accurately
  • Cooperating with other students (on academic exercises) only where specifically authorized

Behaving with academic integrity is about more than just grades.

  • It’s about having pride in yourself and your own work and abilities.
  • It’s about recognizing this course as an educational experience and seeking to learn from each new challenge.
  • Finally, academic integrity is about acknowledging that after graduation your work will matter, and people will depend on you to be able to do your job professionally and competently.

How do we define academic dishonesty?

Generally speaking, we define academic dishonesty as cheating or lying of any kind. This includes misrepresenting one’s own work, taking credit for the work of others without crediting them, or where not appropriate for an assignment, and the fabrication of information. Intentionally or knowingly helping another to commit an act of academic dishonesty is also considered an act of academic dishonesty.

Examples of dishonest behavior that would not be allowed in this course:

  • Taking the exam for someone else (or having someone else take the exam for you)
  • Forging or falsely obtaining notes from medical professionals to delay a test
  • Copying someone’s answers during a Quiz
  • Using online cheating websites such as chegg and course hero to obtain solutions to active assignments
  • Using LLM (Large Language Models) such as ChatGPT (or similar AI models) to create or debug your code (unless explicity instructed)
  • Using online question and answer websites such as stack overflow to find solutions to meaningful parts of a programming assignment (for example, if the assignment is to write a sorting algorithm, asking for or finding a reference implementation of that algorithm on stack overflow)
  • Copying any amount of code from any source for your homework (or allowing anyone to copy any amount of code from your homework solution)
  • Comparing code with another student before the homework is due
  • Having another student debug an assignment for you
  • Working so closely with another person that you essentially solve the problem collaboratively, even if you write your answers separately
  • As a rule of thumb - if you are looking at code that could be turned in as part of an assignment, you’ve gone too far

All of these acts have the dual effect of gaining an advantage over others in the class, and cheating yourself and/or other out of the learning goals of an activity. Everything we do in this class is intended to help you learn, attempting to subvert this learning goal only serves to hurt your own education.

How does this change for different activities?

Computer programming is an interesting case for academic integrity. Sometimes computer professionals collaborate, and sometimes they must work individually. Similarly, in this class some assignments are to be done individually, with only teaching staff and the textbook serving to support you in completing the assignment. Other activities are designed with varying degrees of collaboration in mind. Collaboration can be a powerful tool to help you learn in this class, but it is important that you know where it is, and is not, appropriate:

  • In class activities of any sort - generally these allow for any amount of collaboration, and any reasonable resource.
  • Reading questions - these are generally assumed to be done individually. At least your first attempt at an answer should be purely your own. After answering once on your own and completing the reading it is reasonable to discuss these in a study group setting and then re-visit the answers.
  • Labs - In this class labs serve as graded homework assignments done in a partner setting. It is assumed that you will be working closely (two people working on one solution) with your lab partner of choice for this lab. Working with a partner in this way can often allow your group to work through problems that one worker would find difficult. When working in lab you should be careful about your interactions with other groups, while discussing the concepts of the problem and getting help to understand what is being asked is reasonable, you should not seek any assistance in how to actually complete the lab. Having another lab group help you understand the assignment itself is reasonable, but they should not be helping you solve that assignment in any way. It is not reasonable to collaborate with anyone who is not your lab partner, or to go out of your way to get help from other lab groups on a lab assignment. In or out of the lab, we would prefer if you first turn to course staff for assistance. In lab, this should be readily available.
  • Quizzes and exams - these should represent your sole work, and must be done with the limited resources specified in the syllabus and course rule documents.
  • Course Projects - These should represent your sole work, with only the assistance of course staff. Collaboration is neither expected nor tolerated on Projects.

It is particularly important to understand the rules about the lab assignments and projects. The goal of this class is NOT to teach you the syntax of python and java. Instead we seek to teach you ways of thinking about algorithms, object oriented programming, and data structure design. All of these broadly fall under the envelope of computational thinking. You only learn the skills of computation thinking and problem solving by actually thinking computationally, and solving problems with computer programming. Therefore the act of solving the problem is what we care about, not the solution itself. So, while you are welcome to discuss problems in general, (I.E. understand the problem’s intent and which parts of the course might be involved) you must work out your own solutions: any in-person or online discussion should stop before you start discussing or designing a solution. Note this means not only writing the “final answer,” but also key preliminary intermediate steps such as problem analysis, solution design, and debugging.

How does AI fit into this?

AI Tools such as ChatGPT, or GitHub Copilot are helpful tools for the modern programmer. So it might feel natural to turn to these when working in this class – after all, it’s just another tool. So why are these tools frowned upon in intro CSci classes? When are they reasonable to use, and when should you not use them?

We’re still working as a community to understand the role of AI tools, both in the professional setting and the academic setting. In fast-moving situations like this it’s all the more important to be thoughtful about what your goals and values are when using new tools. In our case, this means remembering that our goal here is ultimately to build our own abilities, not to produce code as fast as possible. As such, AI tools are generally not allowed in our assignments. It’s not that these are not valuable tools for the professional coder it’s simply that they are not valuable tools for the learning programmer. Unfortunately, the tools of today are not well suited to the needs of the learner, and often end up making it hard to act with academic integrity.

Some guidelines for students who do wish to explore AI tools in an ethical way as they learn:

  • You are generally allowed to use these tools to support your learning but not your coding.
    • You are allowed to use these tools as part of general studying. For example, it would be reasonable to ask an AI tool to help you understand inheritance, or provide examples of java generics syntax to help you learn about the language itself.
    • These tools can sometimes be useful in providing unit tests data when the problem is complicated in nature. For example, if you had an assignment that required a dictionary mapping dozens of products to their costs, you may find GPT a useful tool to generate data in that format.
    • Be careful when assuming the information an AI tool provides is the best answer, or even a correct answer. All current AI tools suffer from Hallucination and these tools can easily provide overly complicated solutions to the relatively simple problems we face in our class.
      • For this reason, I do not recommend AIs as a learning tool. Ultimately it’s generally safer to use other resources to understand the material of this course.
  • Be cautious as you use AI tools.
    • Many find it easy to accidentally stray from general (and allowed) discussion into not-allowed topics, or to lose track of information you might need to provide adequate citation.
    • For example, it might be natural to go from “give me examples of dictionaries in python” to “how can I find the largest value in a dictionary” – but if your assignment includes finding the largest or smallest value in a dictionary, this second request would be too close to asking the tool to solve the problem for you. Instead consider a “learning” focused prompt like: “can you show me how to loop over dictionaries in python” which would help you ultimately solve the problem for yourself.
  • Cite the AI similarly the same way you would another person or a website.
    • Ultimately the rules for academic integrity are no different here. If you do not create an idea you should not claim ownership over it.
    • If any part of an assignment comes from an AI you should cite it (in a comment) and ideally indicate what prompt you used to generate the content. Not doing so implies you’re taking credit for ideas you did not make.
    • This includes debugging, brainstorming and problem solving, and code documentation / code-style. All of these are intrinsically part of the programming task, and they are skills you are here to build. If you do ask an AI to help with any of these tasks you should cite its contribution to your work to avoid claiming ownership over that work.

What resources are available to help me in this course?

The web, other textbooks, etc. can be fantastic resources, but also potential sources of solutions (which, as discussed, are not to be referenced for any purpose), so it is important we are all on the same page as to what is permitted. Using the web or other outside resources to supplement what is presented in class or in the textbook is great and encouraged. For example, you are encouraged to look for additional material on such general topics as programming, problem solving techniques, good programming style, etc. However, when it comes to doing assignments you should not search for items such as “programs for selection sort” (where selection sort might be a homework problem topic). This crosses the line from learning about general material to solving the specific problem. (And if you inadvertently stumble across such material when doing general searching you should avoid looking at it or using it.) As another example, suppose that in a homework problem you are having trouble getting your program to work and get an error you don’t understand; then by all means search for an explanation of the error. However, do not use online forums to see if and how other programmers have designed and implemented a solution. You need to design and implement your own solution — this is the point of this class.

Examples you can always use (without restriction) are:

  • Any examples presented in lecture and posted on the class website.
  • Any work you and your partner did in lab on the lab problems (even if you are now working with a different lab partner)
  • Any code from the textbook.

In such cases, when you reuse code it is good professional practice to give credit to its source, e.g., “This code is from the Spring 2020 CSci 1913 website” or “This code is a slightly modified version of code from the course textbook, found in section …”.

Study groups, likewise, are allowed and encouraged. The only caution here is to make sure the study group does not stray into working on homework assignments. So long as you only discuss general ideas and topics, and issues about the programming language itself, this is entirely reasonable. Your study group can even practice working on programming problems, so long as they are not current assignments.

Finally, if you are ever struggling with course material please reach out to course staff. It is not our job to judge you or blame you for not knowing something. It is our job to help you learn. Often we can help guide you in your own process of solving problems, debugging code, and designing solutions to programming problems. Assistance gained from course staff over email or at office hours is always considered reasonable even if it would be unreasonable to get the same help from another source. Unfortunately, We cannot help you if you do not let us know you need help If you are struggling please turn to us for assistance, and do so before you become desperate on a homework. Turning to outside resources does not help you learn, instead it only makes it harder to keep up with the next assignment or the next class.

What do we expect from you, the student

  • know general university rules and norms on what is and is not appropriate academic conduct;
  • know specific class rules on what is and is not appropriate conduct;
  • exercise good judgment and responsible behavior;
  • avoid actions that are clearly academic misconduct;
  • avoid actions that, while they may fall into the “gray area” of what is or is not misconduct, nonetheless demonstrate poor judgment or questionable behavior;
  • ask the course instructor or TAs for clarifications when unsure if something is permitted or not.
  • reach out to the course staff if you are struggling in this course so we can try to help you learn

The last two of these are particularly important. Part of good academic conduct is asking when the rules are unclear or when you are uncertain about them. I would rather spend an hour discussing with a student over these policies before a breach of conduct, than spend the same hour explaining it after-the-fact. Likewise, I would rather spend an hour working with a student reviewing a course topic than have to call that student into the office and report them to the office for community standards.

An example “gray area” case of note: publicly posting solutions, either online, or in a dorm-room where another student may see it. While on the surface it may not appear that you have breached any particular rules, it is possible that another student will copy from this solution. If this happens the instructional staff will not be able to know how the copying occurred, and both students typically end up in trouble.

Other resources about academic integrity

The office of community standards - the university body that oversees cases of academic dishonesty. This website is particularly useful in understanding what happens if you are accused of academic dishonesty – much of this process after the initial discovery and discussion happens outside of this course, and your professor, and instead falls under the control of this office. In particular this office has sole discretion over whether the incident stays on your permanent transcript, and other academic sanctions such as suspension and expulsion.

The official UMN Board of Regents Student Code of Conduct Policy Statement - This document is a little hard to read, but is the most official source of information there is on the subject.

Email your professor - I’m not kidding with this. If anything is unclear I really do want to hear this (so I can improve this document) and discuss it with you. I do not want our first discussion to happen because you misunderstood these policies and acted without integrity.