Thursday, December 17, 2020

What is “creative” coding, anyway?

At this point, I am wary whenever I hear the term “creativity” used in the domain of computer science and computer programming. Since there are so many ways to create in this world, creativity can mean different things to different people.

For example, I might look at a HackerRank coding problem to manipulate a graph structure in some way and think “I don’t want to do that, it’s not creative enough!” But to another coder, they might look at that problem and think, “Oo, interesting, what creative approaches can I use here?”

Why don’t we agree? Well, for me, my favorite way to create is to put something completely new into the world. For another coder, their favorite way may be to figure out ways to solve a problem they haven’t seen before (even if other folks have solved that problem). I might personally value novel output more than problem solving, but that is not an absolute ranking; just a personal preference.

So I suggest that we instead use specific language when attempting to describe the creativity of a particular project or curriculum:
  • Novel output: When I complete this project, will it be something that has never existed before in the world? Or will it be the same as what other learners have come up with?
  • Self expression: When I work on this project, will I have a way to express my personal values and interests? Oftentimes, self-expression goes hand-in-hand with novel output, but projects range in the spectrum of self-expression. For example, a project to come up with elevator logic likely involves less self expression than a project to design a website that rallies people around a cause dear to you.
  • Problem solving: Is it already clear how to solve the problem, or will I need to think through various approaches before I figure it out? Some coding projects may involve little problem solving, like projects to implement pseudo-code in a particular language, as they’re more about syntax memorization. Other projects involve a massive amount of problem solving, like those on Project Euler.

My hope is that thinking of creativity in terms of these aspects will help me design better coding projects, since I can actively identify what forms of creativity are over or under represented and come up with ways to make the projects more holistically creative.

I’d love to know what you think of this categorization and way of thinking.

Tuesday, December 15, 2020

The harms of assuming cultural knowledge in coding assignments

I love using computers to re-create real world objects, like coding a simulation of a plant growing or making a 3d animation of a lava lamp. I can rarely capture the beautiful complexity of a non-digital object, but I sure can have a good time trying! So when I come up with assignments for programming courses, many of them ask learners to program a simplified version of some IRL object, game, or situation. My hope is that the programming assignment is more interesting to learners because of its connection with the world around them.

For example, in the Khan Academy Intro to JS course, one of the projects asks learners to create a Magic 8-Ball to practice their understanding of randomness and conditionals. I have fond memories of Magic 8-balls from my youth, asking them seemingly very important questions and shaking them to gain insight into the machinations of the universe.

But then I got feedback that many learners had no idea what a Magic 8-ball was. That’s when it dawned on me: those toys were popular in my youth in upstate New York, but they never became popular in most non-US countries, and they’re not particularly popular these days even in the US.

So I was asking learners to re-create something they had never seen, and I wasn’t even explaining very well what it was! So I quickly modified the project to start off with a description of the toy and that reduced the number of confused help requests from learners.

Ideally, I would even replace the project with one that felt culturally relevant to more people. However, it is hard to come up with projects that are culturally relevant to everyone, since we all come from so many different cultures.

In a course that serves a global audience, one approach is to always offer a variety of projects, allowing learners to work on the project that most appeals to them. Our Hour of Drawing with Code on Khan Academy ends with three different projects- creating a wild animal, a super snowman, or a self-portrait. When I analyzed the data a few years ago, I found that learners were roughly equally picking each of the projects, so I’ve left all the projects in instead of trying to force the most popular project on everyone.

Another risk of culturally dependent assignments is that they can cause a learner to question whether they belong. For example, I’m currently working my way through a programming course where the biggest project is a violent tower defense game. I do find it fun to make some kinds of games, but I hated working on that project as it reminded me of my least favorite use of coding and made me wonder if I was the only one that wasn’t into implementing death matches in code. Fortunately, I’ve been in coding long enough to know that indeed, programming is used for many non-violent applications as well.

But if that was my very first intro to programming, I would have many questions as to what industry I was entering and whether I would find folks with similar hobbies and values as me.

So when I create new assignments in the future, these are my goals:
  • If I reference a particular cultural object, I will not assume the learner has prior experience with the object and will provide background knowledge. For example, if an assignment asks learners to implement a game of Poker, I would need to fully explain the rules of Poker. A programming assignment already requires the cognitive load of the programming techniques; it shouldn’t also require the cognitive load of understanding someone else’s culture.
  • The assignments should reflect the varied cultures of the learners as much as possible. It follows from that goal that I need to learn about the cultures of the learners (as they may be increasingly different from me, as I get older) and that the assignments are subject to change over time (as cultures change).
  • If an assignment relies heavily on a particular cultural interest, such as card games or Disney movies, there should be an alternate assignment available as well. If one set of learners gets to program something that’s highly interesting to them, then the remaining learners should have that opportunity as well.

Those are my current thoughts. I’d love to hear yours!