We present an overview of the nature of academic dishonesty with respect to computer science coursework. We discuss the efficacy of various policies for collaboration with regard to student education, and we consider a number of strategies for mitigating dishonest behaviour on computer science coursework by addressing some common causes. Computer science coursework is somewhat unique, in that there often exist ideal solutions for problems, and work may be shared and copied with very little effort. We discuss the idiosyncratic nature of how collaboration, collusion and plagiarism are defined and perceived by students, instructors and administration. After considering some of the common reasons for dishonest behaviour among students, we look at some methods that have been suggested for mitigating them. Finally, we propose several ideas for improving computer science courses in this context. We suggest emphasizing the intended learning outcomes of each assignment, providing tutorial sessions to facilitate acceptable collaboration, delivering quizzes related to assignment content after each assignment is submitted, and clarifying the boundary between collaboration and collusion in the context of each course. While this discussion is directed at the computer science community, much may apply to other disciplines as well, particularly those with a similar nature such as engineering, other sciences, or mathematics.