Programming is art. Let me define art briefly (taken from my art writeup): Art is a method of communication which unifies surface details and form while taking both the intended meaning and aesthetics into account. This requires significant amounts of problem solving. The artist is constantly asking, "How can I best express this idea without ruining the proportions of the work as a whole."

So how does this apply to programming?

  • Programming is an attempt to communicate with the computer. The programmer is trying to get something across to the machine.
  • The programmer is required to do this while staying within certain guidelines (including speed and efficiency requirements, formal requirements like a class structure, and so on). See my node on creativity for more about problem solving and art.
  • Because of all this, a programmer cannot simply plug values into a formula and say, "My work is done." Every problem (a program that must be written) requires a different approach.

    West Country Guy: You're correct that engineers solve problems creatively; however, they aren't trying to communicate. This is what differentiates creativity and art. Creativity is one of the components of art; but creativity is not art itself.

    This is something I forgot to make clear, though.

    You definitely have a point about technical drawings being communication. Is this a separate discipline from engineering itself, however? I'm not sure about whether or not the end result (a bridge, for example) is a form of communication. Perhaps if alphabetical symbols were written into the design (although this might be getting into some special case).

  • You are wrong because your explanation fits perfectly what an Engineer does, which is to solve problems creatively.

    And since programming is a form of expression mathmatically. the following defination of Engineering from Websters proves that programing is an Engineering discipline.

    Engineering

    The application of scientific and mathematical principles to practical ends such as the design, manufacture, and operation of efficient and economical structures, machines, processes, and systems.

    Art Tatum: Isnt technical drawing a form of communication?, How about an Equation that describes a system, all are the answers of the Problems which Engineers try to creatively solve. The Product of Engineering is communication, the communication of the solutions to the questions which were orignally posed to them.

    Conversely, engineering can also be argued to be art as much as programming is.

    Only half of engineering is plugging numbers into the formulae. The other half consists of constructing a device that performs the way the formulae predict that it should without catastrophic results.

    You can crunch numbers all day and come up with a set of ratios and measurements that can be turned into a physical airplane that is supposed to carry 6 people for 1000 miles at a speed of 300 knots. But if in testing, the plane can only go 600 miles even with only 1 person inside (or pancakes a hundred yards after takeoff), then you did something wrong no matter what your calculations are saying.

    Just like a computer program. Your code may check out perfectly, with no compiler warnings, and it may fit in the designated memory footprint and meet all of the other design requirements. But if it doesn't do what it's supposed to, then something's still wrong. (Which is exactly what Art Tatum was saying in the original writeup.)

    There's no difference at all between the two. Programming is engineering, or they're both art forms.

    Sure programming is an art. But many Electrical Engineers I know would tell you that designing ASIC chips is like an art, more creative than formulaic and requiring a feel for the "aesthetics" of the design. Certainly Civil Engineers also could qualify for a certain amount of artistry in their profession, buildings and bridges not only have to maintain functionality, but they also have to look good! In fact all fields of Engineering can be argued to be arts (by Art Tatum's definition).

    An Engineer is required to solve a problem within the giving specifications, at least as much as programmers. If you think this does not require creativity then you are sadly mistaken. An Engineer cannot simply plug things into a formula and expect her work to be done. There is far more to it than that, and it all stems from the creativity of the engineer.

    Artists do not have the monopoly on creativity, just as Engineers do not have the monopoly on using screwdrivers.

    Programmers do not try to "communicate" with their computers any more that a Mechanical Engineer would "communicate" with a gear. Computers are simply a (very complex and powerful) tool that is used by programmers.

    Aside from all this I agree with Art Tatem's assesment that programming is an art, however, software development should be considered engineering. Why? Engineers are people who build and design things that people depend on for their functionality. Artists, however good, bear no such responsibility to their audience. There is an implicit responsibility that all engineers must bear, because ultimately they are depended on for the safety and functionality of their designs.

    Software development (not just programming, which is no more engineering than drafting is, but rather the entire slate of software design), should be considered an engineering discipline because ultimately those who design the software must be responsible for the functionality and safety of what they create. It is this responsibility that defines Engineering.

    This brings up an interesting observation about the discipline of Computer Science: while you're at school, what you're learning throughout all of your Computer Science classes is not how to program, but rather how to approach the problem, and use the limitations of the environment you're working in to make the most efficient way to solve the problem.

    At least at any department worth its salt, that should be what you are learning. I've had professor after professor exonorate to the class that this is NOT a trade school, that the reason for the ulcers and $15,000 a year is to learn how to think, not to learn how to do a simple, rote task.

    I’m not going to dispute the idea that programming can be considered an art form, but there is a consequence of that kind of thinking that has a great effect on software industry these days.

    When I try to explain the software development process, I usually use the common analogybuilding software is like building a house.” It’s a good analogy, especially when you try to explain what the different members of a development project do. The analogy fails at one point, though: no one in his right mind would build a house where everything is designed and built from scratch, where every nail and board are constructed specifically for that house only. If you look at most software projects, this is exactly what is going on. You might argue that this is due to the lack of standardized components, and I would agree, but we have been talking about components in one form or the other for decades now, and there are still not many of them around. Why? Because we don’t want them!

    When every developer considers himself to be an artist, every program he writes will be an attempt at a masterpiece. He will want to control every detail and even though he can borrow ideas from others, he will try to give it his own personal touch. There are tools and processes around that could turn software development into an industrial process like an assembly line, but can you imagine an artist working like that? No more masterpieces, just functional, boring software.

    The software industry today is where the car industry was seventy years or more ago in this respect. Car designers and engineers were visionaries that designed new car models from scratch, building prototypes by hand. Some parts of the cars had to be constructed by “artists” and were, in a way, masterpieces. Now, most cars are built from stock components and designers do all their designing on computers, not even having to make a physical prototype. When the designing is done, they just send down the specs to the assembly line and a new car pops out.

    I believe that this is how the software industry will look too. It’s boring and unromantic, but we must accept that we can’t deliver what the market demands, and we have to speed up the process. Unfortunately, this means that we need less artists and more skilled “assembly line workers”.

    Log in or register to write something here or to contact authors.