Hacker News new | past | comments | ask | show | jobs | submit login

Sigh... another loss at the hands of, "Code is Art!"

It's not art. Art requires no function, it exists as a representation. (Professional) code, and software engineering generally, must produce valuable things, and sometimes the process of making those valuable things isn't "fun", but that's never been part of the equation. Aligning "fun" with "valuable" is nearly impossible, and when you try you're dooming yourself to almost certain failure.

This is really burnout, and the mental health effects that cause burnout. I'm sorry the author has gotten to this place, but wrapping it up in "passion" is a disguise.




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.

This is a bad time for users.


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.


Thanks for this. Well said and very quotable.

You should think about writing a book :)


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).


It doesn’t sound like burnout to me. It sounds more like organizational issues that have left the author with a very limited amount of time to work on a sluggish product they can’t take pride in. The name brand and pay sometimes just don’t make up for that especially for some people.

There’s nothing wrong with wanting to take pride in your work and to have working conditions that facilitate that. Get enough people together who feel that way and can find something useful to build and you get a huge competitive advantage. Software that is useful and performant is like gold but takes a lot of extra effort and passion to keep it that way.

You’re right about the “fun” part though. Making great software (and art) is hard work! “Satisfying” is probably a better metric to shoot for.


Coding is pretty straightforwardly a craft - something that is done for use value but allows for artistic expression and a convergence of form and function. It isn't art.

However, I disagree that aiming to get enjoyment out of a coding job is necessarily a mistake. But it does often have to be weighed against competing factors like ease of getting a job and pay.


He compared it to writing a novel. A novel can serve more functions than just being a representation, such as a puzzle, an entertainment device, an empathy exercise or a learning tool.

I read it more simply like, "Code is a craft that deserves careful attention."


I sometimes hire marketing writers where I work (I have many years of experience as a marketing writer). One of the most important moments in the first interview is when I explain that what they will do is not creative writing.

We can find ways to do our writing jobs creatively, but fundamentally we type to get things done. We write to influence people. It’s not art, not even a little bit.

It’s obvious who gets it and who doesn’t.


Nothing requires a function, you can have code without a function.

I think good art (to me) requires some function. And code is art. Like architecture , or furniture design, or gardening, or dance, or many art where the design and precision and purpose is all tied into what the artist is doing.

I don’t think coding is pointless and think that coding for the purpose of being beautiful can be dangerous and painful to support or refactor. But I’ve read a lot of code and appreciated it on some aesthetic level and remember thinking, “that’s neat.”


Code may not be art, but there is beauty in design.


Beauty doesn't put food on the table, is my point, and I'm beyond sick of working with people who put "code beauty" before "code usefulness".

Ugly code that works pays bills. Beautiful code that doesn't work is, in a very literal sense, worthless.

I'm not against writing clean code (there's utility in that), but I feel like some folks lose the plot and quit their jobs when they can't make "beautiful" things anymore, and I think that's more often a sign of burnout than it is a desire to "return" to creating art.


Why is the dichotomy "ugly code that works" and "beautiful code that doesn't work"

Surely there's also "ugly code that doesn't work" and "beautiful code that does work." And I'd argue there's a lot of in between as well. Unless the software literally does exactly what it needs to do, no more, no less then there's also the variants of "works well, somewhat well, etc."


>Ugly code that works pays bills. Beautiful code that doesn't work is, in a very literal sense, worthless

what about good code that work? All places where I see your argument prevail, ended up to be not just 'ugly code', but unmaintainable code. And systems that cannot evolve at all.

Personally I don't call coding an art, but I've seen countless times how people people choose bad solution even though better one costs exactly the same, and in a long run - actually cheaper. And they _always_ use this argument - 'code is just a tool, if it solves the problem, it is good'. And then they either leave or have to spend weekends to write even more dirty code just to solve problem they wouldn't have in the first place if they spent a little bit more time thinking about the code.


Don’t mistake “beautiful” code for “clean” code. Clean code has value in its ease of maintenance, it’s easy to work with. “Beautiful” code falls into the completely arbitrary land of “what is beautiful?”

Wars have been fought over defining beauty, but the important thing to note is that beauty is orthogonal to function. Clean code has clear criteria and value, beautiful code does not.


Code isn't Art, it's Craft, or, to use the current buzzword "artisinal".

Software development isn't "engineering" by a long stretch. There is still another 40-50 years of development and consolidation before it could be considered the equivalent of other engineering practice.

I've lived through numerous lifecycles of "this time for sure" regarding software as engineering, from "modular programming" to "CASE" to "iterative development" to "UML" to (god help us all) "Agile".

What a lot of practitioners think of as "engineering" is actually "project management". Engineering is about defined practise, measurable inputs and outcomes, responsibility for signoffs and approvals that ensure that the defined practise has been followed.


There's no hard divide between the two. It's a continuum.


besides your point - I tangentially would like to mention:

art HAS a function. It sometimes appears invisible because it is we who are affected by it.

Art is anything that functions to manipulate a {conscious being}'s internal state (traditionally emotional state).

That said - I agree mostly with your point besides that one pedantic complaint :)


I hate this whole idea that coding is a creative (in the artistic sense) activity.

There's a limited number of solutions to a programming task, it's about finding the one that meets most constraints, it's about cost, effort, trade offs analysis and finally implementation.


Getting code to do the right thing is an engineering activity. Getting code to make sense, to communicate an accurate and useful sense of the problem and solution space to yourself and others across time and change, is a humanities activity.


Thank you! Writing code is a creative exercise not because there are infinite solutions to a given problem but because your solution must be one that clearly communicates it’s own intent both to the machine and to the next humans who read it and give certainty to those humans that they can make changes without tripping over load bearing coconuts.


It stops being a humanities activity when you shape your comms strategy around the science behind how the human mind learns, as you should with code documentation and even with the way that your code reads.


> There's a limited number of solutions to a programming task

But this is literally and technically not true.


It is once you enter the real world of: costs (e.g. has to take N people X amount of time), resources available (may run only in a specific environment), performance requirements (has to solve the problem in a certain time), tools availables (you may have to solve it using a specific set of technologies), conventions (from coding style to required coverage to documentation), security and many other less measurable constraints (readability and maintainability) the pool of solutions to a certain problem is small, extremely small.

Coding is mostly optimizing and compromising between all those factors, rather than staring at the wall waiting for inspiration expecting the solution is an act of poetry.

This is not to say that engineering is void of creativity, some sort of beauty, cleverness, etc, it obviously is, but it's not the same kind of creativity involved when painting or writing music.

Art has the goal of touching, moving and expressing the author's self.

That's just not the goal of writing a form, a serializer, a validator, a logger, a queue, a shader or a git hook.


Tell me you don't know what knowledge it takes to compose or work on a painting without telling me. Either of those tasks that we class as art also aren't simply "staring at a wall" waiting for inspiration either.

In either case you didn't specify constraints and even with those constraints it's still technically false unless you're limiting yourself to a non-turing form of computation. I'll take all your tasks with their constraints and add no-op operations onto them to make them ugly but still functional. I'll add in all kinds of ill-thought out logic that will never be reached or is "functionally" useless.

And even an "artist" has these "real world" constraints which are "must sell before starving to death" or the work won't be "completed"


Do you think that building a bridge is not a creative activity?




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: