Algorithmic Crafting

Jennifer Jacobs, MIT Media Lab

I consider programing to be a method for personal expression. Because I’m a person who writes code and makes physical things, I’ve thought a lot about using code to produce functional objects. What might this process look like and what steps would it involve?

You could start by writing a program that generated a variety of patterns.

You could then produce a file from one of the patterns that could be digitally fabricated, say on a laser cutter or 3d printer.

Through handcrafting, you could then turn the fabricated parts into a finished piece which you could use, wear, exhibit, sell…you name it. The potential end results would be determined by your experience as a programmer, your access to fabrication tools, and your ability as a craftsperson.

Algorithmic crafting is the term I’ve chosen to define this process, although components of it exist under other names. Algorithmic crafting combines computational design, digital fabrication and traditional craft to produce functional, beautiful, physical objects. Computational design allows a person to write programs to create and modify form and structure. While often used to determine the structural and functional properties of a piece, computational design can also shape the aesthetics of an object. Digital-fabrication machines provide a means of translating computationally designed forms to physical objects. Ultimately, these machines are used to produce components of a final object, rather than a finished piece, and as a result, provide the opportunity for a third step of hand-construction. Depending on the fabrication material and end project, this construction process can incorporate traditional crafting practices.

Algorithmic crafting is compelling for several reasons. Practically, it allows for greater production speeds of multiple, physically-complex objects. Algorithmic crafting also combines disciplines that are often considered unrelated, like sewing, precision machining and programing. This interdisciplinary approach can alter people’s understanding of the relevance and applications of programing and digital fabrication. It can also change the way we think about the process of programing itself, and creates opportunities to develop new tools and techniques to support programing for physical creation. The process of bridging the spaces between programming, design, and construction however raises many questions. For instance:

  • How does personal expression manifest through programming and digital fabrication?
  • How can the processes of physical prototyping be compellingly linked to digital design and computation in a way that creatively reinforces both physical and virtual modes of working?
  • What are the potential conflicts between craft and computation, and how can they be mitigated?

Over the past year, I have worked on developing a variety of software and programming environments to help people create computationally generated, digitally fabricated crafts. I have worked with different groups of people to use these tools in aworkshop setting to produce clothing, accessories and other functional objects. This process has provided some insight into the above questions, as well as generating many new lines of inquiry.

Programming With Style

Computational design allows for the systematic description of an aesthetic. Rather than create a single design, the designer writes a set of rules that can generate many different instances of a style. By connecting computational design and digital fabrication to craft, individuals can define their personal stylistic preferences in a program, and then express an instance of this style in an object. The workshopswhere people created algorithmically crafted clothing gave people the opportunity to use computational aesthetics to express their visual identity. As a result, the majority of the garments created in the workshop contained an expression of the “fashion sense” of the participants who created them. As one participant stated:

I think [programing and fashion] are really interesting but I never thought they could ever be together in one concept, and it’s awesome that I know that now- that you can design aesthetically pleasing things from coding.

This level of enthusiasm was common among participants; they all proudly modeled their creations, and many of them wore them home. This behavior suggests a relationship between the decisions made in a programing context, and the participant’s desires to express their visual identity. The participants were selective in the code they wrote to design their garments because they intended to wear the garments, and as a result, be represented by them. This powerful affective relationship between computation, design and self-expression provides a natural way to engage people in programing and design by supporting their personal interests.

The Pressures of Prototyping

Prototyping plays an important role in any complex physical construction project. Computational design and digital fabrication can support higher speeds of production for complex parts, presenting new opportunities for the prototyping during the crafting process. In the clothing workshop, most participants produced two or three prototypes for their project within a two-week period. This rapid production process formed a direct connection between discoveries made in the physical prototyping space and decisions in the programing realm. When asked about this process one of the participants said:

I think it was really fun that we got to do a prototype first because then if you don’t like it, you don’t feel a lot of pressure because you can make it again really fast, and there’s no stress because if it doesn’t turn out well, then it’s not your final project.

The combination of programming, rapid fabrication, and physical construction allowed for a design approach that transitioned from programing to fabrication to programming adjustments based on the fabricated elements, and then back to fabrication. This iterative approach resulted in a closely linked cycle of physical and digital engagement. Conversely, the gap between the participant’s programs and physical artifacts sometimes it difficult to incorporate information from prototyping back into one’s design For the participants in the workshop, direct physical engagement with the materials became an important input to the decisions they made in their programs. For many participants however, it was not always clear how best to implement this input as code. The central role of prototyping in the creative process strongly suggests that future computational-design tools for novices should endeavor to support iterative prototyping. In particular, features that can intelligently respond to the limitations and affordances of specific physical materials and crafting techniques could better inform the design process of the user.

Making Rules vs. Breaking Them

Procedural intuition is an important part of the creative process. It plays a particularly important role in the realm of art and craft where a creator may decide mid process to deviate from a pattern in the spur of the moment, or modify their technique in response to the properties of the material they are working with. On the other hand, programing is often a task that requires a significant amount of structural planning beforehand. It can be undesirable or even difficult, to create deviations from this structure. This tension was expressed in the workshops as many people put forth detailed critiques of how computation affected their creative process. One participant articulated the absence of an intuitive design practice in programing by explaining the difference between the creative processes of writing a piece of music versus programing a visual design. He described his musical process as one in which he begins with a rough melody, and then gradually adds to that element until a more complete and cohesive theme results:

Usually [the music] changes because usually I just have an idea of some sort of note thing, like really simple and then from there I kind of in the moment think of what kind of loops I want to make, trying to make a theme for myself.

Programing a design, he said, was less intuitive:

For code I usually have some end thing that I want, like a design, you think of what you want it to look like, and then from there I try to think of parameters you would try to set up to produce a kind of outcome that would be similar. These two processes feel pretty different to me… For code, I usually think about what I want in the very end and how to get to that, but for music I think about it as I go.

Contrasting critiques emerged from other participants. One participant reacted against classifying generative processes as a design method.

Changing the parameters didn’t always generate the pattern you have in mind. It was more like generating a few semi-random patterns and you choose one that looks good. It is rather a trying-and-choosing rather than designing /making something you planned to have. I think “design” involves “intention” and “planning.” Programming, crafting, and design should be combined in the way that entails prior planning and intentions as opposed to cutting together the semi-random choices, which could be good but I wouldn’t call that design.

As this comment indicates, programmatically producing forms through randomness and generativity does not automatically lead to good design decisions. Particularly in the case of aesthetic choices, some deciding factor has to play a role in selecting a design, but the designer’s role in this process is often ambiguous. The debate over the relationships and conflicts between planning and structure, and intuition and inspiration occurs in many disciplines. In the case of computational design and algorithmic crafting the tools themselves can play a role in limiting or supporting the designer in their attempts to make, or break the rules of their design.

Future Directions

There are many challenges to consider when combining computation, digital fabrication and craft. From developing tools that better incorporate the process of physical prototyping into the practice of computational design, to examining the role of personal expression and style in creative programing, to evaluating the computational design process itself. Overall, the continued exploration of algorithmic crafting has the potential to expand the creative applications of programming and support emerging programmers in new forms of art and design. As computational design and digital fabrication become more prevalent in our society, new opportunities to use and understand these tools will become increasingly valuable.

Read the paper this project was based on

Visit my project website and download some of the tools