Those who view programming as art consider ProgrammingAsEngineering
a complete waste of time. Since programming is essentially a creative endeavour, trying to develop ProcessPatterns
seems futile at best.
An example which indicates the foolhardiness of trying to develop metrics for a creative endeavour can be seen in BuildingTheWorldsHeaviestAirplane
This is too extreme. Programming can be seen both as art and craft at the same time. It's craft in its use of well known tools and techniques - patterns. But it's art in the precision and elegance of fitting these to the problem domain, the generative power of the resulting solution. Slipping into the MentalStateCalledFlow we see solutions are all of a piece, just as MichelangeloBuonarotti said of his David: "I looked into the stone and saw him there, and just chipped away everything else."
What difference does it make that he used perspective and human models, and we use classes and patterns? We do the same thing - though maybe not with so much craft as had he.
Programming is art. Or is it a craft? Of related interest, you may want to check out SoftwareDevelopmentAsCraft
You can also read what Knuth had to say on precisely this topic in his TuringAward
You can throw a frame around anything and call it art. I did. When I was in college I wrote a cool (in my naivete) macro preprocessor and hung in my room like a painting. I thought that the indentation made it look neat. Since I started as an architecture major I was used to seeing form in everything, even the arrangement of source code.
The problem with ProgrammingAsArt
is that it is misplaced. It is easy to get hung up on the balance and internal form of a system and forget that the structure is there to serve the goals of someone who is paying not for aesthetics but for value. It is nice that what engineers usually appreciate as elegance has true value in a system with regard to maintenance and reliability, but some of these values may be taken out of proportion to what the customer needs. Some people want and are willing to pay for a house built by a famous architect. Others just want a simple one that fits their needs. -- MichaelFeathers
Need art be complex? Need it be useless? What's important in art, what defines art, is that it transports the user. Good programming, simple and useful, transports the user, moves the user, opens up possibilities that the user hadn't thought of before. This here wiki, simple as a knotted string, was constructed as art and exhibits the best properties of art.
What the customer wants and what the customer needs are always very different things. The customer wants the moon, and he wants it yesterday. What we give him is a lightbulb, and we'll sell him the electricity too. To make code maintainable, reliable and scalable requires symmetry, genericity, generativeness - the best properties of art. What is beautiful is not necessarily useful, but what is useful is necessarily beautiful.
Is programming art? I don't know; perhaps a few examples are. A craft? I think that's closer. I certainly isn't an engineering discipline (yet?).
I think there are cross-currents connecting programming, minimalism, and haiku (among other things).
Programming is both art and craft. Sometimes simultaneously, and sometimes not...
This probably boils down to petting our own ego. "No, no, what I do is art
." While many would argue that few software projects show the discipline and theoretical background to be considered "Engineering", "Craft" sounds like something you expect a 6-year old to do with popsicle sticks. "Art" somehow seems elevated and dignified, which should be all the argument we need to realize that programming is not art.
Everything I do in relation to coding can be considered Art to some degree.
* The creative process of writing a specification, ensuring the layout of the document is aesthetically pleasing to the eye will make it easier to read.
* The diagrams used to describe the database structure are laid out so that they are clear and describe a physical design (isn't that what some Art does - shows a real world / imaginary item abstracted in some other medium?)
* The design of the user interface and use of colours to provide a pleasant working environment requires an artistic eye - especially when coding for web sites that need to attract the users.
* The comments in the code use space and "#" or similar devices, and where the editor allows it colouring of the code to make it easier to see. Again an aesthetically pleasing layout makes it easier to read and debug.
It is all artistic in some way. All artisst will use some form of tool to create their art be it a paint brush and canvas or a mallet and marble. So artistic software developers will use software and computers in generating their art.
And doesn't all art follow some structure to a degree. Perspective in fine art painting is all based on mathematical formula. Pleasant colour combinations can be mathematically defined in terms of the spectrum. And music follows mathematical rules to ensure that chords are pleasant to the ear.
Those developers who deny that software coding is not artistic are probably responsible for the dreadful user interfaces that are inflicted upon us.
I think NealPeart?
describes the sentiment exactly in CloserToTheHeart?
said, "Anything an artist spits is art."
An artist will create ProgrammingAsArt
, an engineer: ProgrammingAsEngineering
, a craftsman: ProgrammingAsCraft?
. How an individual expresses in any language (including "natural" languages such as English or Swahili) is an inteplay of their cognitive preferences (intuitive vs. analytical, structured vs. free-flowing, etc.) and abilities, and the constraints and affordances of the language.
Additionally, one individual may combine elements of art, craftsmanship and engineering disciplines to produce ProgrammingAsGenius?
. I like to think that LeonardoDaVinci
would rock the programming casbah :D
See also: PaintingIsSimilarToCoding