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!