presented at event SIGCSE07: The 38th ACM Technical Symposium on Computer Science Education Conference