Teaching Programming with Microsoft .NET Gadgeteer – A Case Study
Making a physical device that responds to you or the environment is compelling to most people – for many, more compelling than writing a program that displays a form on a computer screen (unless that form is the login of a game of course). The challenge with teaching ‘physical computing’ is that it has required some level of skill in programming, electronics, and fabrication (soldering, breadboarding,…) before you can do a first trivial project. The investment/reward calculation at that point is all wrong for many students. Gadgeteer turns that around by making it possible to build compelling projects immediately with simple high level programming skills. Let’s look at what happened when we took .NET Gadgeteer into a public high school.
The .NET Gadgeteer kit is made up of a mainboard with a 32 bit processor (about as powerful as a PC from the mid to late 1980s). It comes with a very complete complement of peripheral sensors, actuators, radios, cameras, storage devices, LEDs, audio devices, and much more. It is enough to build security systems, cameras, MP3 players, and many other projects. All of the modules can be simply plugged in to the main board and used without any electronics knowledge. The applications are programmed in Visual Studio using C#.
In February, I spent two days introducing students from 5-6 classes to .NET Gadgeteer as a way to see how successful they could be with creating devices. Most of these students had no exposure to programming before. None had any exposure to electronics. The afternoon before, I asked one of the students what he would like to build. His first suggestion was an MP3 player – certainly possible but not an ideal first project when we only have 2 days. He then asked how you could control an LED. That became our first project. The following day, we presented the application to the students and went over the concepts of writing and deploying the application in just a few minutes before having the students start typing in the program. Here is what happened next:
Almost all the students were able to get the program working in the first hour - many in much less time.
The students were able to develop an understanding of event based programming and a simple if-else statement which was all that the program entailed.
Some students then went on to do variations on the original project. In the process, we were able to introduce a deeper understanding of how the development environment worked and more programming concepts seamlessly as they came across a need. The projects they built included a digital camera, a motion sensing security camera, a thermostat with adjustable alarms and more. The record went to a team that put together 4 and a half such projects in their first hour.
In self-reporting on their experience almost all students reported some significant new insight and many reported an interest in continuing.
I left the classroom very excited about the potential for interesting students in technology and teaching them programming in an exciting and organic way. When I looked for some programming resources to send to the instructor to help him move this forward with the students, what I found were only standard programming texts with a chapter on computer theory followed by a chapter on conditional logics and so on. This is not the way anyone I know first learned to program. We all got something working and then figured out how to get something else working and learned programming in the process – then we read the programming text. The .NET Gadgeteer can be a tool for making that iterative learning process more accessible and fun for the students and the instructors.
Many thanks to Chris Connors and Pembroke High School (Pembroke Massachusetts) for giving me the opportunity to work with the students. I hope they can continue the projects that the students started.