Wednesday, April 17, 2013

BIG Projects

I’ve been trying some different things this year. One experiment was to assign my C# students (this is a second programming course for most of them) to modify a large project. OK maybe not large by professional standards but definitely a lot larger than students are likely to create on their own. I gave them some starter kit projects (from Microsoft) and let them find some significant open source games on their own to start with. As an example one starter kit had something around 20 code files, four projects and a whole lot of image and other resource files. I asked the students to propose and then execute real modifications to the programs.

I had a couple of goals with this. One was to get them to demonstrate what we had covered in class so far. But I also wanted them to experience reading other people’s code, figure out how to navigate though complex code bases, and find out through experimentation how to use other concepts we had not yet covered. My hope was that this would make discussing those concepts more real and perhaps more important.

One unexpected side benefit for me was that though their questions I gained some understanding of what sort of things I should be covering in more depth. This was partly in terms of programming syntax but more importantly in design considerations. Having been programming for a long time (on average ore than twice as long as any of my students have been alive {gasp} it is easy to forget what is and is not obvious to beginners.

Over all I am really pleased with how this went. Students were able to work their way through the code. Most of them spent a lot more time reading code then I think they expected. I see that as good. They all managed to make improvements on their projects. They learned how objects can make their lives much easier. Sometimes I think they don’t get that from using standard GUI objects. Since they had to use user written classes whose only documentation (available to them anyway) was the code itself they were forced to figure it out. They also had a first hand view of design considerations for large OOP programs. This makes it more obvious why OOP is a good thing than a simple (more typical student created program) that might as well be written in old style code practices.

The next step is helping really understand creating and using classes they write themselves. We’re doing our second class/object related project now and they seem to be doing well with the concepts. And I’m thinking about the bigger projects we will be working on for the next month.

No comments: