There is a great volunteer program where Microsoft engineers are paired with teachers in the local high schools to increase the availability of engineering curriculum for the students. Basically the teacher provides the teaching skills and the Microsoft employee provides the technical skills. When I heard about this, I thought it was a good place to introduce the Gadgeteer platform. It may be just me but I find building things that do stuff more engaging than writing ‘Hello, World’ on the screen of a computer. So I went to the folks who run the volunteer program and gave them my Gadgeteer pitch. The response was predictable - “If you think this is a great way to teach programming, are you willing to try it yourself?”. And so I did.
Last fall I started teaching one class a day at the high school near my house on the way in to work – Intro to Computer Science. The class is one semester long and I have recently finished the first semester and started in on the second. This seems like a good time to share my experiences in using Gadgeteer to teach programming in C# to novices.
I thought that C# and Visual Studio and Gadgeteer all up is a pretty big first step so I decided to start with a 4 week module using Scratch from MIT - a visual programming language – to introduce the basics of programming like variables and loops and conditional logic. Once we completed that, I introduced the Gadgeteer environment. We started with simple projects like controlling an LED with a potentiometer that reintroduced the programming elements that they learned in Scratch with C# syntax. The process culminated in the final project – a fully functional digital camera. Drawing inspiration from the fact that last year was the 100th anniversary of the brownie box camera, we laser cut them some camera boxes that looked like this picture.
Here are some pictures of the students building out their cameras
The functionality in the final products included using the touch screen for the user input, bringing up menus for saving pictures, saving them off to the SD card and managing those files. Here is a picture showing some of one student’s code. Not bad for a first programming class.
This semester, we are looking at augmenting this with a weather station/irrigation system. Next year we are hoping to have a robotics section.
Here are some comments from the students at the end of the first semester:
“I thought overall this semester was a success. It got really confusing sometimes but once you got it, it was awesome.”
“Overall it was a great learning experience for me and has helped me to want to get into the computer field more.”
“I would much rather this class be a year long instead of a semester.”
Here are some thoughts of my own.
Gadgeteer is engaging to those with even a modest interest in making things work. It was great to see the pride the students took in getting their cameras home to show them off.
Gadgeteer’s higher level libraries and especially the wizard allow you to jump start the students into being productive immediately on simple tasks.
However, once you get beyond fairly simple tasks, you are now learning C# and using Visual Studio. There is no alternative to learning C# semantics and Visual Studio rudiments which can be daunting for novices. It pays to generate small projects that each introduce a single new element such as branching statements of various types, events and methods, etc.
I agree with the last student comment that to really start to master programming in C# will take more than a semester. That leads you into a discussion of what the right objective for an introductory class is. By making it a semester, it allows you to bring in more kids who are not necessarily bound for a CS degree in college but for whom the exposure to how things are made and to ‘computational thinking’ is beneficial in other realms. Here is an interesting article on the value of computational thinking for non-programmers - http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf. So, the benefits of Gadgeteer are not just that it makes it easier to get programmers started making interesting things – it also allows a broader set to students to be exposed to a computational approach to problem solving.
The good news is that Gadgeteer is spreading. I am working with teachers in other school districts on incorporation the technology in their classrooms. It is making the class more exciting for some of the teachers as well as the students.