Is Programming Art?
chromatic writes "A constant question for software developers is 'What is the nature of programming?' Is it art or science? Does creativity or engineering lead the design and implementation of a program? John Littler talked to several well-known and well-respected programmers (including Guido van Rossum, Andy Hunt, Bjarne Stroustrup, Paul Graham, and Richard Stallman) to find their answers; he shares their thoughts and his own in Art and Computer Programming." From the article: "What the heck is art anyway, at least as most people understand it? What do people mean when they say 'art'? A straw poll showed a fair degree of consensus--art is craft plus a special degree of inspiration. This pretty much explains immediately why only art students and art critics at a certain sort of paper favor conceptual art. Conceptual art, of course, often lacks a craft component as people usually understand the term."
I'd say it is mostly science by nature, but you can make it into an art. You can make just about anything into an art with enough creativity. I can see how you might think it could be an art without doing anything special, but I feel it is a lot more technical.
Scott Simontis
http://www.thinkgeek.com/tshirts/coder/321a/
Now that code, is art. Most code is just craft, but to make a working perl program, that is an ascii-art of a camel, that is True Art..
https://www.gnu.org/philosophy/free-sw.html
There's just no one big bucket called "programming." To the extent that one's code interacts with, or communicates to a user, there's ample room for an artful implementation. Especially when the code's purpose is, through that interaction, to inform or pursuade. Yes, that's getting into "content" rather that programming, but the line between those is very, very fuzzy, especially in web development.
That being said, I think there's a certain intrinsic beauty to the way that I indent my subroutines.
Don't disappoint your bird dog. Go to the range.
Art is decided
by only one person. It's
who makes, or wants, art.
>
> "I would describe programming as a craft, which is a kind of art, but not a fine art. Craft means making useful objects with perhaps decorative touches. Fine art means making things purely for their beauty."
>
> When you have to take functionality into account, it often kills the artistic side of the creation.
Depends on the code. Depends on the art.
I'd consider every entrant into contests like the IOOOC (or obfuscated-your-language-of-choice), to be art. I'd consider any esoteric computer language (a whole line of 'em including INTERCAL, Brainf*ck, Ook, and so on) to be art for art's sake.
But as for functionality "killing" the artistic side of the equation -- sometimes the most functional things are the most beautiful. Lamborghini, Ferrari, Aston-Martin, Rolls-Royce, Bentley, XB-70 Valkyrie, SR-71 Blackbird, Concorde. Very functional machines, designed to perform very different functions, for very different people. And all very beautiful.
Bill Budge is not a well-remembered name, because his heyday was the Apple ][ era, and his masterwork was Pinball Construction Set (8-bit object oriented GUI).
But he did a couple of 6502 tutorials in an Apple magazine just before it went bankrupt (Softalk?), and the way he defined variables struck me as exactly like poetry-- he seemed to have meditated on the deep meaning long enough that he knew how to create exactly the right variables, and name them the right names.
Hacking is an art. When some coder develops something in visual basic because he has been told too do so by his boss, and he gives a given ammount of work hours to finish it as fast as he can, it's usually not art. But when J.R. Hacker writes something in C & Asm just to see if he can actually do it, it's art, because of the motivations for developing the software, the hacker will try to make it as best as possible, and the reason to write many parts of the software will be to make it beatyful and elegant, not only in it's code, but while it runs, The same happends with any more conventional form of art, for example: Some teapot produced at a factory, where they will try to produce as many as possible, all equal, that ain't art, but if someone puts all it's effort into making a hand-make teapot, then it will be art.
WTF am I doing replying to an AC at 5 A.M on a Friday night?
I don't want to overstate the point--artistry is found in all forms of programming--but I think it's telling that the advocates of higher-level languages in the interview are more inclined to see programming as art.
The evaluation of an action as 'practical' . . . depends on what it is that one wishes to practice.
Then the dot-com thing happened, and nobody differentiates someone with a mathematics or engineering degree and some kid with a "certification". The result? Lousy software for everyone!
That's why I left the field.
Best Buy can have you arrested
Computer science is something just like everything else. Seriously, get over yourself, you aren't that special. (And our generation isn't special for knowing about computers. Teenagers thought they were smarter than their parents/teachers long before they had computers.)
Now, computer science is an immature field, and has a long way to go. That means it has some challenges to go through as it develops. It also has a different front-end than other fields, sure. There are plenty of differences, but the basic challenges are the same in any design field, and writing programs is a design field. You have some requirements, some tools, some limitations, and you have to find the best way to make them all work together. You have a boss that doesn't understand exactly what you are doing. You have a customer that doesn't know what they want. You are trying to do something that has never been done before, but is based on something that has. Welcome to real life in most professions.
Other than that, I agree with you. A good design is a work of art, at least to those skilled enough to see it. Architects seek to make a building practical but beautiful. A mechanical clock can be amazing to watch. A well-written program is like poetry to read.
I think the first goal of any designer is to get the basics working so that they are in a position to work on the beauty of their design. Too often we are put in an awkward position and it's all we can do to make something that works, screw looking good.
Well, to some degree, engineering can be art.
Consider great works of architecture... certainly, the simple task of building a bridge, or some building can result in the most straight-forward, brute-force application of a solution, but the results would not be as elegant or noteworthy.
Similarly, code can be kludged to hell, lacking any elegance and as a result, impossible to enhance or even maintain... or a software engineer could architect a system that is elegant and even mostly reusable (or even better build such a system out of a large library of code already written).
Unfortunately, the difference is lost amongst probably 80% of the "programmers"
out there, who have more of an attitude of "get 'r done" and "if it ain't broke...". We talk about patterns, algorithms, processes to developing solid applications and systems, but end up dealing with managers or clients who couldn't give a rat's ass about it until a quality audit is announced.
I know a handful of very talented engineers who can design "on the fly" - elegant design work, and as a bonus, they know the engineering side, as well. Put the two together, the SCIENCE of applying basic engineering principles, along with the ART of intuitively understanding the best flow of an application, and you've got solid code.
To put it another way, I've seen guys who know the process side of software engineering inside and out - but couldn't code their way out of a paper bag, and certainly cannot architect a real software system. They know the science, but lack the artistry (i.e the creative thinking).
[dictionary.com]
art
1. Human effort to imitate, supplement, alter, or counteract the work of nature.
2. a) The conscious production or arrangement of sounds, colors, forms, movements, or other elements in a manner that affects the sense of beauty, specifically the production of the beautiful in a graphic or plastic medium.
b)The study of these activities.
c)The product of these activities; human works of beauty considered as a group.
3. High quality of conception or execution, as found in works of beauty; aesthetic value.
4. A field or category of art, such as music, ballet, or literature.
5. A nonscientific branch of learning; one of the liberal arts.
6. a)A system of principles and methods employed in the performance of a set of activities: the art of building.
b)A trade or craft that applies such a system of principles and methods: the art of the lexicographer.
7. a) Skill that is attained by study, practice, or observation: the art of the baker; the blacksmith's art.
b) Skill arising from the exercise of intuitive faculties: "Self-criticism is an art not many are qualified to practice" (Joyce Carol Oates).
8. a)arts Artful devices, stratagems, and tricks
b)Artful contrivance; cunning.
9. Printing. Illustrative material.
[/dictionary.com]
Under articles 6&7 you could make an argument that computer programming is 'an art' but this isn't what most people think of when they think of 'art'. Most people think of art as something like:
"A skillful delivery of a creative message through a medium"
Now using that definition you could say that computer programming could be used to create art (as in an interactive art display, fractal art, or Videogames) but for the most part the programming itself isn't the art. An odd way to think about this is to consider a welder; a welder isn't an artist but an artist could be a welder. So you could say that A computer programmer isn't an artist but an artist could be a computer programmer
PERL
The Jackson Pollack programmer: Throws code at the system, trying to see what works.
Windows
The Michalangelo programmer: Has a grand, sweeping view of what the system should do, but each piece is done in such meticulous detail that it takes years to finish anything.
Gravy Trader
--
"Outlook not so good." That magic 8-ball knows everything! I'll ask about Exchange Server next.
Improvisation may be an interesting way of producing pieces of immediate performance art in small forms. And it was considered an essential skill in music pedagogy through the eighteenth century. But it's the wrong way to write larger forms like symphonies. Large software systems are more like symphonies than jazz-sets. They require a lot of long-range planning. The great symphonists of the nineteenth and early twentieth centuries had an incredible gift for long-range thinking, combined with an unbelieveable ability to keep all of a large production in their heads. Here's a possible clue to the required mental equipment: there are anecdotes about most of the the great composers regarding their prodigious, almost inhuman memory-power.
same as code, it's just people don't like looking at code as engineering for some reason.
One of the core differences that makes it so hard to compare software engineering with other engineering disciplines (particularly bridge building and building building) is that software is fundamentally more malleable.
If you build a condominium, then decide you want the first floor to be six feet taller, it is exceedingly expensive to change it. Furthermore it is obvious to the layman why it is expensive to change it, and why trying to bodge in a "quick fix" will result in an unstable building.
Contrast this with software. Well designed software can often have the first floor wiped out and replaced in a matter of hours or days, without having any adverse effects in the rest of the system - but not always. And it is rarely obvious to the layman why something is expensive to modify (I just want one more button that does account settlement - why is that so hard?). Heck, problem code is often a surprise to those who are well versed in the field.
This is particularly common with software that is rushed. You've rushed out a system that is krufty and does not lend itself to modification, and it went so quickly that you've established unrealistic expectations in the customer. The layman asks, "Why, if it only took two weeks to build the entire building, will it take another three weeks to add six feet to the first floor?" It is difficult then to explain to the customer that in your rush to get the first release out, you only used half the required number of studs, and they won't take the load of an additional six feet.
Stop-Prism.org: Opt Out of Surveillance
There isn't a dichotomy... Form Follows Function...it's the combination of Style and Substance that makes the bridge (building, supercar, program, watch) a cohesive work. Every line (of the bridge, Ferrari, or code) is both attractive and necessary...there is no excess, nothing thrown in without reason, and that's what makes it elegant.
The US Supreme Court made a definitive ruling on the definition of art in the 1929 case Brancusi vs. US Treasury Dept.
Constantin Brancusi imported his famous metal sculpture "Bird in Flight" and was assessed a 40% tariff by Customs, categorizing it as "Machined metal implements, Kitchen Utensils, and Hospital Supplies" rather than the 0% tariff applied to art objects. Brancusi sued the Treasury Department to recover the tariff.
Eventually the Supreme Court agreed with Brancusi that the object was art rather than a mere machined metal object. The core definition of an art object is: something made with the express purpose of being an art object, made by someone recognized as an artist by other artists.
Well, that is a fairly circular definition, in part, but it does clearly lay out the rules. Artists (those people society generally recognizes as artists) get to define art. The corollary: programmers do not get to define their work as art.
Writes Fortran in a myriad of languages.
Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
Now that is not true, just as many Fashion Designers design cloths that have no practical value outside of being "showcased", I as a programmer can write a program that has no practical purpose outside of showing others a particularly nifty bit of code.
Need help treating your acne? Come here!
I agree, but not completely. Paraphrasing the czech theorist Jan Mukarovsky[1]: art is when the aesthetic function is greater than all other functions.
Therefore, I would conclude that programming per se is not art, but that it very well can be - if intended. Consider the IOCCC. While all competition entries do perform some kind of practical function, the main purpose of each one is to be elegant, beautiful, ingenious etc.; properties which we usually associate with art.[2]
[1] Mukarovsky, Jan, "Aesthetic Function, Norm, and Value as Social Facts.", 1936.
[2] Note to self: I need to learn english grammar and spelling.
here: http://chriscoyne.com/cfdg/
I just found out about this today from Boingboing.
Code snippets, recursive loops, and simple drawing commands turn a script into a remarkably beautiful rendering. I have been messing with it for hours and have only just gotten started. There is MUCH you can do with this.
Engineering is engineering. Sure there is lots of cross talk between engineering and science, you can't do one without the other and all that, but engineers don't really care that much about stuff that doesn't help them get the job done. If it's right enough, it's right enough. That is anethma to science, but the basis of engineering. Call it the sensible, well understood application of scientific knowledge.
Nerd rage is the funniest rage.
Been there done that.
Got myself a Bachelor of Business Computing (they've since renamed it...) from a local school. It covered some Business Stuff, OO, Design Patterns, Project Management, Usability, Extreme Programming, and similar. Had a couple of pure language classes too. Had I done Comp Sci, I think I'd be a more l33t coder, but this set me up to be far more useful in the Real World. We'll just have to wait for the established Universities to make this kind of move.
Forget thrust, drag, lift and weight. Airplanes fly because of money.
Another example is performance art. None of it has practical value, it's not craft, nor is most of it aesthetically pleasing to the eyes.
I won't speak of all performance arts, just Dance, but it can have a practical value. For both the dancer and for the audience. Years ago I was an amateur dancer, having taken some dance classes in college, danced in different dances, and worked on other dance performances. Several years ago I had a bad accident and the first thing I thought of for physical therapy was dance, so I talked with a friend who taught dance including the ones I took and she recommended I take ballet saying it would help with my coordination and endurance. As it was I didn't have the endurance to take the class. The last tyme I went to class, as usual, I stayed there after ballet and watched the Jazz class and I realized that while I could recall the steps for Jazz, I couldn't recall them for ballet, there would of been no way I would of had the energy for jazz. As for watching, like myself I've known others who feel so much better and/or motivated after watching a dance performance.
And no I wasn't an art or dance major, my major was computer engineering.
FalconShould there be a Law?
I believe it is art for the very simple reason that there are multiple ways to get the same result. It would be a science if there was one single definate way to do something.
Never could figure out why my girl liked my bitch tits, then I found out she was a lesbian.
programming is like construction work. some programming is simple - just laying one brick atop another. other programming is harder - skyscraping projects. still other programming requires elegance - like a fine architectural piece.
i'm a warehouse-builder, now. i consider it quite on a par with construction work.
Wikipedia: Art. There's actually some good and relevent info in there. To wit: "Art, in its broadest meaning, is the expression of creativity or imagination, or both." Based on that, I'd say that programming has a strong artistic component.
Helping with organizational effectiveness is our job.
When you have to take functionality into account, it often kills the artistic side of the creation.
:-) to others. If you set out to do this with any project I believe it can be considered art.
That would mean that architecture, furniture design, etc lacks in the artistic side? I dont think this is the case at all - giving something functionality doesnt remove the artistic side, they complement each other and are not mutualy exclusive.
Well, if I take a piece of wood, place it on 4 other pieces of wood and call it a table, is that art? However if I select a nice big tree and carve an ornate table out of it, yes I can see that as art.
Similarly, if I design a block of square flats without much care for aesthetic appeal, I don't consider that art. But I would class the design of the Sydney Opera House as art.
Art is very subjective. Someone (can't remember who) placed a toilet behind one way mirrors in the middle of a European city and called that art. Not my cup of tea, but again, it's all subjective.
I personally believe that art is an attempt to convey a personal feeling and/or message (no, not email or popup errors
Shitdrummer.
while...
[The phrase "software engineering" above is really in angle brackets, but I've not figured out how to include literal angle brackets here]
In high risk applications (for example, most structural engineering, avionics software, and some medical software), it is appropriate to do more analysis than in low risk applications where the impact of failure is minimal (and, at worst, likely only financial). This is true when designing both software and, for example, structures. However, it is the nature of software that the cost of failure is low in most cases while in structural engineering, the opposite is true - I would assume that mechanical engineering falls between the two. Just as it would be inappropriate for a structural engineer who is designing a fence to contain a domestic canine to spend twelve person months analyzing the soil, wind loads, native fungi, and dog body momentum to design a fence that can be "proved" to last fifteen years without repair (assuming that is the requirement), it would be inappropriate for a software engineer developing a specialized word processor to spend a similar amount of time to prove that there would be no gui-poo left over in any situation. One of the most important parts of all engineering is making appropriate cost/benefit tradeoffs - the ultimate goal is to produce something, not to analyze it forever. You don't indicate what sort of mechanical engineering you do, but my experience with mechanical engineering jobs is that the engineer is often expected to make professional, non mathematical, judgments about what needs to be analyzed to what degree.
Regarding the assertion "I'm sorry, but if you don't analyze your work to prove that it works, you don't get to be an engineer."... Actually, most of the analysis done by structural engineers, and I suspect others, proves nothing about how the resulting product will perform. Most of this work is based on "givens" that the engineer assumes (such as elasticity or strength of a material) and models of the real world that are not completely accurate. As well, think about it, when was the last time you saw a mathematical proof in a mechanical design - mostly the academics measure, evaluate, and build models that "engineers" then crank through to make sure that this walkway won't collapse or this shaft won't shear under these loads. Software development, still in its relative infancy, lacks most of these models. My understanding is that models utilized in the design the Tacoma Narrows suspension bridge that collapsed in 1940 were lacking sufficient modeling of dynamics - yet surely you would consider those who designed the bridge "engineers" even though turning the crank on established practices (rather than proving that the bridge would "work") resulted in a failure?
It is patently untrue that, in general, software engineers are not accountable for their work. Maybe this is true in some companies or environments, but I've personally gotten rid of software engineers for poor quality work and I've seen many others take the plunge as well - including for a single error which cost a customer a lot of money due to a wrong answer (no injury or loss of life was involved!). I can also assure you that it is common for software engineers to retain significant responsibility for the product after it releases. First, they have
Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading
As a musician, I deal with lots of music from hundreds of years ago, and the best music often takes many years to reach its proper place in public opinion. The art of programming is relatively young, and only pioneering conceptual giants like Babbage (Lovelace?) and Turing spring to my mind as 'great' programmers (though I have never studied computer science).
For example, it's not obvious from a quick search whether any one person was instrumental in conceiving the multi-threaded Apollo Guidance Computer. Unfortunately this is probably the most glamourous computer built in the 1960s, and I fear the rapid pace of tecnological change will keep the art of programming focussed only on the present, relegating both inspired and dull programming to obscurity before proper judgements can be made.
I’m old enough to remember 16K of memory being described as “whopping”
... because he doesn't ever try to "break his code". Note that all the quoted commentary is in support of the thesis with no serious look at opposing points of view.
In order for software to be correct it must run. Running involves being mathematically correct for the target platform. i.e., sequence, size, and timing are all correct.
Artists don't rework their art based on critique, i.e., peer review.
Is CS art equal to code bloat? A wheel is a wheel; strengthening the wheel usually isn't considered art, but decorating the wheel is considered art. Non-functional decoration of software is code bloat.