I had the pleasure of attending a Q&A session with Casey Reas, an algorithmic artist and an author of Processing. When the moderator, Christiane Paul, asked Reas to describe what programming brings to artwork, he answered with one feature: scale.
I was surprised that he left his answer at that. Software changes everything it touches, often in fundamental ways, and artwork is no exception. Scale is merely one high-level outcome of algorithmic art. There are deeper changes that programming brings to art: precision, randomness, mutability, and reuse.
Precision is one of the most obvious advantages of the programmatic approach to art. Precision is not limited to grids and geometric shapes. Rather, functions can be used to calculate the precise placement of objects along a curve. Networks of shapes can be rotated by exact angles. Complex systems of lines can run parallel only to diverge in a symmetric tangle of loops and curves. Thousands of tiny lines can be used to cover a plane, with each line rotated by a tenth of a degree from the previous line. One complex image can be used to mask another, as though it were the world's most elaborate stencil.
Some of these tasks are achievable by hand, but are extremely impractical. With algorithmic art, they are simple enough to become commonplace. This allows the artist to take a fundamentally different approach to textures and shapes, and the results can be both alien and fascinating. Precision leaves an unmistakable mark on the work.
Interestingly, randomness rivals precision in its influence over algorithmic art. This may seem ironic at first glance, but the two are closely related. Algorithmic artwork gives the artist precision over randomness. Probability distributions can be finely tuned to produce results that are both consistent and simultaneously novel. And randomness isn't restricted to sitting on the surface, determining the fine details: randomness can form the very foundation for the composition.
With the right use of randomness, a single program can generate an entire series of images. For example, my Quilt, Continuity, Community, and Parallel Reconstruction series each have a single program behind them. The level of variety from these programs is surprisingly high. Many images have been produced which I could not have predicted, composed, or conceptualized ahead of time — they surprise even me.
With this style of randomized composition, the artist's role changes once the program is complete. While the program is being written, the artist functions as a designer and composer, and the goal is to create an environment in which great works of chance can occur. When the program is completed, the artist becomes a critic and curator. I often generate hundreds of images, only to select a handful for the final series. (Reas mentioned that he does the same.) As I sift through the images, I slowly learn what the best aspects of the program are. In some images, large, bold blocks provide a strong composition; in others, a fine flourish of detail may be perfectly showcased. Some programs can shine in more than one way.
Randomness and control over it enable this totally new process for creating art.
Artwork created through programming is particularly easy to alter. Trying a new approach simply requires altering code and re-running the program. This is in stark contrast to other media, such as pencil, ink, and paint, where re-working a piece is laborious at best and impossible at worst. Although mutability is somewhat inherent to digital artwork, even digital painting can require significant manual effort to change. With algorithmic artwork, thousands of fine details or large sections of the image may be tweaked with only a few lines of code.
As a result of this level of mutability, there is a low cost of failure. The artist is free to experiment with many wildly different approaches. For example, my own work typically begins with rough experiments on patterns or processes. After many attempts, I discover an approach that seems promising and move to an iterative polishing phase. In the polishing phase, I repeat the process of experimenting and refining on a smaller scale for individual elements.
I believe this freedom to experiment cheaply allows the artist to develop new styles more quickly, and will help to spur new movements in digital artwork.
Reuse is common in both artwork and software. Artists reuse color schemes, compositional strategies, techniques, textures, subjects, and much more. These help to create a visual vocabulary for the artist. The same problems do not need to be solved over and over, allowing the artist to focus on developing higher-level concepts.
Reuse is also extremely common in software for similar reasons. However, in software, reuse is primarily enabled through abstraction. This makes it simpler to swap one piece of code for another, or alter the behavior of existing code as needed.
Algorithmic artwork can take reuse to a new level through software abstraction. For example, once the routine for generating an elaborate texture has been programmed, the artist can plug it in to programs at different points, using it in myriad ways. The routine can be tweaked by passing different numerical arguments to the component functions. It's also possible to pass other functions as arguments, creating a logical hybrid of multiple routines.
The ease of this type of reuse and modification allows for many variations on the size, proportions, density, and texture of visual elements.
Scale is simply a product of the combination of these other attributes of algorithmic artwork.
When creating a "large" image, precision is required to tie the image together and ensure the elements work in harmony. Many large, complex features require a level of precision that is only practical through programming. Fine details and patterns can span the work as needed.
Randomness helps to ensure variety at scale. If the randomness is well directed, it will produce variety while maintaining unity. Randomness can also remove much of the burden of composition from the artist, allowing them to select spontaneous images that work well instead of conceptualizing them entirely.
Mutability is extremely useful when working at scale. Without the ability to iteratively improve a large image, the artist needs to make smaller scale proofs of concept and design individual details and features separately; these components do not always combine well in the final product. The algorithmic artist's ability to see the entire work at scale as they design it is a strong advantage.
Last, code reuse makes it simple to repeat a single pattern or concept multiple times in images. This repetition with variation works very well at scale in everything from music to visual arts.
As we've seen, scale is only a symptom of the deeper changes that programming brings to artwork. The programmatic approach fundamentally changes the artistic process in ways that the artist cannot ignore, from more flexible, iterative development to exciting new techniques. Scale is simply icing on the cake.