Monday, November 6, 2017

Open Ended Assignments

A few weeks ago, I got an email from a student complaining about how I structure assignments.  He was bothered by the fact that I require some decision making that is beyond the scope of the assignments.  He complained that he was spending more time trying to decide what to do for the assignments than he was actually doing them.  Now, I want to be clear: This student is very intelligent.  I teach upper division undergrad Computer Science courses.  I don't get students that are not very intelligent, because they would not have passed the prerequisites otherwise.  Sometimes I get students that struggle with creativity though.

Why do highly intelligent students struggle with creativity?  How can I get students in an upper division Computer Science course, which is part of a field where intelligence and creativity are both  critical, who struggle with the creativity element?  As with most problems I have discussed, the problem is not with the students.  The problem is with our education system.  We do a poor job of teaching creativity.  Yes, many schools are trying to focus on creativity more now.  They are adding art courses, music classes are starting to come back in some places, and there is more emphasis on artistic expression in things like English.  Creativity does not mean art though.  Computers can make art out of randomness or through complex algorithms, and computers are literally incapable of creativity.  They can make art that appears to be creative, but the creativity is artificial.  "Creative" classes in public school tend to be the same way.  Music classes are all about singing.  Singing is not terribly creative (it can be, but you won't find that below the college level outside of private lessons).  Kindergarten art tends to be creative, but it also tends to mostly be scribbling.  Much past kindergarten, art classes are generally highly structured, squeezing out creativity.  There are some reasons for this.  Gaining skill takes practice, and purely creative practice tends to miss important skills.  Structured assignments have value in improving skill, but when it is almost all structured assignments, creativity is lost.  Despite many attempts public schools do a poor job of encouraging creativity.  They prefer to focus heavily on technical skills and memorization over creativity.  And frankly, colleges are not much better.  There is more creativity in liberal arts courses, but when you get to more technical courses, there are a lot of structured assignments with very little creative flexibility.  Being required to think for themselves is something students are generally not used to, because creativity is marginalized in most of our education system.

Why do I encourage creativity?  In Computer Science, creativity is a critical skill.  CS is all about advanced problem solving.  Creativity is essential to effective problem solving.  Now, most of my students have decent basic problem solving skills.  Given a structured programming assignment, they can figure out how to solve the problem presented.  This is a great start.  So what happens when a boss says, "Hey, someone suggested using this new piece of software.  Can you experiment and compare it to what we are currently using?"  The first thing the employee has to do is devise an application that the software can be tested against.  If the software is a programming language, this is literal.  The employee will probably have to write a program twice, once for each language, and it is going to have to highlight the most important aspects of what the company will use the software for.  This is precisely the kind of creativity my open ended assignments require.  A more likely scenario is that an employee is put on the design team.  Solving a programming problem when you have a design document in front of you is totally different from creating the design document in the first place.  This kind of creativity cannot be learned from highly structured assignments.  It can only be learned with a potentially uncomfortable level of flexibility in assignments.

Here are some examples of assignments I have given:
  • Create a simple multi-threaded program in Python.  Keep track of issues you run into.
  • Create a multi-threaded C++11 program that uses mutual exclusion.
  • Write a program that demonstrates that you understand [some assembly language principle].
You don't need to understand what these mean to see that they are fairly open ended.  Compare this to assignments in other CS  classes, where students are provided with a design document or are even given specific input/output requirements.  Little creativity goes into writing a program where the inputs it should expect and the outputs required for each input are handed to you.  Sometimes there is reasonable value in doing it this way, but I find that more often it is better for everyone to tell students what you want to see them demonstrate and let them figure out how.

A major part of the reason I use open ended assignments so heavily is that I cannot design good assignments.  I am not suggesting I have a problem or am inferior to other teachers.  It is just a fact that teachers cannot design good assignments for 10 to 30 students.  There is no good assignment for that many students.  Public school curriculum tends to shoot for the lowest reasonable expectations.  This strategy allows all students with a reasonable understanding to get a good grade, but it cheats the more skilled and more advanced students out of additional opportunities for growth.  In addition to that, I can only design assignments that fit my experience, and I am prone to designing assignments that fit my own interests, because that is what I know the most about.  In short, I will end up training my students poorly in topics that are of personal interest if I design assignments completely on my own, and they will miss out on things that might interest them and that will likely be more relevant to them in the long run.  So instead, I leave the assignments open ended, so that my students can pick topics that interest them and are relevant to them.

How well does this work out?  Honestly, I think it works out great.  One fear of open ended assignments is that students will be lazy, doing the minimum possible, and learning the minimum possible.  This is a valid fear, but the evidence suggests it is not worth worrying about.  Those three assignments I listed above have resulted in some excellent work from students.  The first one could be done trivially.  A student who pays attention in class could complete the assignment in less than 10 minutes.  And I would give the student full credit, because it fulfills the requirements.  This semester not a single student did this!  Out of 16 students, not one took the easy path.  Most wrote programs designed to highlight the issues they ran into, which made for a very valuable discussion when they presented their work.  The second one they went even further!  Again, not a single student took the easy path.  Some students struggled.  They could have given up and done it the easy way, but they did not.  In my assembly language course, I have seen a broad range of strategies.  Some students divide the work into a lot of tiny programs, each demonstrating one thing.  Others write larger, more complex programs covering a range of things in one shot.  Some students take the easy route first, then they use the time they saved to write larger, more complex programs that don't technically pass off  anything, because they want to.  And honestly, it does not matter terribly if they do take the easy route, because most of the assignments are only intended to demonstrate one proficiency and then give students the opportunity to learn.  The place I expect them to show full ability is in the final project.  I love that most of my students are motivated to take advantage of the additional learning opportunities open ended assignments provide, but even if they don't, they are still proving that they can do the things I am teaching them to do.

One of the most valuable parts of open ended assignments is motivation.  If I give students a strictly defined assignment, they don't own it.  It was not their idea.  Odds are they are not terribly interested in the topic.  Their commitment to the assignment is only implicit in the fact that they chose to take the course.  When they design their own assignments around a small set of requirements though, it is their assignment.  In designing it, they are committing to it.  They own it.  Multiple times this semester I have had students present their work, when it is complete enough to get credit, but there are still things they don't like about it.  They go home after class and keep working on it, because they are not satisfied with their work.  They have already gotten full credit, but they are committed to the work, and they own the assignment, so they care that it is done right.  A few days later, I get an email, or they pull me aside in class, to show me what they have accomplished.  These students are not just designing the minimal assignment, and they are not just stopping once they have the grade.  They are choosing to work hard when they don't have to, because I am allowing and encouraging them create the assignments they want to do, instead of making them do assignments that I like.  Not only is this producing better work, but my students are also learning more, gaining more experience, and gaining a love for the topics of my courses.  They are also learning to learn on their own, as many choose to go beyond what I am teaching them.  Open ended assignments allow and encourage students to do work that they are motivated to do.  This results in better work overall, superior learning, and it allows more advanced students to do more challenging work and less advanced students to do work more consistent with their level of experience.

Open ended assignments can result in more grading work.  When all assignments are identical, it is easy to produce a rubric that exhaustively defines how various elements of the assignment will affect the grade.  It would take an absurdly complex rubric to cover all possibilities for an open ended assignment.  Instead, I use the proficiency based method I have discussed in the past.  Instead of expecting a perfect program from students, I distill the requirements down to only the proficiencies I want the students to demonstrate in that particular assignment.  Each assignment has one, two, or maybe three bullet points.  If a student can demonstrate that all of those bullet points have been satisfied, the assignment is given full credit.  Otherwise it gets no credit.  Multiple attempts at demonstrating proficiency are allowed, within reason, and each failure receives feedback.  This is how we learn in real life.  This system eliminates the burden of carefully reviewing every assignment for every students to count up a score.  I makes it much easier to deal with open ended assignments.  This semester, I am trying something new as well.  Instead of turning in work for me to grade, and instead of meeting with me one-on-one to demonstrate work, students present their work to the class.  This allows me to easily grade work during class time, and it also provides discussion material and examples to other students.  If a student makes a common mistake or uses a bad practice, I can (politely and without judgement) point it out to the class and explain how it might be improved upon.  This allows all students to learn from each student's mistakes.  It also gives students the opportunity to provide other students with feedback, and it allows less advanced students to learn from the work of more advanced students.  In addition to all of this, it reduces the grading burden, by putting most of the grading in class.  All of this makes open ended assignments have a far more reasonable grading burden, despite the additional complexity it adds.  (It also happens to give students some experience with code reviews, which are commonly used in larger companies in industry, as a quality assurance strategy.  In artistic courses, it would teach students to give and take constructive criticism better.)

Open ended assignments help to teach creativity by providing more opportunity and encouragement to be creative.  Many students will likely struggle with it initially, because they are used to being spoon fed assignments, without any need to exercise creativity.  Creativity cannot be taught using normal teaching techniques.  It is developed through practice.  Open ended assignments provide this practice.