Saturday, June 13, 2009

Real Life Is An Open Book Test

The other day a regular reader of my primary high school computer science 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?

 

Friday, June 05, 2009

It Ain’t Heavy It’s My Software

The trend these days seems to be moving applications to the web browser. The ideas behind that are having access anywhere – from any location, from any computer, and at any time. Sounds great. But I resist. I like my so-called heavy applications. OH I understand the benefits of light applications that run from the web browser. I also understand the limitations of computer based heavy applications – operating systems dependence and lack of availability when one is away from their “home” computer. And there is installation costs. I get all that. 

I do happily use Outlook Web Access and Hotmail for email  when I need to for example. But I’d still rather use real Outlook or another “real” email application. I use twitter from the web interface from time to time but the power and flexibility of TweetDeck or other special twitter applications wins me over when I have a choice.

I think this is as much a result of my perception that special purpose tools in most areas give one better results than general purpose tools. Sure a Swiss Army knife will let you do a lot of things with one tool. But as well as separate screw drivers, scissors, knifes, etc? No not even close. You can use one hammer for everything you need to hit but a wrecking hammer will not do as good a job putting in nails as a framing hammer. And getting a table saw to do what a scroll saw can do is going to lead to frustration. Likewise a web based email client will do a lot – and they are much improved in recent years – but a dedicated application on your computer can do more, faster, easier, and still let you do a lot when you are not connected to the Internet.

Which brings me to the next piece. I didn’t grow up with ubiquitous network access. And I still find myself in places where I can’t get connected easily. So the idea of only being able to use an application when connected to the Internet scares me a little. Well maybe concerns me would be a better way to phrase it.

I do like cloud computing to some extent. The idea that I can place data on the cloud and get it from anywhere is great. The idea that there are cloud applications that I can use and access when I am connected is great. But I still what to work locally. I still want some control over my data. That control piece may actually be what concerns me the most. I have always taken responsibility for backing up my own data. Sure I have worked on commercial systems where formal and regular backups were taken. But I have always also done my own backups. I still have copies of programs from college – over 30 years ago. I trust me. not that I haven’t ever lost anything but nothing I haven’t been pretty sure I didn’t need anymore. Well mostly. :-)

Do people – thinking students really – think about and discuss the pros and cons of heavy apps against light apps? I’m not sure too many programming courses really teach light apps. most web-based development I see done in high schools and early years in university are heavy apps. That concerns me a bit. I guess some web development courses cover simple web applications with some database access. That’s great as far as it goes. But I’m not sure it teachers the complexity of building the sort of web applications that many in industry are moving to. While it is true that I am not a huge fan of that sort of thing I recognize that for the near future they are the future. Students need to know about creating them. At the very least they should be exposed to the discussion and presented with the issues to think about. The sooner that happens the sooner they can build applications that old school people like me will be comfortable using.

Or maybe they’ll see the pros and cons differently and the pendulum will swing back to locally run applications. Stranger things have happened.