The other day a regular reader of this blog (thanks Avi Burstein) sent me a link to an article titled Academic source code dust-up symptom of CS education ills. The short version is that a college student posted the source code from a school project to the Internet and his professor objected strongly. The professor was concerned that future students would be able to find the code on the Internet and turn it in as their own. The student believes that his right of expression allows him to post his work. Eventually an academic judicial affairs office sided with the student. Kyle Brady the student involved tells his version of the story on his blog. I don’t expect this to be the last of this sort of conflict though. And that is a shame.
I’ve been programming for school, for fun and to make my living for about 37 years know. And while I have learned a great deal from course work and from “book learning” I have learned even more from reading the code other people have written. In fact many textbooks include sample code. Certainly the books I have written have included sample code. But professional developers spend a lot of time reading other people’s code. Formally, informally and in any way you can imagine. They also look to reuse code. And they keep documentation around. Even today when much of what one wants to learn professional software developers often have shelves filled with books. Believe it or not they actually reference them too!
I don’t remember when I first heard someone say “real life is an open book test” but it really stopped me on my feet one day. It also influenced me as a teacher. While I often expected students to memorize some things and gave my share of closed book tests and quizzes I always expected students to take advantage of external resources for projects. That included the textbooks of course and the help files and programming language documentation. It also includes asking for help – though one does have to be careful about explaining the difference between getting help and getting someone else to do the work. And yes, even looking things up on the Internet. That’s how professionals work.
There are people, often great educators whom I respect, that want to put more limits on students. For example they want to avoid things like Intellisense (IDE features that show programmers options for function/method calls and parameters) because if means they don’t have to memorize as many of those things. I disagree because I see greater value in the experimentation and “accidental learning” that provides. But that is ok I think.
Stealing (or borrowing) code from the Internet is a real and justifiable concern for many people teaching computer science (well programming anyway). I would argue that faculty should know their students programming styles well enough to spot clear cheating just as English teachers can pick it up in student essays. Sure that is not very practical in sections of 300 but I don’t approve of sections that are too large for the instructor to know their students. (So there :-P ) IF you are going to have sections of 300 you are begging for cheating to occur so you should not whine when it happens. That doesn’t mean I approve of cheating – I don’t. But you already heard me write disapprovingly of overly large sections and cheating is one reason for that.
One thing I used to do with semester end projects was to have one on one mini-code reviews with each student. They would do a demo and I would test a few things. Then we would talk about the code. I came prepared and if there was code that seemed to advanced for the student or too different from their normal work I asked them to explain it. If a student can explain code in a way that makes it clear to me that they know how it works, can debug it, can modify it and can make it fit their particular application why should I care if they wrote it from a blank slate or took some ideas and code snippets from someone else? It would be like penalizing a student in shop class because they borrowed a saw.
School is about learning. It is not teaching students to work with one hand tied behind their back. It is about helping to understand what they read (or find on the Internet) not making them reinvent the wheel. I’ve blogged before that I think it is important to have computer science students read more code. IF they find student code on the Internet and learn something from that I think that is great. I suspect they’ll learn how not to do things more often that how to do things but that is valuable learning too. In the mean time there are a great many code samples on the Internet. Microsoft posts lots of code that answers the question “How do I?” (some links below) There are many other sites that do the same thing. Students will find sample code. But they will learn for it and that is what we’re all after isn’t it?
great post sir i could not agree with you more. we as students, would be fools not to take advantage of all the help and resources we get from the internet. I am an iraqi war vet 28 years old. i got a late start on college( I STARTED COLLEGE AT 25) and i attend an online school (thomas edison state college NJ) and learning programing without a teacher and face to face interaction is not easy. i am a computer science major and have found that my only true help is the internet. and by using it i have met people like u to help me (twitter). thanks for for being there for students. were all here on the net to help each other out and learn. i wrote this on my windows moble phone(touch pro) thumb board after seeing ur post on twitter. i am constantly on the net learning and writing. once again thanks for thinking outside the box.
Great info. We need education for our future's sake.
I'd be inclined to tell the professor off for setting the same exercise year on year. The argument being made for not making solutions public seems to be that it stops the professor from reusing material, which is a bit silly. You don't need to use the internet to pass information around, and so old versions of the program may well have been circulating for a while anyway.
I set similar exercises each year but I make sure that they are different each time and we have a marking process where the student has to explain the code that they have written.
BTW, the Microsoft TechNet Flash Feed thing that pops up on your blog pages (and seems to be impossible to remove) really gets in the way of adding comments.
I can't agree more. In my first scripting languages class the professor decided that the tests would be "open internet". Granted the questions were harder, and usually included material not found in the coursework. The upside to this was that it not only taught you how to learn by example from source or tutorials found on the internet, but how to successfully seek out the information you need on demand. In all honesty when I can look up the answer to a problem while sitting on a train, sitting in my house, or anywhere else in the world, why should we meaninglessly regurgitate information that we've read in a textbook. That information, combined with some new concept learned during the exam provides so much more value in my opinion than just spitting back what we've read in books or seen in a lecturer's slide show.
When I give my students a programming assignment I tell them to not to reinvent the wheel, but to know how the wheel works and how to put their tire on it. If I knew the perfect, unique solution to every programming assignment or problem then they had better listen to my every word and take it as gospel. I don't and they don't. I want them to find solutions on the internet. Rarely do they find the exact code they need so they have to understand what they found and modify it to suit their problem. The tricky part for me is giving them problems that are unique enough that they cannot do a direct cut and paste. So far no problem. From my somewhat limited experience in the real world of commercial programming almost everything is cut and paste. A pro does not have time to write everything from scratch.
I don't see this as being so cut and dry as many of you see it. For a software engineering course or something later in a student's coursework, I absolutely agree that nothing should be off-limits and projects should be open enough that posting code would be encouraged. That being said, it's really hard to design compelling, well-scoped and organized assignments for intro/data structures & algorithms. I wish we could trust students not to look at code that's identical to what they're doing but we really can't. It's unfortunate that professor and student weren't able to work things out amicably.
(I wrote my own blog post on the subject - http://www.helenemartin.com/?p=184)