Previous topic

Tim’s Open Source Projects

Next topic

Vox Audio File Conversion

This Page

Open Source Software and Class Programming Assignments

Several of my software projects are in one way or another related to programming assignments that I gave to my students. However, these were not simple projects. [1] Simple programs have their place in teaching students how to program, but nothing builds their confidence like having written some part of a program that is ..., well, non-trivial.

I enjoy programming, and I’ve never shied away from letting others exam my code. I often frame my larger programming assignments in a way that requires me to do far more programming than the students do. I often give quite a bit of code as a starting point to the assignment, and I always complete the assignment myself well before it is due. Thus, I am able to demonstrate the correct running of the program and I’m also able to give better assistance when they struggle with the assignment. So, because of my personal efforts that often go far beyond just teaching the class, I am left with some nice programs that I can make available as open–source software [2] and integrate those efforts into my scholarship activities.

Ideally, we would like to give the students a problem description and have them do it all themselves. However, that is not always practical. Sometimes the students lack the confidence to know how to even get started on a larger project. Overwhelming the students can also slow the pace of the class resulting in a reduction of how much material is covered in the class. I have two teaching methods that I like to use to build students up to where they are able to attempt serious programming projects.

  1. My favorite programming assignment scheme is progressive assignments, where over the course of 2 to 4 assignments, the students pick up the components they need to ultimately have a fairly large program, which they wrote. This is what I did with the Graphical Black Jack Game project. That project ending up being more more difficult than either I or the students anticipated, but I’m also quite certain that several students advanced considerably in their programming skills as they worked on it.
  2. My second favorite technique is to give the students a working program and ask them to add a new feature to it. [3] This has worked fairly well in my Network Programming on-line class. In this class, we cover several different Network Programming topics, thus it is not practical to use progressive assignments. The Multi-party Chat Client and Server and Graphical Weather Forecast Viewer projects both came from the Network Programming class.

Footnotes

[1]I have plenty of simple programs too, they are not listed here.
[2]Because students may be still working on the assignment, I am sometimes delayed on when I can release some programs as open–source, or I may not be able to release the versions of my programs that have the assignment completed.
[3]I prefer this approach by quite a bit over taking a program and striping out part of the code and asking the students to fill in the missing code. I’ve done that on a few occasions when I could not think a feature for them to add and progressive assignments were not possible. From a student learning perspective, I am usuall not pleased with the results when I ask students to fill in the missing code. When students add a feature, it gives them ownership of a corner of the overall program.