It seems that some of my best teaching moments come via serendipity, from times when I have a goal in mind but don’t know exactly how I want to get students from here to there so I just try something out… and it works. A few years ago, I started teaching a new class filled with teachers wanting to learn how to use the Moodle CMS. I set it up so that each one would have their own “teacher” class in which to apply what they were learning (hands-on, ya know). One of the biggest problems with this sort of thing however, is getting enough time to give meaningful feedback on a regular basis to a large and active group. In week 2, I had an epiphany. I decided to keep the already planned chat groups set up throughout the course as a “learning circle”. In this way, in a very targeted manner, students would be setting up activities for a “live” audience and getting feedback weekly from actual users. Guess what? It worked so well that it became a part of future classes! The students loved the interaction and an unintended benefit was that they got to see how other people approached the same challenges. Every time I teach that class now I am amazed at the flow of ideas that comes from what is now an integral part of the course.
This semester, I am teaching a new course again, this time in a programming language. I wanted the midterm to be more than just a “take the test” sort of thing. I wanted it to be a hands-on integration of the concepts they have learned to this point. I brainstormed a project scenario with someone and came up with a plausible project that would incorporate all of the skills learned to date. Initially, the project was split into two phases: planning (TOE, flow chart, UI design) and coding. Upon submission of the planning doc, I sent out a running sample program to help prompt those who needed a little help visualizing the requirements. They had the rest of the week to code and submit the application. The second week, I decided to open up a peer review forum. They uploaded the .exe of their application to a class directory. The assignment was to come up with a set of test data to run through the applications with a goal of tripping it up and finding bugs that the developer might have missed. Each student had nine other “users” running their application (with many eyes, all bugs are shallow) and they caught, and solved, lots of problems, getting a chance to refine their program before submitting for final grading. In an attempt to “close the loop”, in the third week, I had them make their source code available so they could see how others did what they did. There is much to be learned from deconstructing a program. Taking my cues from the success of the midterm, I am asking students to define requirements and submit scenario ideas for the final projects. With the first project, they had an opportunity to be the programmer and user. In this last project, they will also get a chance to play the role of “client”. I think that will give them a well-rounded experience of the whole programming process.
It’s activities like this, the ones that are seemingly thrown together at the last minute (but have really been percolating in the back of my mind for quite a while) that end up working the best. I often reflect on why that is the case… my experience, creativity, curiosity, and a random assortment of variables all add up to make an interesting experience for students. I don’t know what it is… but I know it is working well when I can set up the learning environment and step back to let students construct knowledge with each other. That’s the part I love the most!
