Computer Science cheating has been a discussion lately. Not just in the NY Times article I referenced the other day (Cheating In Computer Science Class) but on Facebook, on Twitter, and other social media. One sort of rebuttal to the concern over cheating was a blog post - Computer science students should learn to cheat, not be punished for it - that also got a lot of attention. I see industry people nodding their heads in agreement. The problem is that the rebuttal author doesn’t seem to really understand the issue. There are some common misconceptions that I think need clarification.
Misconception: The goal of a school project is a working program.
That is what the goal is in industry. Make it work to spec and make the user happy. That is not the goal, or at least not the main goal, in a school project. The goal in a school project is to demonstrate what a student knows. Not what their friend or their parent knows but what they know. It is a diagnostic tool for the teacher to see how much learning is taking place. An imperfect tool to be sure but all we have are imperfect tools.
We also want them to practice and use what we are teaching. Cut and paste is usually a poor substituted for figuring out how to solve a problem and properly use the tools that are being taught. One learns more by doing than by simple copy operations.
Misconception: Students who copy code have to understand it to use it.
Oh if only that were true. Any teacher will tell you that students use code acquired from others without understanding it all the time. If a student finds a snippet of code, understands it, and uses it in a project most teachers would see that as a win. The student learned something. Wonderful! We’re happy. Using code without understanding it helps no one.
But it is not just snippets that are involved in cheating. Nothing so remotely borderline as partial borrowed code. Sometimes a student will hand in a full and complete program that they found on the Internet. And they will do it without understanding a bit of it. Who does that help? No one. Remember that in school the goal is gaining knowledge not just handing in something that works.
Misconception: Teaches don't want students searching the Internet for help
The internet is a wonderful learning resource. I know teachers who explicitly recommend sites like Stack Overflow to students and encourage them to look there for help. Some of us actually recommend reading the documentation online and even using sample code. As long as the student understands what they are using. Teaching is not just about covering the limited material but helping students learn how to learn. We’re thrilled when students use outside resources to go beyond the scope of the class. But we do want students to understand what they are doing.
Misconception: Programming for school and for industry should be the same
No. In industry the goal is a working program and in school the goal is learning. Industry expects employees to know things. School assumes they don’t and strives to teach things. The goals are different so the methods must be different.
I have heard the argument that schools should teach the things that industry needs using the tools that industry uses. It’s the old trade school mentality. And that works great for trade schools which serve a valuable purpose. Computer science education has to be more than just the tools of the hour. It has to be on concepts that last for a career. And that process is different from short term goals.
Sure using industry tools can be a good thing. And using things like Git and other source code repository/source code control tools is a good thing. Guess what? Many schools do teach those things. In fact arguably more CS departments teach more of the professional skills, especially soft skills, than many outside of education realize.
Misconception: Computer Science and Software Engineering are the same thing
Computer Science is more theoretical and software engineering is arguably more practical. One should not criticize one for not being the other. At the high school level we are not trying to create professional software developers any more than we are trying to create professional physicists or biologists. Rather we are trying to give students a conceptual basis for understanding the world in which they live. Links to more reading below.
- Software Engineering / Computer Science Difference David Janzen at CalPoly
- Software Engineering vs. Computer Science at Software Engineer Insider
I’ll conclude with one more point which I think may be the most important one. We need computer science professionals with integrity. We need professionals who are honest, who are ethical, and who are dependable. Educators care about cheating in its various forms because we value those traits as much as we value the technical knowledge students gain in our classrooms and labs. If a student cheats in school will they not also cheat the companies they later work for? I think so. And that should concern industry people. It should concern them a lot.