Additional profile information on Alfred Thompson at Google+
It never ceases to amaze me how many high school computer science teachers have trouble running developer software (IDEs, compilers, etc) because of computers and/or networks that are locked down too tightly. Either students can't get access to the command prompt or the IDE can't access the C drive or perhaps the network access to shares does not allow executables to run. I have even heard of school network administrators objecting outright to programming classes on the grounds that students might learn enough to "mess with" the network or local computers. Imagine that! Students might learn something!
I think at some point one has to trust students. At one school I taught at students were known to bring baseball bats to school. Yes those same tools of violence that are often used in muggings and even murders. But somehow we trusted students to use these weapons only for the sporting event they claimed to be bringing them to school for. Can't we have the same level of trust for using the network? If a student can learn to behave with a baseball bat why not a network account? The network is a tool for learning. We should be able to teach students to use the network responsibly.
I once bought some lockdown software for my computer lab. The students found ways around it and it became a game for them. Having the lockdown software actually made my job harder. I removed the software, announced serious consequences for making a computer difficult to use or making any other unnecessary changes. Vandalism when down dramatically. Students responded to the trust I gave them.
Setting us computers and networks so that teachers can teach and students can learn is the job of the system administrator. Classroom management and supervision is the teachers job. If a network administrator can't set up a network so that it can be used in a class maybe they are in the wrong job.
One last rant, when I was a CS department head and Technology Coordinator (always fun to wear a lot of hats) I felt that if a computer teacher could not handle full network administrator rights than I should probably not hire them. Now I realize that not everyone feels that someone needs those privileges or that level of expertise coming in to the job. I'd think one would want to teach them enough to have those privileges by the time they finished their first year of teaching if only to reduce the work load of the network admins. Or am I just way too extreme?
I am always on the look out for new and interesting projects to use in programming classes. Well I hope they are interesting at least. Students seem to prefer projects that are interesting, that some how relate to the real world and if they can make something else more clear so much the better. I came across an idea just the other day that I hope fits all of that.
Chris Higgins teachers math and computer science and on his blog I found his description of an exercise he ran with his math students. The standard UPC code that one finds on just about anything one can buy today has a check digit on them. The formula to calculate that check digit can also be used to verify if the code is valid or not. That is of course what check digits are all about after all. Mr. Higgins gave his algebra students the formula and asked them to validate the code on some UPC marks. I borrowed his formula below but you will want to visit his blog for the math played out with the example he shows.
The formula is as follows:
3 x (Sum of Odd Positions (i.e. 1st, 3rd, 5th,…digit)) + (Sum of Even Positions) = Z
You then take the number Z and subtract it from the next multiple of 10.
It occurred to me, perhaps because I hate doing arithmetic by hand, that this would make a couple of good programming exercises. Obviously the heart of the exercise is to add the individual digits together multiplying the sum of the odd position digits by three and then finding the difference between that result and the next multiple of 10. I can only imagine the different ways students will come up with to find the next multiple of ten. That's probably the hardest part of this problem other than potentially the input and separation of digits. It opens the door for explaining Modulo math of course but there are brut force methods and some students may very well opt for those.
Speaking of input there are several options depending on where in the course you are and how complicated you want to make things. The simplest way is to ask for each digit individually. The more complicated way is to take in the whole set of numbers as a string, break it up, convert the strings to digits and then do the math. The later allows you to work on string manipulation, conversion of strings to numbers (easier is Visual Basic than in C++ but not bad at all in C# either), and some time with parsing as a general topic.
In any case it is a great opportunity to talk about check digits, error detection and handling, and how math and computer science relate to things in the real world. Let me know if you use these ideas and how they go.