My knees were shaking. My hands felt the sweat on my forehead. My eyes were tired of looking at a black screen for a long time. Basically, I was stuck and irritated. Like, REALLY irritated.
Throughout my journey of mostly self-teaching myself how to program, running into a problem was a common occurrence for me. But by spending time and working hard, I eventually found a solution and was satisfied. “I mean, that’s the joy of programming, isn’t it?” I thought to myself. Without carefully reflecting on this problem-solving process, I always believed that it was programming that I enjoyed.
But my experience struggling towards finding a solution made me realize that it wasn’t exactly programming that I enjoyed. In fact, the process of actually writing code was more of an additional component. What I actually enjoyed doing was creative problem solving (CPS).
Before I explain to you what creative problem solving is, I want to share with you one of the most impactful moments throughout my programming journey that led me to realize the significance of CPS.
I was recently working on creating a clone of an existing game called mope.io. In the 1v1 aspect of the game, two animals would fight against each other in a black circular arena. But I got stuck trying to create a way to detect whether or not the animal has stepped out of the arena. Even though I was struggling, I came up with the following three ideas:
Place an image of a thin red ring and try to apply a collision detection feature. If a collision occurs, the animal is outside the arena.
Apply the collision detection feature to the arena itself and determine the area in which the animal and the arena are overlapping. If the area detected is smaller than a certain number, the animal is considered to be outside of the arena.
Select some points that the image of the animal covers. Check whether the color of these points is red (everything outside of the arena is red). If the points are red, the animal is considered to be outside the arena.
I tried implementing all these ideas, but they failed due to placement issues with the collision detection feature, the area of the image fluctuating due to image resizing, and the inability to find points that could accurately tell me whether the animal was outside the arena. I eventually just thought of giving up and making the arena a square (because things are easier that way). I took a break and went to talk to my brother.
Note that my brother had little prior experience in coding. I simplified the problem I was facing without using complex terminology and explained it to my brother. I wasn’t expecting any ideas, but I thought some sympathy could help. But then he said, “If the arena is a circle, why can’t you use the distance between the center of the arena and the center of the animal image?”
That was the ‘Eureka!’ moment.
I started implementing my brother’s idea with some adjustments of my own. This idea didn’t have any issues with image resizing, collision detection, etc. It worked perfectly, and I was fascinated with the role of creativity and ideas in the problem-solving process.
Fast forward to now. I have worked on many new projects, but I often found myself leaving my projects and not finishing them. It was as if something was missing. I enjoyed it when I started working on these projects, but I lost most of my interest when I was in the stage of just writing less meaningful code, adding little components to my project, tweaking the interface so it looks nicer.
That is when I reflected on my experience with talking to my brother and realized that what I REALLY enjoyed through coding was the creative problem-solving aspect.
According to the Creative Education Foundation, Creative problem solving (CPS) is “a proven method for approaching a problem or a challenge in an imaginative and innovative way.”
I realized how a lot of things that I did during my programming journey involved CPS. First, there is starting a project. When I started my project, I had nothing in front of me in action, but my mind was thinking about all the things that I could implement and I was really excited about working on the project. This also applies when working on a single problem like the previously introduced issue about the game I was making (I will refer to this experience as ‘game example’ or ‘game experience’).
Then, I try to organize all the thoughts I have and the steps I need to take and try tackling it one by one. This is where tolerance for complexity kicks in. Even though there is so much going on in my brain I make an effort to follow a step-by-step process when working on a project. Though things didn’t (and will never) work so smoothly on my first try, I still believe tackling problems one at a time is important.
After that, I come up with possible solutions to these problems. This step requires a tolerance for ambiguity. In my game example, I came up with solutions 2 and 3 by reading documentation, watching YouTube videos. But often I still don’t understand the details of what that function really does for me. When there is uncertainty like this, I like to step back from the big project and try to create an easier and less complex environment where I can test the function and study it.
Finally, I try to implement possible solutions using my problem-solving skills and my knowledge. Allowing incubation (or taking breaks) is essential for coming up with a good solution. Given my game experience, I also want to add that talking to others about the problem could help. I believe that it is completely fine if the person you talk to doesn’t know much about the skill you have (my brother didn’t). In fact, you might be overthinking about a very specific thing and those who are inexperienced could help you take a step back and give you advice from a broader perspective.
Overall, from my game experience, I was extremely fascinated by the role of creativity in the problem-solving process. My brother’s advice was a game-changer (pun intended). Even though I struggled a lot coming up with good solutions, I still enjoyed the process, and the moment I found a solution was an impactful one.
Even though it isn’t EXACTLY programming that I love to do, if I hadn’t invested time and effort into the activity, I don’t think I could have made this self-discovery. I believe this concept applies to activities other than programming as well. If you put time and effort into something, you will start to realize what it is that you really enjoy doing in that activity. It could be the collaboration between teammates, heated debates on different topics, or finding connections between data.
In the future, I want to continue programming and put my creative problem-solving skills to use. I want to keep challenging myself to solve problems and come up with new ideas. I also wish to consider other activities in which I can use CPS. This was a very valuable experience that will influence me in the future, and I want to continue to discover other aspects of myself as well.