A few years ago I visited New York City and went to the MoMA. At the time, they had an entire floor dedicated to mid century design. I was always particularly taken with the Kennedy Armchair and the Eames lounge chair. Those pieces to me are undoubtedly art. But they also serve a function. They're chairs.
A business analyst once told me - "you programmers have it so easy. It either works or it doesn't!" as if the vague 2 sentence requirement from their spreadsheet that I have to turn in reality doesn't require any creativity to implement.
But what about the edge case they missed? How should I design the control flow of this? How should it handle errors? In a lot of cases, how should it look, because I only received a wireframe? Should I write this as a class or a function? Can I write this code in a way this is easy to read and performant? What if it's a really specific piece of business logic, that doesn't make sense unless you know the reasoning for it?
Good software is art the way a well designed car or watch is art. They exist to accomplish a function, but the path to get there often requires quite a bit of creativity and expression. Your assertion that art requires no function doesn't make sense.
Is a dish or menu designed by a chef not art? Is a house designed by an architect not art? I feel sorry for people who can't see the art in those things. And especially sorry for people who can't see the art in writing code.
So you've listed houses, cars, watches, food. All these things indeed serve a purpose as well as allow for creativity and expression.
But the difference is, all those things have sale values that DIFFER based on that creativity and beauty. Code does not. My customer does not care if my backend code is beautiful, and neither does my CEO because it won't make more money.
> Is a dish or menu designed by a chef not art? Is a house designed by an architect not art?
Of course I see the art in those things, and in response i'll pay a lot more for a Frank Lloyd Wright than a mcmansion. But the customer of my B2B CRUD app does not care if my code looks like a FLW or a mcmansion. They care if it works.
>all those things have sale values that DIFFER based on that creativity and beauty. Code does not.
I wouldn't be so sure about that. I certainly prefer to use software that has a nice interface, is fast and responsive and has thoughtful features. I remember the first time my iPhone opened a pop up at just the right time asking if I wanted to share a wifi password with my Mac. Wow! Delightful. And I am willing to pay more money for such things.
>But the customer of my B2B CRUD app does not care if my code looks like a FLW or a mcmansion. They care if it works.
What is "works"? I'm not being disingenuous here. The software development process is often plagued by things like scope creep, unreasonable asks from stakeholders, cutting things for budget or time etc...
"works" is a subjective concept in your hypothetical customer's mind. Likely molded by you or your project manager setting expectations, pushing back on feature requests, etc...
My real point is, it's not just the value of the consumer or "customer". But the artist as well. It's the satisfaction you can get from designing a performant service that handles requirements and has the capacity for future expansion, etc...
Just because some people are philistines doesn't make the creation any less valuable as a piece of art.
I’m sorry but this is complete nonsense; there is no pleasure derived from viewing “beautiful” code from the perspective of the consumer such as in your other examples.
A program is not like a car, a chair, or a house, and if any of this were brought up in a design meeting for code, you’d rightfully be laughed out of the meeting.
But it’s fine to disagree about these things up to the moment where you attempt to slow progress towards delivery for these values. At that point, the point at which functionality is hindered in any way by your artistry, are you now a problem on a development team.
There are plenty of productive ways to deal with problems, but make no mistake, on any competent software team you will be disabused of this “art” notion, not the other way around.
>I’m sorry but this is complete nonsense; there is no pleasure derived from viewing “beautiful” code from the perspective of the consumer such as in your other examples.
You're taking it too literally. "viewing" in the case of software is "using". When I'm using a well designed, performant piece of software I can feel the art in it. When I'm using something thrown together I can feel that too.
"Performant" is not the same as "well designed". What you feel is a pleasant UX, which is art, or closer to it at least, and would fit your analogy drawn against a chair or a car.
However what we're discussing here is how the code and otherwise hidden implementation is designed and built. OP is not a UX designer, OP is a software engineer, and should not waste time building things that are "beautiful" in that capacity.
UX and systems design are almost entirely unrelated, and should not spend time in one another's domain.
Your writing reminds me a lot of "Zen and the Art of Motorcycle Maintenance".
'The real cycle you're working on is a cycle called yourself. The machine that appears to be "out there" and the person that appears to be "in here" are not two separate things. They grow toward Quality or fall away from Quality together.'
> My customer does not care if my backend code is beautiful
Apple can only sustain the high margins they do because you’re wrong. Some people care a great deal. Some of those people have deep pockets. If none of your customers seem to feel that way it’s probably because they are Apple customers.
But you also have companies like Anker and at certain points in their history Sony, Samsung and perhaps LG. They got it. At least for a while.
People here don’t complain about Apple for silly reasons as much as they used to. But I’ve been laughing at people jealously predicting their imminent demise while cashing dividend checks ever since their shares were $40 pre-split (7x and counting IIRC). I’m going to get to retire at least a couple years early just on AAPL, even having done dollar cost averaging.
> B2B crud app
Ah. Businesses have a weird split brain problem and it’s difficult or impossible there. They want custom software for less than or around the price of off the shelf solutions. The OTS ones can be beautiful and occasionally get away with it. If you care about art of even ergonomics you’re gonna have a bad time. I encourage you to seek out a new vertical.
> Apple can only sustain the high margins they do because you’re wrong. Some people care a great deal.
Are you suggesting that some people care a great deal about how pretty Apple's code appears, despite having zero way of knowing anything at all about that as a consumer?
They do start to care when it stops working or it takes forever to change due to it being a mess. This is the natural state most projects end up at unless the devs are putting in a ton of extra effort to keep it clean, organized and maintained. Devs that are thinking about keeping things beautiful, succinct and performant are much more likely to do that.
My Observer bias of late has been about open or nearly open feedback loops. People don’t adjust their strategies when the consequences come due later. I’ve been on a number of projects and seen a few more where management keeps turning screws to get stuff faster and then goes pikachu face when the whole thing grinds to a halt. Few if any of them see themselves as the agents of chaos in this situation. It’s not their fault, it’s someone else’s. And even if you can document it, it doesn’t sink in. Because that was something they did years ago and we don’t think about old things.
> as if the vague 2 sentence requirement from their spreadsheet that I have to turn in reality doesn't require any creativity to implement
Do you really need creativity, though? Unless you’re working in uncharted territory and you’re just building some CRUD app like 90%+ of software in the world, you don’t. Software engineering patterns exist, and even so much of the innovation that supposedly came out in the last 5 years are mere iterations of the same patterns.
And the purpose of being creative with a solution is not creativity for creativity’s sake. Clarity, maintainability, scalability, should strictly be the primary goal of every line of code that you are writing. I wouldn’t debate that a code that is so clear and intuitive and easy to scale for so many people has achieved some degree of art, but that should be a side-effect, not the goal in itself.
I'm getting a little tired of all the "creativity" in UI myself, a.k.a. reinventing the wheel.
I use a dozen different-looking web interfaces per day, often internally inconsistent in the same application. Here, it's OK Cancel, there it's Cancel OK, another one is Yes No.
There are two buttons on the "modal" dialog in a web page. One is a different color. Does pressing Return mean anything? Escape? Can I tab through them? Does the modal with one required text field (e.g. 2FA entry) focus that field? Does Ctrl-V work? Is it some bizarre custom design that can't keep up with a normal rate of typing?
Will it allow my password manager to autofill fields? I saw an interface recently using Angular that didn't even provide name or id on the text fields. Thanks.
The desktop app side of things is equally annoying. Either it's electron/nwjs, or it's attempting to look cool instead of just following the guidelines.
You know what takes creativity? Shoe-horning new code/requirements into code that is not abstracted in any sane way. The end result doesn't make me look like an artist though, it makes me look like an asshole for not rewriting the whole mess. But alas, that wasn't factored into the current epic.
Would you pay more for a house where the internal plumbing is beautifully laid out? Not functionally better, just more beautiful (in some abstract sense).
A business analyst once told me - "you programmers have it so easy. It either works or it doesn't!" as if the vague 2 sentence requirement from their spreadsheet that I have to turn in reality doesn't require any creativity to implement.
But what about the edge case they missed? How should I design the control flow of this? How should it handle errors? In a lot of cases, how should it look, because I only received a wireframe? Should I write this as a class or a function? Can I write this code in a way this is easy to read and performant? What if it's a really specific piece of business logic, that doesn't make sense unless you know the reasoning for it?
Good software is art the way a well designed car or watch is art. They exist to accomplish a function, but the path to get there often requires quite a bit of creativity and expression. Your assertion that art requires no function doesn't make sense.
Is a dish or menu designed by a chef not art? Is a house designed by an architect not art? I feel sorry for people who can't see the art in those things. And especially sorry for people who can't see the art in writing code.