Computer science requires more creativity than our education system would have you believe. In honor of that creativity, we really ought to be giving students more chances to create original work and build portfolios out of it.
Table of Contents
The Problem With Traditional Computer Science Education
In most creative disciplines, such as art, architecture, and music, students create as they learn. These creations can be used to develop a portfolio, which they can leverage when applying for jobs or establishing their reputation as creatives.
Interestingly, in a field like computer science (and STEM more broadly), we don’t often have the same mindset. Typically, students are given well-structured problems to solve, and their work usually builds toward something like an exam or some other well-structured assessment.
Unfortunately, it’s usually not until students are wrapping up their degrees that they get a chance to create something on their own. This is most common in capstone-style courses, where students get a chance to build something from scratch. Alternatively, students might take more specific courses, like game design or real-time rendering, where being creative is part of the work.
Of course, this is just not the norm in other disciplines. For instance, compare the way we teach computer science students to the way chefs learn in culinary school. While their students certainly spend time working on small well-structured tasks (e.g., cutting onions, plating, etc.), it would be strange if they were never asked to cook a full meal from scratch. Being able to integrate a variety of skills is a fundamental part of mastery.
Meanwhile, computer science students are stuck solving the same problems that their peers solved just a semester ago. These types of exercises force professors to put strong rules in place around academic integrity. For example, in a course I teach right now, we have a policy that strictly forbids students from sharing their solutions to assignments on public repositories like GitHub:
You may not give or show to anyone a physical or electronic copy of any part of a solution to an assignment that could help them in completing the assignment. This includes unwittingly providing someone else with your solution to an assignment by posting your solution to a publicly accessible web site such as pastebin, github, bitbucket, coursehero, etc.
I personally find this to be a huge disservice to our students because they can’t share their work with anyone, lest they run the risk of punishment. A consequence of this reality is that there’s really no incentive for them to create anything good aside from their grade. And once assignments become more about the grade than about the learning, students stop prioritizing the learning and instead opt for the bare minimum—or worse, cheating.
Aside from the issue of learning, there’s also the issue of students being forced to create outside of the education environment to put together a portfolio. As a result, for most students, it requires quite a bit of sacrifice to be able to create a portfolio. The results of which can be seen in students’ grades as well as their sleep, their friendships, and even their relationships to education as a whole.
Therefore, I propose that we take a hint from the humanities and start assigning work that students can build into a portfolio.
Creating Open-Ended Assignments
I believe that we can solve cheating and get students invested in their learning by prioritizing open-ended projects.
The issue of cheating is solved almost immediately, as open-ended problems allow students to choose their own adventure. While it’s certainly possible that students can just choose someone else’s adventure, it is much more difficult to get away with and much easier to prove a case of cheating.
The issue of student investment in learning is also solved immediately as students gain autonomy in their education. Normally, we force students to follow our curriculum with strict deadlines and regular lessons. This sort of strips the enjoyment out of education as students get no say in what they work on. With open-ended assignments, students get to direct the learning, and you can bound these assignments in such a way that they’ll still be hitting your learning objectives.
Because I believe so strongly in the power of open-ended assignments, I’m actually piloting one this semester with my students. In the class I currently teach, students have 37 homework assignments and 10 programming projects. They also have 2 labs a week and 3 exams over the course of a semester. None of the work they complete is self-directed, so students take no ownership over the work. When an assignment is completed, students move on. There are no opportunities for reflection or intervention. The students just continually march forward.
Recently, I had the idea to create a semester-long project where students would take everything they know about the course topic and actually practice the discipline through their own interest. Specifically, we teach students about software components, and they learn how to use them as well as implement them. However, we provide so much of the skeleton code that they never really learn how to write much of the code themselves—aside from what we teach them from a theoretical standpoint.
As a result, my idea was to have a project where students could design their own software component over the course of the semester. The assignment will have iterative steps, much like when you’re asked to write a paper in an English class. To start, I’m planning to have an assignment where students brainstorm a few components they might be interested in designing, specifically along domains of their interest such as AI, graphics, and systems. My job would be to provide feedback on their early concepts and help them pick one that would be most reasonable over the course of a semester.
Later, I would expect students to actually draft up the different pieces of the component. These tasks could be split into logical chunks with reasonable deadlines for feedback. Even better, I could include a peer feedback loop, so students could help each other design and implement their components. With more eyes on their work, the better their resulting project would be.
At the end of the semester, I hope that students have something polished that they can take ownership of and show off. For me, this was most evident in my game design courses, which always ended with a sense of pride for what we had created.
Pushing Back Criticism
One of the challenges of administering open-ended assignments is grading. Because there is no consistent implementation, there is no automated testing. Automated testing is something we rely on quite a bit as educators to mass grade assignments as quickly as possible.
However, I don’t think that open-ended assignments have to be graded with such a fine-tooth comb. After all, students are certain to be more invested in work that they have decided to do for themselves. Likewise, the lack of concern around cheating creates significantly more opportunities for collaboration. Again, I’ll point to the English class example. Do English teachers ever get concerned that peer review will result in copying? Of course, not! And with peer review, much of the labor around grading is pushed off to the community, where peers are more likely to be supportive and understanding than instructors.
With that said, even if grading takes longer, the educational payoff seems like a complete win overall. For instance, outside of the benefits already listed, open-ended projects allow students to tackle an appropriate challenge for their ability (e.g., a student who is bored with the pacing of the course can give themself a more challenging project).
If you want to point to the research, there’s even a paper that showed that student self-efficacy and grades were better when they had open-ended projects to complete vs. standard well-structured projects. Though if you want to reap the benefits, it’s not a great idea to offer students the choice, since they will likely select the well-structured assignment instead.
Ultimately, it seems weird to me that open-ended projects are not the norm in computer science education, but hopefully they will become the norm in the future.
With that said, let’s call it for today! As usual, if you liked this article and want to see more like it, check out some of the articles below:
- Why I’m No Longer Giving Paper Exams in My Computer Science Courses
- Make TODO Lists More Meaningful By Reflecting on Your Values
- Using Ethnography to Advocate for Student Needs in Computer Science Education
Likewise, you can check out my list of ways to grow the site. Otherwise, take care!
Recently, I was giving a lecture about Java's "common" methods (i.e., all of the methods of Object), and I had epiphany about how Java only has toString() while Python has str() and repr(). So, it...
Magic numbers are numerical constants that have no clear meaning in the code and therefore make code harder to read. Anything that makes code harder to read is something we can use to obfuscate our...