Seeing code as craft
One step down from "Are games art?" in the hierarchy of boring overdone debates is whether programming is an art or a science. As often with such debates, few involved tend to care about defining their terms - which, especially when you deploy a word as vague and loaded as "art", basically guarantees that you will get nowhere fast. In a way, those arguments are not about what programming actually is: they are about whether it is serious enough to be a science and creative enough to be art. Being me, I of course disagree with everyone and state that programming is, more than anything, a craft.
This is hardly an original take - it has already gotten corporatized, as a number of tech companies and game studios have taken to internally calling competency areas "crafts" over the last few years. But what is "craft", anyway? What does that word even mean? More than that, what does it imply? Is this just an excuse to be obnoxious about language? Well, yes, but I promise I have actual points to make.
A non-attempt at a definition
There are many definitions of "craft" out there. I will not bother with any of those, and instead define it, very vaguely, as "the process of making things". In a craft context, that making is often rooted in tradition, using techniques and materials that have a long history. Practice is central to craft, as is experimentation, but rarely with a degree of control that you will find in scientific papers. Artistry is of course involved, but many craftspeople - myself included - will resist being called artists. For the record, my personal preference is "handweaver", I will tolerate variations of "artisan", but calling me a "fiber artist" is a great way to piss me off.
Throw in different languages and it gets messier still: neither French nor Swedish really have a word for "craft". French has "artisanat", which also covers what English calls "trades" (think plumbing or masonry). It also has "artisanat d'art", which covers a lot of what English would call "studio craft", though with slightly stronger ties to the industrial world and a long history of royal manufactories such as Les Gobelins. Then there is "loisirs créatifs", literally creative leisure, which would be hobbyist-grade crafts, typically called "crafting" in English.
In Swedish, you have "hantverk", which is literally hand-work and is fairly similar to the French "artisanat" in scope. You also have "handarbete", also literally hand-work, often but not exclusively used for textile handicrafts. Then you have "pyssel", which is basically "hobby crafting" but generally used about children and poor quality work. Get a bit more serious about it and it gets called "hobby", though that is used extra-often for a specific subset like model-making and miniature trains. A step sideways is "slöjd", which is a subset of crafts taught in school (typically textile, wood, some metal) and practiced in the home, at a level of expertise that ranges from amateurish to near-professional, and is impossible to separate from folk traditions. Finally, there is "konsthantverk", which is close to the French "artisanat d'art" though typically closer to studio craft by virtue of Sweden being a smaller, more rural country for a long time.
This is just in the languages I speak on the regular. It's a complete mess. So let's ignore all of that and go back to our great divide of art and science.
Art? Science? Why not both?
Craft is art: this is obvious. For one, the word "ars, artist" in Latin basically meant craftsmanship, and that's where we got "art" from. Even in the case when you fully follow instructions in a hobbyist craft kit, you are still doing something creative, aren't you? And most often, there is wiggle room to add your own twist on things, to put thought and intent into a project.
Craft is also art because it does not operate on strict rules. When there are rules, you can always break them in pursuit of a different result (just maybe don't attempt to sell it as a safe product). So much of skill comes from practice in ways you cannot put into words, the materials in your hands just start behaving differently at some point. Like the laws of physics themselves have changed without warning.
Craft is science: this is obvious. Materials are at the heart of craft, and those are knowable, studied, refined. Measuring is a constant in most craft practice - cutting things to size, checking gauge, measuring shrinkage, adjusting temperature and humidity and concentration. I bought lab glassware to do dyeing, after all!
Craft is also science because experimentation and iteration are so core to it. Those rules mentioned above, that tradition that runs through everything? That is just an extensive library of previous work, all empirical. Build on it, try things out, change one variable at a time until you get the desired result, keep notes. This is just running experiments, only there is no hypothesis to prove.
Where craft gets more unique is in how knowledge is transmitted. Apprenticeships are a key component, hours and hours of practice to build muscle memory, to be shown a million small tricks that one simply will not think of without trying and failing. Of course this dynamic also appears in areas classically understood as art and science, notably in lab and workshop and studio time, but it is integral to craft. You will not learn much without trying things for yourself.
Pedants will remark that by this logic, fine arts look a lot like craft: you'd be correct, the oil painters just think they're special. That's a separate rant for a different piece that will center on tapestry weaving.
Could it be then that art and science aren't actually that far apart, when viewed through the lens of craft? Could it be that the shared elements here - flexible rules, iterative experimentation, practice-based learning - are especially applicable to software-making?
Get to the point
The elephant is the room, undiscussed so far, is the end user. Software, generally, has a point, and that point is most often to fulfill the needs of a user. This brings us to the design process - the steps by which one gathers a list of needs, thinks up ways to adress them, and puts together a solution to make it all come true within a number of constraints (typically material ones).
That too you will find in craft, though generally more in the professional, production-oriented part of it. Of course some craft practitioners make purely aesthetic pieces that do not serve a classic, practical purpose. But most of the time, there are some use-related aspects to a piece: you ask "How will this be used?" then go to your library of prior knowledge and choose the right solution.
Bring all of this together and you can see why I say that programming is a craft. We measure things and iterate in a way that looks a lot like running experiments, but our goal is rarely formal proofs. While we are fond of metrics, the underlying rules are so complex they may as well be arbitrary, so the vast majority of us do not bother - instead, we try things out and keep notes. Our problem spaces are large enough that there is room for creativity, expressivity even: don't we have endless debates about things that boil down to aesthetics? Seniority is above all else carefully honed intuition, muscle memory of sorts, paired with a library of empirical knowledge.
It is, in the end, a practice-based skill. And all the books in the world will not make you improve like practice will.