If programming is an art, where are all the masterpieces?
A not-so-optimistic take on our so-called craft
There’s a considerable debate about whether software engineering is engineering. I tend to say “yes,” but many say it’s more of an art. But if it’s an art, where are the sublime works that capture the spirit of the times? Where are the pieces worthy of preserving in The Louvre? Why aren’t the artists who created them household names, like Leonardo da Vinci or William Shakespeare?
I know that art has different meanings. When they say it’s an art, maybe they mean it’s a technical craft. Even still, skilled craftspeople make stunning works worthy of reverence for generations. A bricklayer’s work can last hundreds of years. And there’s something admirable in a lovely brick wall. But what program from 50 years ago would you read, enjoy, and learn from today?
Donald Knuth’s Turing Award lecture “Computer Programming as Art” addresses this directly. In it, he writes, “My feeling is that when we prepare a program, it can be like composing poetry or music.” I agree! Ironically, reading the TeX source code (written by Knuth) is nothing like reading poetry or listening to music. Can something be an art if only the artist can appreciate it?
One problem that “code artists” face is that computers continue to get faster, and their RAM gets bigger. Fifty years ago, you had to optimize much more, and that optimization often made your code less aesthetic. Perhaps it is unfair to judge the artistic work. What’s the most appropriate metaphor? Is it like looking at cave paintings with their primitive tools? We can see the art if we try. Or is the art not in the source code? Perhaps it is like judging the messy smock of a painter when we should focus on the canvas. But again, if it’s an aesthetic art, are we creating new languages and tools that help us reach ever more sublime heights of aesthetic expression?
Perhaps Knuth hinted at an answer: “It is especially nice when the things we regard as beautiful are also regarded by other people as useful.” So perhaps only we, the creator, need to see the beauty, while the usefulness is for others to appreciate. For example, I’m sure bridge architects must solve all sorts of fun problems with aesthetic beauty, but that beauty is not visible to a layman looking at the bridge. Likewise, users of our app might appreciate how easy it is to use, and we, the programmers, might relish the beautiful algorithms we had to develop to make it possible.
Still, where are the masterpieces? Where are the museums? Where are the artists? I know this is a super negative take. I don’t think I believe it. I’m just trying to work out how the practice of programming, which I love, relates to art. I’m legitimately looking for perspectives here. If you have an idea, please hit reply.
Hi Eric, I did hit reply to this ("I’m legitimately looking for perspectives here. If you have an idea, please hit reply."), but I have not heard from you.
Perhaps my message did not arrive?
My message was that y = F ( Y , e ) is a beautiful tuplespace methodology that works for every transactional problem we have tried. F is a function (the sole programming), Y is the immutable tuplespace (the sole data persistence), e is some new event, and y is a new data tuple.
Full details here: https://www.youtube.com/watch?v=BBJyK9YYBWA
The masterpieces are the designs and the patterns. Not the implementations.
The general design of the jQuery api featured several big innovations that I think qualify as masterpiece level art: The innovation of using css selectors, the ability for the jquery function to be used in a bunch of very useful ways, the way they educated people about unobtrusive javascript, the bare fact that they tried so hard to have a `slideUp` function if there's a `slidDown`. It taught a whole generation of people "how to javascript properly". Surely thats a masterpiece.
Certain aspects of React qualify. Virtual-dom, the context mechanism (dynamic scope but useful? Say whaaa), hooks - these I believe are masterpieces.
MagicMock in python is infuriating but a masterpiece
The design of powershell I personally think qualifies - a lot of the standards around it are super well done
A large chunk of Racket - totally a masterpiece even if its rarely used
Then there are tools and paradigms
SQL is a masterpiece
The web is a masterpiece. All credit to TBL.
I think the REST paradigm is a masterpiece. GraqphQL is like a weird corporate take on api design - like some sort of branding agency which produces work that is soul-less, but still interesting and worthy of awe.
I think the way emacs interacts with the open source community in a way that is quite unique and produces things that are so innovative and cool and useful (despite often being complete shit under the hood) is some sort of weird modern art masterpiece.
Oh, also that feature of Macs where if you wiggle the mouse, the cursor gets bigger. Total masterpiece.