Posted by: Roger King
code fragments, computer science education, open source, property rights, software tools
I received a comment on my last blog entry, where I talked about the fact that it’s hard for students to steal material for their 3D animation projects because I poke around on the Internet pretty aggressively myself, looking for tutorials, as well as example models and scenes. The comment I was sent pointed out two things. First, professional programmers make use of programs and pieces of code they find on the Web. Second, there is a fine line between making legitimate use of content from other sources and essentially copying someone else’s work. The critical thing, he pointed out, is that you need to reference the work of anyone who influenced your work. This includes artistic things, like 3D models, and not just text.
General knowledge: finding it and referencing it.
Certainly, this is true and faculty members know this. Across all academic disciplines, faculty members are well aware that they need to be Web-savvy and give assignments that take into account the ease with which relevant material can often be found. Our attitude shouldn’t always be that everything a student writes should be completely original. How do you find raw material out there? How do you vet it? How do you acknowledge information that does not appear in any traditional archival or news publication? We know all this.
Software components: what’s different?
But the situation with computing is somewhat different and I think very intriguing.
As a professor of computer science, I can tell you that we need to spend less time teaching students how to write raw code and more time teaching students how to cobble systems together from existing, and often complex components. This is without even considering property rights or the ethical responsibility of referencing the resources you have used. It’s a raw technical fact of life. Programming simply isn’t a write-it-from-scratch thing anymore. We send students out there often with very little knowledge of the vast world of existing software development tools and code. They have to work in this world, period. We can’t ignore it when we train them.
Widespread, anonymous collaboration.
There are countless applications out there that would not exist today because they would have been technically intractable to built from scratch or not cost effective to build. So we do all need to work together, even if it is anonymously.
In fact, “novel” code that does not build on what already exists is often more than just too expensive. It is often unmaintainable tehnically.
But should our gold standard for students simply be getting it done, pulling together a system that works properly and will have a long shelf-life? As long as property rights are not being violated, I say yes. I’m not a lawyer, and to be honest, a lot of us who teach computing don’t actually know what is legit and what isn’t. People put surprisingly valuable pieces of code on the Web quite voluntarily. Maybe it’s not theirs to give away. Maybe it belongs to their employer, I don’t know. The stuff that ends up in official open source software development tools seems to be tracked most of the time. We know where it comes from. Right?
I don’t actually know. I’ve never questioned anything that Eclipse has installed for me or PostgreSQL has installed.
There’s also a feeling out there, a very widespread feeling, that the notion of give and take has changed. We don’t blindly protect tools and code. We know that we’re all better off if we share aggressively. We also know that we can make money indirectly. If you are the acknowledged developer of a highly popular software tool, you can often capitalize on this in a big way.
There are people who give things away and then regret it.
And once it’s out there, it’s usually impossible to get it back.
What should we be telling students about all of this?