Failing Successfully – Learning Generative Art

Noah Finer
Level Up Coding
Published in
5 min readMay 6, 2021

--

The process of trying to pick up something new can range from being extremely simple to excruciatingly difficult. I know from experience — I tried to learn plant care and ended with all dying within two weeks. I tried to learn cooking and boiled a batch of soba noodles into one perfectly pot-shaped noodle cube.

Failing is an essential part of learning a new skill, and you’ll likely hear this constantly from your favorite Twitter hustler, your favorite professor and researcher, and probably your parents as well.

The reality is: it sucks. Can we reduce it?

I tried to learn a new skill, generative art, while minimizing frustration and failure and focusing on keeping myself motivated. Some things worked, others completely failed, but most importantly: I got results and had fun doing so. Here’s how I tackled controlled failing.

In case you just want to play with the cool experiments I made, you can check them out here.

Starting with a tutorial

Frustration level: 10%, Motivation level: 25%

Subdividing a polygon into smaller triangles!

I began a majority of my generative works by following tutorials, or just finding something cool and trying to copy it. For instance, Wblut had this sick tutorial for subdividing a triangle into smaller and smaller pieces.

This phase was always the most fun. I simply looked at code, typed it out myself so I didn’t become a mindless copy paste monkey, and watched things move around on my screen!

The best part was how frustration was at 10%. I literally only messed up typos or just being ridiculously dumb. I was able to create cool results with truly minimal effort. While it would be great if coding was like this, I needed to add a little more of my own personality to these tutorials.

Taking the next step

Frustration level: 40%, Motivation level: 80%

Wavy dots! (adapted from a tutorial where they came out from the middle)

Generative art has the word “art” in it. It’s about creativity and doing cool stuff, not blindly trusting what a website online tells you to do.

The next step for me was adding my own creativity. Maybe it was turning an algorithm meant for triangles into polygons. Maybe it was adding randomized color to my shape subdivisions. Maybe it was moving points around so it looks like things are animating and stuff.

Frustration increased in turn, as there was no longer a clear goal. It was a lot more of trying things out until they looked cool, and most of the time they did not. It was more of flipping negatives, moving around numbers, and actually trying to create my own math equations (which is surprisingly hard!)

Flying too close to the sun

Frustration level: 80%, Motivation level: 60%

Dots with more dots!

This is where things began to get wild in each of my experiments. This consisted of me moving all the lines I had written like I knew what I was doing, until realizing I had completely destroyed the codebase during my experimentation.

I tried to abide by the 20/80 rule, which states that 20% of the effort can get you 80% of the way. This was the point where I made something that looked pretty cool, despite not being exactly perfect. I was able to keep my sanity by seeing where I had went too far and knowing to be happy with what I had

The real stuff – starting from scratch

Frustration level: 75%, Motivation level: 110%

My extremely broken fluid simulation

After a lot of practice in the previous steps with low frustration levels and seeing actual successes with the assistance of tutorials, my motivation grew dramatically. I was prepared to take on totally insane challenges.

After practicing off tutorials, I specifically decided to attempt a fluid simulation using strategies I had previously learned. I found some equations online, saw one example (without any code), and simply got to writing velocities, vector fields, and diffusion algorithms.

The above may sound incredibly complicated. It would have been if I did it correctly.

Particles moved in totally random directions and after hours of debugging, I noticed that setting a specific constant to exactly 7 put the particles at a relatively decent balance. With a big emphasis on “relatively decent,” I decided to conclude the project and put my own stamp of approval on what I built. 20% of the effort for 80% (well, more like 50%) of the outcome.

What did I learn?

Sure, I learned how to screw around with JavaScript, p5js, and some cool math concepts. But what I really learned from this was my own process for learning new, difficult skills and concepts.

I realized that I can’t just jump into crazy failures, but need to find some way to guide me and keep my motivation high. After following something basic, only then can I start making my own incrementally larger and more complex creative changes. And after that point, I’m ready to jump in and create something on my own.

Who knows where I’ll apply this? Maybe I’m learning a new, obscure tool at work. Maybe slightly changing up a chicken recipe until I invent my own type of chicken. Or maybe writing a tutorial of my own someday.

What I do know is that for each new thing I learn, the rest will come along easier and easier. Or if not, maybe I’ll just need to find more tutorials for myself.

About me

Noah Finer is a junior studying Computer Science at the University of Michigan and former Co-Director of Shift Creator Space. He’s originally from Boulder CO and loves hiking, skiing, photography, and ranting about fonts to his friends. He is also behind up-and-coming rapper MC Finer Flame.

--

--