RailsConf 2015
Coding: Art or Craft?

Coding: Art or Craft?

by Emily Xie

In her talk 'Coding: Art or Craft?' at RailsConf 2015, Emily Xie explores the metaphors of code as both art and craft, challenging the audience to reflect on what programming means to them. She begins by defining the terms 'art' and 'craft,' explaining that while craft is associated with skill and utility, art is connected to creativity and emotion. Xie argues for the importance of these metaphors in framing our understanding of programming, which is a major part of our professional lives.

Key points discussed include:

- The Role of Metaphors: Metaphors simplify complex concepts, and Xie highlights that they significantly influence how we understand coding.

- Code as Craft: This metaphor emphasizes a rich tradition of craftsmanship, focusing on skill mastery and collaboration. Xie traces the evolution of this perspective within the software development community, referencing significant works that laid the foundations for the software craftsmanship movement.

- Code as Art: Emerging as a contrasting idea, this metaphor positions coding as a form of artistic expression. Xie emphasizes that programming, similar to art, involves creativity, intuition, and personal expression.

- Historical Context: Drawing parallels with the evolution of art during the Renaissance, she illustrates how coding could transition from a purely functional craft to a recognized art form.

- Aesthetic Experiences: Xie discusses the aesthetic qualities of code, likening the creation of code to artistic endeavors, where choices reflect the programmer’s personality.

- Duality of Coding: Ultimately, Xie concludes that coding encompasses elements of both art and craft, inviting the audience to appreciate the complexity and richness of their work.

Significant examples include the influence of historical figures like Michelangelo and the modern-day auctioning of computer code, which parallels traditional art auctions. Emily’s main takeaway is the importance of embracing both metaphors to foster a creative and innovative approach in software development, encouraging programmers to view themselves as artists.

00:00:12.080 All right, so how is everyone doing? Yay, cool!
00:00:17.680 Thank you for coming to my talk. I'm really excited to be here at RailsConf.
00:00:23.119 My name is Emily, and I am a software engineer at Wayfair, but I come from an art history background, which you've probably guessed from the topic.
00:00:30.000 Today, I'm going to explore how we think about the act of programming.
00:00:36.640 One of the ways we can do this is through metaphor.
00:00:41.920 Two powerful metaphors are 'code as art' and 'code as craft.'
00:00:47.039 Although we often equate the two as they both pertain to how we create things, they have completely different implications.
00:00:52.399 Code as craft is widely popular and has already taken strong root, while code as art is more of an emerging fringe metaphor.
00:00:58.239 Since you don't hear about code as art as often, as it's overshadowed by and sometimes confused with the craft movement, I wanted to build a case for it.
00:01:04.879 I want to show you why it’s different and why it deserves to be considered a separate concept.
00:01:11.119 Hopefully, this discussion can help you answer the question of whether code is art or craft.
00:01:18.479 But most of all, I want to spark discussion and encourage everyone here to think about what coding and creating means to them.
00:01:23.920 Even if they don't see it as strictly one or the other or something else entirely.
00:01:29.119 Let's start with metaphors. As we all know, metaphors are direct comparisons of one thing to another.
00:01:36.400 The language of computing is abundant with metaphors.
00:01:42.799 For example, garbage collection refers to automatic memory management, and we have folders, directories, and pages.
00:01:49.040 None of which are literally those things. In object-oriented programming, we have parents, children, ancestors, and descendants.
00:01:55.439 When connecting to an outside program, you perform a handshake to agree on a connection protocol.
00:02:01.840 Surely all of you can think of many more metaphors.
00:02:09.200 The point I want to make is that metaphors help us to understand something complex by relating them to something familiar.
00:02:15.840 Though packaged into so few words, metaphors can convey an entire story and express multiple meanings.
00:02:21.040 Metaphors matter because they shape the way we think about things—both for ourselves and how others might perceive them.
00:02:28.159 That's why I wanted to discuss the larger metaphor for describing coding.
00:02:33.760 This is crucial because we spend around 40 hours a week doing it—essentially, the most significant part of our waking hours.
00:02:40.879 We should think about what coding means to us and those around us.
00:02:47.040 The metaphor we use to describe coding provides guidance and a framework to understand it.
00:02:53.200 It helps us comprehend the answers to the hows and whys of our work.
00:02:58.959 The first metaphor I want to discuss is 'code as craft.' Let's consider what this metaphor entails.
00:03:05.680 Craft consists of a body of knowledge and skills used to produce useful objects.
00:03:11.440 There is a rich history of craft that predates us by hundreds of years.
00:03:17.120 This long history and its traditions deeply inform what the term craft means today.
00:03:22.159 If we were to hop into a time machine and go back to the medieval ages, we'd find craft skills associated with makers.
00:03:28.159 Every craftsman belonged to a guild, which was an essential part of civic life.
00:03:34.160 These guilds supported the central modes of production for everyday needs—silversmiths, stonemasons, lace makers, cobblers, bakers.
00:03:40.000 Each specialization was devoted to handmade goods, and craftsmen trained their entire lives to become masters.
00:03:47.280 They followed a defined accomplishment system.
00:03:52.880 An apprentice would start out unpaid, usually at a very young age.
00:03:59.680 The apprentice would live with his master to train, learning the basic technical aspects.
00:04:06.959 His life revolved completely around his work—he lived and breathed his craft.
00:04:13.760 The apprentice would eventually become a journeyman once he was good enough to produce goods and get paid.
00:04:20.720 From there, he could work for the rank of master.
00:04:27.360 As a master, he could set up his shop and take on apprentices to pass on traditions.
00:04:33.759 Guilds served as forums for nurturing competence and emphasized community.
00:04:40.000 In addition to mentoring, guilds encouraged close collaboration.
00:04:45.520 Craftsmen cared about their customers, aiming to produce high-quality end products.
00:04:52.880 They inspected the workmanship and regulated prices to ensure fairness, developing relationships with customers.
00:04:59.360 The code as craft movement has gained considerable momentum in recent years.
00:05:06.000 You can see how it draws from the distinct history and traditions of craftsmanship.
00:05:12.400 It can be traced back to 1999 with Andrew Hunt's book 'The Pragmatic Programmer,' which nods towards craft.
00:05:18.480 In 2002, Pete McBreen coined the term 'software craftsmanship' with his book of the same title.
00:05:25.279 He advocated that to produce quality software, we should view our work as a craft and adopt a guild-like model.
00:05:31.680 In the late 90s and early 2000s, the code as craft movement began to coalesce.
00:05:37.919 Books and gatherings emerged, leading to online discussions.
00:05:43.760 By December 2008, attendees of the Software Craftsmanship Summit in Chicago discussed what it meant to be a developer craftsman.
00:05:50.640 They drafted the Software Craftsmanship Manifesto, which laid down principles of craftsmanship.
00:05:56.560 This manifesto emphasized the value of well-crafted software and relationships within the developer community.
00:06:03.919 It attracted several thousand signatures in the first few months and has since been translated into at least seven languages.
00:06:10.880 The manifesto effectively crystallized the principles of software craftsmanship, stamping them into existence.
00:06:17.040 Today, the movement’s effects are far-reaching, influencing programming culture.
00:06:24.480 For example, this conference has a track specifically devoted to this topic.
00:06:31.520 Many companies are adopting the apprenticeship model, which I personally experienced at Wayfair.
00:06:39.440 Etsy’s engineering department brands their work as craft and frequently blogs about it.
00:06:46.720 The Software Craftsmanship Conference in Budapest dedicates three days to this topic.
00:06:54.560 Many see code as craft today, and our vocabulary is laced with references to this notion.
00:07:01.600 We view coding like craft because we believe in continual learning, skill mastery, mentorship, and collaboration.
00:07:08.399 We focus on building useful things.
00:07:15.120 This movement has helped shift our perspective, thinking of coders as makers.
00:07:20.720 This contrasts with the older perception of programmers as mere executors, like black boxes.
00:07:27.680 The code as craft movement naturally paves the way for discussions on creativity, especially within the Ruby community.
00:07:34.560 Terms like ‘pretty’ and ‘creative’ have started emerging.
00:07:41.440 For instance, in a 2007 anthology called 'Beautiful Code,' Matz describes what makes code aesthetic.
00:07:48.240 In his 2014 book 'Geek Sublime,' Chandra directly questions whether code itself can be beautiful.
00:07:55.760 Terms like taste, pleasure, human perception, aesthetics, and beauty are being introduced.
00:08:02.960 However, none of this fits neatly into the traditions of craft, particularly as defined by our software craftsmanship movement.
00:08:10.880 Medieval makers were concerned primarily with skill and collaboration, creating useful products.
00:08:17.120 So, what I see happening is that we are progressively likening code to art.
00:08:24.080 Now, I'll discuss what the metaphor of art encompasses.
00:08:29.520 Art is a complicated concept.
00:08:37.920 We all recognize art when we see it.
00:08:44.160 Generally, we think of visual arts like sculpture, painting, and installation, but art is a broader concept.
00:08:51.120 At its core, art is anything that moves us—it expresses human creativity and emotion.
00:08:57.440 Art is about ideas and human imagination—it makes us think.
00:09:04.640 Interestingly, our modern understanding of art arose from what was once craft.
00:09:10.880 During the height of medieval guilds in the 14th century, a movement known as Renaissance Humanism changed perceptions.
00:09:18.240 This movement, drawing from Roman and Greek classics, emphasized human dignity and creativity.
00:09:25.120 Craftsmen began questioning the nature of their professions.
00:09:31.680 Some, like Leon Battista Alberti, wrote treatises framing their work not as applied skill but as liberal art.
00:09:38.160 Gregorio Vasari's influential book 'The Lives of the Artists' illustrated artists as creative virtuosos.
00:09:44.560 Michelangelo famously stated, 'A man paints with his brains, not with his hands.'
00:09:51.920 Within a short time, the general perception of what constitutes art began to shift.
00:09:59.120 Drawing, painting, and sculpture transitioned from being seen as crafts to being celebrated as art.
00:10:05.840 These creative endeavors were recognized for their intrinsic meaning and value.
00:10:13.120 Historically, this transformation has repeated itself, and we are now experiencing a renaissance of our own.
00:10:21.280 Much like the humanists of the 14th century, we are reevaluating our profession and how we present ourselves.
00:10:28.480 Literature on code as art has begun to emerge, appearing in several books and online posts.
00:10:34.640 However, the arguments for this perspective are not yet widely known or adopted in mainstream discourse.
00:10:41.520 Let’s examine how code is much more like art than we might think.
00:10:48.480 This can be observed both in the process of creation and in the final product.
00:10:54.080 To create something, you must first choose a medium.
00:11:01.680 In art, a medium can include materials like pastel, watercolor, clay, or canvas.
00:11:07.120 In programming, our medium can include the text editor or the language we select to use.
00:11:16.160 My language of choice is Ruby, which I find particularly expressive.
00:11:23.120 I liken it to acrylic paint—it's elegant, rich, and clear.
00:11:30.480 Every stroke of acrylic has defined borders, similar to how a Ruby method delineates boundaries.
00:11:37.440 Ruby is also beginner-friendly, but it has many advanced techniques to explore.
00:11:43.680 Just as some artists prefer specific mediums, programmers have their preferences.
00:11:50.400 Personally, I write a lot in PHP, which I don’t love.
00:11:56.480 It reminds me of pen ink—it's simple but requires many strokes, leading to a convoluted appearance.
00:12:03.120 Yet, it achieves its intended purpose.
00:12:09.920 As the saying goes, different strokes for different folks.
00:12:16.720 Paul Graham sums this up well in his essay 'Hackers and Painters,' stating that hackers need to understand theory.
00:12:24.000 In the same way that painters need to understand paint chemistry, programmers must grasp the fundamentals of their medium.
00:12:31.480 We must experiment and undergo trial and error to fully understand our tools.
00:12:38.480 Once the medium is selected, the creation process can commence.
00:12:46.720 How many of you have made art? Can I see a show of hands?
00:12:53.920 For those who have made art, you might agree that it closely resembles writing code.
00:13:01.440 Many famous artists would likely echo this sentiment.
00:13:08.080 For example, Francis Bacon stated that the creative process is a blend of instinct, skill, culture, and feverishness.
00:13:15.680 This state can be described as a mixture of consciousness and unconsciousness, fear and pleasure.
00:13:22.400 Bacon's description aligns closely with the trance-like state of flow experienced during coding.
00:13:29.199 When you code, there are moments when you input keystrokes rapidly without much reflection.
00:13:36.320 Simultaneously, a conscious element demands your attention as you channel thoughts onto the screen.
00:13:42.080 You develop skills and habits along the way; for instance, I routinely type 'git status' after every operation.
00:13:50.080 The way you approach programming problems involves skill, intuition, and risk-taking.
00:13:56.480 Coding is engrossing, making you feel present. I sometimes begin work at 9 AM only to realize the entire day has flown by.
00:14:02.720 You become so engrossed in thought that you tune the world out.
00:14:09.680 It’s a very personal experience.
00:14:15.200 Michelangelo famously painted the Sistine Chapel in this trance-like state, often forgetting to eat or sleep.
00:14:21.840 Just as artists make aesthetic choices, programmers make decisions regarding algorithm design.
00:14:28.080 In Ruby, there are many ways to print numbers one through one hundred depending on one's style.
00:14:35.040 A minimalist may opt for a simple and elegant option, while a maximalist might humorously write all numbers out.
00:14:42.560 Someone from a C background may find comfort in traditional for loops.
00:14:50.240 A student excited by object-oriented programming might want to wrap it in a class.
00:14:57.760 Ultimately, in art, the artistic process reflects the creator’s personality, preferences, and influences.
00:15:04.640 Similarly, in coding, everything we do—from problem-solving to indentation style—is influenced by our background.
00:15:10.880 We imbue our code with personal taste, constantly making aesthetic choices.
00:15:18.080 Upon completion, what we have crafted can be appreciated similarly to a work of art.
00:15:24.079 For example, here's a painting of a factory by Van Gogh next to a factory class code.
00:15:30.640 Bear with me; I see many similarities.
00:15:37.600 Van Gogh's strokes abstract details into lines and colors, much like how Ruby code abstracts complexity.
00:15:44.159 Both art and programming use abstraction to present larger concepts.
00:15:52.240 The cleanliness and structure of code can resemble artistic works.
00:15:58.080 For instance, scrolling through code, one might notice its orderly indentation, just like an Alexander Calder sculpture.
00:16:05.040 The systematic nature of these forms can be aesthetically pleasing.
00:16:11.680 There's even a programming language called Piet, where the code itself is a visual representation, akin to Mondrian's paintings.
00:16:17.760 The coding in Piet resembles art, merging code with aesthetic forms.
00:16:23.840 This further illustrates how we can treat code as an art object.
00:16:29.680 Just like viewing a painting, appreciating a software project involves acknowledging its aesthetic qualities.
00:16:35.680 Recently, the founders of Rues Laboratories held the first ever auction of computer code at the Cooper Hewitt Smithsonian.
00:16:42.240 Patrons purchased algorithms for similar reasons as one might buy pieces of art.
00:16:50.079 Some pieces were recognized for their cultural significance or nostalgic meaning.
00:16:57.360 For example, a printout of the code from a compatibility calculation algorithm reflects our modern technology use.
00:17:05.120 A handwritten function printing 'Hello, World!' by Brian Kernighan holds sentimental value as one of the first lines of code.
00:17:11.840 Even during code reviews, we apply personal taste to what we see.
00:17:18.480 I find procedural spaghetti code as messy as Jackson Pollock's, which is chaotic and hard to decipher.
00:17:25.440 However, I appreciate meta programming and recursion for their elegance.
00:17:32.720 The beauty lies in the ability to express complex ideas in just a few lines of code.
00:17:38.720 Arthur Danto famously defined art as something that compels interpretation.
00:17:45.760 Artworks invite questions about their meaning and subject.
00:17:52.080 Similarly, code requires us to identify its purpose, whether it's about a database or a recommendation engine.
00:17:59.040 Understanding code entails considering details and the author's intent.
00:18:05.920 Much like art, coding ultimately revolves around conveying concepts and ideas.
00:18:12.000 I hope I convinced you of the parallels between coding and art.
00:18:20.720 We choose a medium and undergo a unique creative journey to bring a concept to life, resulting in aesthetic experiences.
00:18:27.760 This connection invites us to value the historic, cultural, and personal meanings behind our work.
00:18:34.080 Now, let’s revisit the importance of metaphor in shaping our understanding.
00:18:40.560 We explored craft as a metaphor, prioritizing continual learning to produce useful end products.
00:18:48.480 This concept expanded our view of creativity in coding, resulting in the notion of code as art.
00:18:56.080 It allows for self-expression and the appreciation of code beyond utility.
00:19:03.280 Finally, we need to address the question of whether code is art or craft.
00:19:10.440 The answer is both—each carries its distinct history and implications.
00:19:17.920 Coding is an applied skill, like craft, but it also demands creativity and innovative thinking, like art.
00:19:25.120 Sometimes we choose the tools necessary for the task, but other times, we select our preferred medium.
00:19:32.960 Coding is collaborative yet intensely personal; it has practical function as well as aesthetic value.
00:19:39.920 The artistic and craft elements intertwine, reflecting the multifaceted nature of coding.
00:19:48.080 In the art community, we often discuss whether a piece is art or craft, and it is not mutually exclusive.
00:19:56.080 Items can embody elements of both, and we should embrace this diversity.
00:20:03.280 As I prepared for this talk, I read many arguments asserting programming cannot fit into one metaphor.
00:20:11.360 However, it's not necessary to wholly adopt one metaphor over another.
00:20:18.400 During the Renaissance revival, the idea of craft didn't disappear; it coexisted with the evolving notion of art.
00:20:26.000 Both perspectives have led to remarkable innovations.
00:20:32.880 I firmly believe we should afford greater value to the code as art metaphor, which is still emerging.
00:20:39.440 This perspective invites us to consider our roles creatively.
00:20:46.560 By viewing ourselves as artists, we might feel empowered to take risks and innovate.
00:20:54.080 It may also encourage more people with creative interests to enter the field.
00:21:02.080 Imagine if we began attaching creator names to their work, much like artists receive recognition.
00:21:09.360 While we already have notable figures in tech, we can move toward greater recognition.
00:21:15.679 Moreover, we might start emphasizing the ideals of art for art's sake, focusing on the code itself.
00:21:22.639 This could lead to more maintainable code and clearer expression of ideas.
00:21:30.000 The adoption of the code as craft metaphor became significant in recent years.
00:21:38.320 Let’s consider the possibilities of introducing a new metaphor: code as art.
00:21:45.840 Metaphors hold incredible potential to push social and cultural boundaries.
00:21:53.200 We should embrace diversity in perspectives as we frame our work.
00:22:00.560 Identifying as software engineers is common, but I envision a future.
00:22:06.960 A day when people introduce themselves as software sculptors.
00:22:14.080 Thank you for your attention! Here's my Twitter handle, feel free to tweet at me.
00:22:20.160 I welcome your thoughts, whether you agree or disagree.
00:22:27.040 We have run out of time, so if you have any questions or comments, let’s discuss!