Fostering Creativity in CS Education By Focusing on Skills
I was recently reading a post by an educator I highly respect from Hunter College (Mike Zamansky) that focused on why we should study/teach CS. The article linked Here talks about common talking points for why CS education is great and why those talking points are not entirely accurate.
I agree with much of what the article said but wanted to drill down on one specific point. "CS is creativity". Mike correctly points out that creativity is not exclusive to CS but more importantly identifies an issue with "creativity" in CS education.
Uniform Projects and Changing Sprites
In the article Mike notes that in many classrooms students are creating the same game, sharing in the coding experience, and that the "creativity" comes from swapping sprites. He states "this allows for a controlled form of creativity on the visual part of their project but not on the problem solving side." So how do we achieve the creativity in problem solving?
I have other posts detailing how I implement PBL and self paced learning in my classroom so I won't dive deep on that here. Instead I want to focus on how rubrics and identifying the skills CS students should be mastering allows for creativity in problem solving.
I'm going to discuss two seperate projects, one for my intro class (AP CSP) and one in my advanced class.
Vue Reactivity Project (Intro /AP CSP)
In my AP CSP class for sophomores the students learn VueJS in the second term (They also have the option to choose a backend language instead depending on their interests). The first project we do with Vue is the "Vue Reactivity Project". The project does not ask them to make any specific application. Instead, the focus is on core VueJS skills. Data Binding, Reactive UI, Iterating over an array. The students can develop any type of project they want that incorporates these essentials skills (among others on the rubric).
This year one student developed a project reading data from the NYTimes best seller API to have users create a virtual bookshelf. Another student created a simple 8-bit coloring tool. Another made a visual pizza maker. These projects are all unique from one another but all incorporate reactivity, binding data with v-model, and iterating over a list. All students ended up using more than one JS array method. It was not all the same methods. Students had to solve their own problems that THEY created. Programmers have a toolbox and learning when the right time to use a specific tool is important.
Fullstack Project (Advanced)
In my advanced course teams of 4 create a fullstack application that requires a backend, a database, and front-end UI that uses VueJS. While there are other aspects to the rubric this is the core skillset. Several groups made games. One was an escape room that saved your progress to the DB. Another was a Guitar Hero clone that had an online leaderboard. Other teams created social media applications. All teams used the same core skills but choose their own implementations based on problems they created.
The Best Problems Are The Ones We Create
Student ownership over their work is an important pedagogical concept as it builds motivation in our students and creates an investment in their success or failure. By focusing on the skills needed to be mastered and not pushing students towards a particular project, we enourage greater mastery of those skills. Students learn creative problem solving and students learn the valuable skill of when and why to reach for certain tools in their toolbox.