When you think about programming (or coding), you might not consider it to be a creative pursuit. That’s a viewpoint that I, as a coder, was very confused by, because I see it as one of the better avenues for creativity available today.
I hope this piece changes the way you think about programming and encourages further exploration.
Programming as a creative outlet can be understood by comparing it to traditional artistic pursuit.
Becoming an Artist
Starting with Charcoal
Imagine you’re a new artist. You’ve decided to start drawing, and you want to start with charcoal.
You feel the charcoal in your hands, the dusty but smooth texture, and the large thick pad of paper you’ll be applying it to. It may strike you that you have no idea how to use these tools to accurately represent the vision of artistic beauty inside you.
You start the piece anyway. As you lay down strokes, discovering how different charcoal is from pencil, it really starts to sink that this is something completely new you’ll have to master. It really sinks in when you reflexively try to erase a stroke that’s inaccurate, laying down smudge wherever you spread the stroke out.
You come to realize it will take years of difficult work, self-discipline and self-discovery, and learning from all kinds of different sources you never considered, before you’ll be able to use charcoal for creative expression that matches closely to your original intent.
The Artistic Problem
When you started, you faced a problem as an artist: there was an original, artistic vision of beauty in your mind that you wanted to bring into the world. You found an outlet that can help you express that vision.
But when you went to implement the vision in real form, you ran into new problems.
Drawing with charcoal, or any means of expression in real life, comes with constraints, or rules, that must be mastered to most faithfully represent your artistic vision in the real world. Until you understand what the rules are, which rules to break, and when, you’ll create expressions that are inadequate compared to the mental vision (which is quite frustrating!).
Tools and techniques exist to help the artist realize their creative vision, not as a means to create it for them.
Artists are not stewards of the creations that their tools have wrought, but rather the creators themselves, aided by their tools.
Even the most talented master of a form may still have reservations about the ability of their works to convey the meaning, intent, and emotion of the original vision.
So how does programming compare to this journey?
Programming is Artistic Expression
The exercise we just went through can be very reflective of a programmer’s journey towards mastery.
A programmer faces a problem: some condition or process in the world is imperfect. It’s now the programmer’s job to envision possible solutions to that problem.
The same as any other artist, the programmer faces very real rules that dictate what kind of visionary solutions are possible. The best, most creative and clever programmers oftentimes have a masterful understanding of the rules that dictate what is possible to enact in real form, and a mastery of the computer tools that offer a means of expressing that beautiful solution.
What makes programming a particularly exciting and invigorating outlet for creative expression is actually the rules that govern it. When drawing with charcoal, there are limits on what you can do with a piece of charcoal and paper. Those limits do not limit the ability of an artist to create a perfect work of beauty; but rather pathway in which that beautiful work can be realized is in itself limited.
In the same way, the laws of physics govern the ability of programmers to enact their solution to a problem. If there is no way to express logically a solution to an existing problem, then that problem is a poor fit for the physics-based logical world of programming.
The trick is that most every problem can be solved through a creative logical expression.
Where the art, beauty, and raw creativity of a visionary programmer shines through is in finding the simplest, most pure, most elegant logical expression which solves a problem.
One Step Further
This comparison continues. When you think of paintings or other traditional forms, you quickly think of the categories and disciplines to which they belong.
Surrealism, realism, cubism, modern, etc. are all movements that capture ideologies of how to best express visions in real forms.
These forms can be powerfully perceived by others when expressed under an ideology that introduces purposeful new constraints on how vision is to be expressed. Artistic movements create paths toward repeatable practices that help artists express the essence of their vision, They help subdue the inadequacy of any particular medium impeding a vision’s accurate representation. In other words, ideologies from artistic movements aid artists in solving the problem of accurate expression and helps best use the strengths of imperfect mediums to express ideas.
Programmers have Movements, too
Programmers are invigorated by co-existing and continuously evolving ideologies, tools, and technologies. They offer similar support to programmers as artistic movements offer support to traditional artists.
Coders pick programming languages, patterns of logical expression, and high-level design patterns that help them envision and implement solutions to different kinds of problems. By learning some of these different tools and ideologies, the programmer becomes better equipped to represent their vision faithfully without being encumbered by the inadequacy of specific tools and techniques.
Sometimes a modern art painting best expresses an abstract concept or emotion, sometimes realism magnifies and focuses the perceived world’s inherit beauty. Programmers pick their tooling and chosen ideologies for problems that help them best solve different kinds of problems.
Why Choose To Program
When most computer scientists and engineers first begin their journey, I doubt most consider the artistic aspect of the work, but rather the self-realizing power of the pursuit.
“Music can change the world because it can change people.”
Similar words that an artist could say about the power of music or painting or other artistic expression can be said about programming.
The distinction that’s differently attractive about engineering and programming is its ability to change the organization of human society, and thereby affect the senses and psychology of individuals vs the other way around for traditional art forms. The best traditional art galvanizes people to enact societal change as a result of their inner change whereas engineering affects the fabric of society itself directly through its implementation, and those changes can effect people’s psychology, if less directly.
Software and engineering underpin the way that every human being lives their lives across the world. When architecture or banking software or other foundational underpinnings change, those changes quite literally change the world as it relies on those foundations.
To have the power to even be a small part of societal change could be why you choose to be an engineer or programmer. It’s one of the most demanding and difficult jobs because of the physical limitations and worldly impact of the work. The same can be said about any artistic profession or pursuit; it’s only the kind of world change that is likely to result from the engineering pursuit that’s different.
It is that curious spirit and desire to change the world through beautiful creative expression that drives the most creative people I know.
So artists and programmers face very similar paths, have similar concepts of using ideology and mediums as different tools to solve problems, and the outcomes of their works are similar. I think it’s fair to say that programmers are artists, and their work requires similar talents.
Is this theory of coding as art useful? Is it completely wrong? What do you think?