And for the last day of 2010, some levity…

To end 2010 on a lighthearted note, Jun Auza at TechSource has posted his favorite 50 programming quotes of all time.  (I spotted this originally over at Confessions of a Science Librarian.)  There are some gems in the comments as well.  Here are some of my favorites from the list and comments:

35. “For a long time it puzzled me how something so expensive, so leading edge, could be so useless. And then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match.”
– Bill Bryson
31. “Good design adds value faster than it adds cost.”
– Thomas C. Gale
10. “People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones.”
– Donald Knuth
2. “Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
– Martin Golding
(from the comments) Creating computer software is always a demanding and painstaking process — an exercise in logic, clear expression, and almost fanatical attention to detail. It requires intelligence, dedication, and an enormous amount of hard work. However, a certain amount of unpredictable and often unrepeatable inspiration is what usually makes the difference between adequacy and excellence.
–(From the Unix “fortune” program.)
Happy new year, dear readers!  May your code always compile, your bugs be easily fixed, and your regular expressions parse correctly on the first try.  See you in 2011!

What role should homework play in the course grade, and how should we evaluate it?

The term is over at Carleton*, and my thoughts have already turned to next term.  This week I’ve been working on revising the syllabi for my two winter term courses.

Part of the syllabi development process, for me, involves figuring out how much each component of a course is worth in the final grade.  For me, the components are traditionally exams, final project (or exam), homeworks, and some form of class participation.

Figuring out where and how homework fits in to the mix has always been an area of discomfort for me.  This is partly because I go back and forth as to what role homework should play.  Should homework be mainly a chance to practice new skills and make mistakes (and thus not be evaluative)?  Or should homework be an evaluative component of the course, and if so, how much should it be weighted?

Ideally I believe in the first approach, but experience has shown me that students need some motivation to do the homework, and that one immediate form of motivation is having the homework graded.  And increasingly I’ve tried to move my classroom time towards more of this low-stakes practice (particularly in the lower-level courses I teach, like Intro), which leaves room for homework to fit more of the evaluative model.

Increasingly, though, I’ve become dissatisfied with the way I’ve been evaluating homeworks.  I used to weigh homework a lot more (40%), but now I tend to value tests and projects more heavily, so homework is typically about 30% of the grade.  This still gives students a big incentive to actually do the homework.  But I don’t think I’ve been properly incentivizing the students to do the homework well, or to try and stretch themselves on the homeworks.

Up until now, I’ve graded homeworks on the points system:  here are the required elements of the assignment, this element is worth X points, this one is worth Y points, etc.  Under this model, if you have all the required elements, then you get a perfect score.  But there’s nothing to distinguish between “you met the requirements” and “you exceeded the requirements and did a super bang-up job!”.

Now, you certainly could argue that meeting the requirements is sufficient for a homework assignment, and maybe you’d be right.  But I suspect that there is a subset of students, particularly in Intro but certainly in other courses, who would like to not only take on additional challenges, but be rewarded for taking these risks.  Certainly there are all sorts of formal and informal ways you could accomplish this, but the truth is once the term gets going and you’re at week 5 or 7 or 9….well, how much time can you realistically spend on this “extra” stuff?

So.  This is a long-winded preface to my point, which is this:  I’m thinking of moving to a different model to evaluate homeworks, away from a points system and to something more like a rubric.  In my vision, I’d have several different general categories, and then different levels of competencies defined within each category.  The categories would be the same for each assignment, and the levels of competencies would be converted to points (so, “needs work” would be worth 1 point while “good” would be worth 3 points, say).  Here’s a very rough example:

Category:  Code structure and clarity

  • Needs work:  Code contains little to no discernible structure.  Comments are few and/or nonexistent
  • Fair:  Code contains some structure, but some elements are clumsily or nonsequentially placed.  Code is commented, but comments are trivial and/or do not clarify the underlying intention of the coder.
  • Good:  Variables and functions are placed in logical places within the code (all functions together, all variables declared at appropriate times).  Code contains sufficient comments that clarify the intent of the coder.
  • Excellent:  The code is exceptionally easy to read and follow.  All variables and functions are descriptively named.  Code contains comments that are well-placed and that clearly indicate the intent of the coder without being excessive.

I can see some problems with this approach—for one, I’m still assigning points to everything; for another, I’d probably have to use a different rubric for, say, the first few assignments in Intro (it’s not fair to expect perfect structure off the bat!).  But I think it better signals my expectations:  here’s what you need to do to get an acceptable grade, but here’s what I think constitutes excellence in your demonstration of this particular concept.  It also, I think, gives students a better idea on their progress:  here’s what I see you doing well, and here are the areas where you need to improve your skills/conceptual understanding of the material.

I’ll be refining this over the next week or so to see if this can actually work, but I’m curious.  For those of you who are educators:  have you tried something similar to this, and if so, how did it work?  Do you see any obvious flaws or things I should watch out for?  If any students are reading this:  would this model be something that would better motivate you on homework assignments, or that would help you better figure out how you’re progressing in your learning?  How have you responded to rubrics in any classes you’ve taken that have used them?

* For anyone who’s about to say “oh, you’re so lucky!”:  Yes, but remember that you will be on the beach sipping margaritas while I’m hating my life giving midterms in May.  It all evens out in the end.