Programming as art

Jun 11, 2007 01:18

You know, I just checked my tags, and I've never tagged a post as being related to programming before. Kind of odd, considering it's what I do for a living and all. Anyways, I figured I'd touch on the concept of programming as art.

Recently, I was listening to some folks talk about the breakdown of employees in the game industry. One of them was saying how there are two sides to development; there are the programmers and there are the artists. And then for the benefit of those of us who were programmers, he went on to clarify that he wasn't implying programmers weren't artists. There is an art to what programmers do, after all, and he understood that.

Oddly enough, I was immediately struck by the notion that what I do is not art. At least, not when it's done properly. And it made me sit back and think about what I consider to be art.

It didn't take me very long to work out my definition of art. Art is approximation.

Whenever I first began work as a software developer, there were a lot of things I didn't understand how to do properly. With time and effort, you learn the proper tool for the task, the proper way to attack and chip away at a problem, etc. Once you know the proper way, it simply becomes architectural work. But for those first few times you're doing it--and probably doing it wrong, overengineering one piece, not paying enough attention to another--it's art. You experiment, you change, you shape, and you learn, but really you're just approximating what it *should* do.

Most games that come out these days are architected. There's a proper ('accepted') way for the game to interact with the user in terms of menus, saving, loading, etc. The game world is as reasonably-accurate a simulation of the real world as possible. Items in the game behave as closely to their real-life counterparts as possible. It's all architecture. Where the art comes in is with the approximation. On the programming side, this boils down to the minor iterative advances that each game makes on its predecessors in that genre.

Now you could argue that there's no real right way for something to be programmed. After all, there are so many varied ways to express something in code, right? But in the end, that code has to do something specific. None of the end users of your product are going to look at your source code and say, gee, what a nifty way to sort the matrices used by your model for vertex blending. Instead, they're just going to care whether or not you were able to get their character off the disk and onto the screen.

I can pretty much guarantee you that, any time a programmer sits back and says to themselves, "This thing I just wrote? A piece of art." That's a piece of code that's either a hack, a prototype, or something that should really be in a data file. (Edit: hmm, I may be overstating things a touch there.. *cough*) Programming is an architecting business, and yes, we occasionally make buildings to see how high they can get or how long they'll last. But what we do best, what we strive for, is the boring and mundane. The sad fact of the matter is, the better the code, the less 'art' it is.

I think you can apply this argument to a lot of other areas too. Photos themselves aren't art. An 'artsy' photo, though, is an attempt at approximating the mood or provoking a particular emotion in the beholder--hence it qualifies as art. Novels are contrived portions of people's lives that play out in the minds of the reader, arguably making the reader an active participant in rendering the approximation. A child's painting? Definitely art.

If you look at the masters, the progression of methods and techniques seems to back up this argument. Once photorealism was achieved, they needed to place different restrictions on their medium in order to make it possible to have something to approximate through. It isn't art anymore if it's just rote duplication.

You see this with bands too. Some folks say the Red Hot Chili Peppers have been putting out the same song for the past ten years. Once you get to the point where you've perfected a technique, you get where you're just copying it. It's cookie-cutter reuse of architecture. It's the holy grail of software development, but it really sucks if you're in the business of making art.

And now for the disclaimers..

I feel it only fair to point out the obvious--that my code is not perfect. There is still a fair amount of approximation to what I do every day. And once you throw the topic of debugging into the mix--well, debugging IS an art. Performance art without an audience, perhaps, but an art none the less. Makes one wonder about the cross-pollination between programmers and emo/sad clowns.

On the flip side, I should also point out that just because programming's not art doesn't mean it's not creative. There is a lot of thought and effort that goes into making software for a given task, and just because it works precisely how it was supposed to doesn't mean it didn't take any creativity. Programmers, especially the good ones, are definitely creative people, and to think of them as anything less would be a major insult. (Art or not.)

One last thing.. I am interested in hearing peoples' responses to this. If you think my argument is stupid, then please, let me know. If you think this post was too long and needed some pictures.. well, you're probably right. I'll see what I can do for the next time I write a mini-essay on a broad, generalizing statement like this. :)

programming

Previous post Next post
Up