views:

840

answers:

22

It is fundamentally a branch of mathematics, requires rigid discipline and a lot of knowledge to really understand what's up, as a science. And is deterministic.

But there's more elegant and (beautiful?) way to achieve same results, that may seems a sort of art expression.

What is in your opinion the prevalent aspect of programming? And Why?

(...forgive my bad, bad english...)

+14  A: 

I think any programmer who considers himself an artist is a disaster waiting to happen.

krosenvold
Yah, gotta' agree here!
Unkwntech
Oh yeah! How do you paint a window then?
kenny
kenny, i am a linux guy
Depends.... I have a performing arts background (singing, dancing, acting all of which I still love and do) and a weaker academic background. I'm not entirely comfortable with bit shifting and so forth but am very comfortable with abstraction, architecture, elegance, consistency and communication.
Quibblesome
+18  A: 

Neither art nor science. It's a design discipline.

Design deals with creating "purposive" objects. They must fit within constraints and do what they're meant to. But it also needs creativity to find the right solution. There are no formulae to get there simply by deduction.

interstar
Absolutely spot on.
ChrisA
+1 - I couldn't have said it any better myself...
bcasp
+7  A: 

I have always believed that programming (in the general sense of the term - solving problems etc) is very artistic, elegant and beautiful (if done right)

I have had co-workers who consider them selves good programmers because they are logical and rational. Their code was always run of the mill and of average-efficiency. In itself this isn't a bad thing (most software of this type is stable) - but I wouldn't consider them to be good programmers, they were simply following taught patterns (and thus their code would never be the best)

Since reading Godel, Escher and Bach: An Eternal Golden Braid I have become more set on this view.

Remember: By default mathematics is beautiful.

Jamie Lewis
+1 for reference to GEB, and for a final sentence that expresses what I was trying to say much more succintly and powerfully!
Andrzej Doyle
I haven't read GEB, so no opinion there, but the last sentence, definetly +1
Binary Worrier
+4  A: 

I would say that the dichotomy is slightly misleading. If one was forced to pick between the two, then yeah, it's definitely closer to science than art.

But the implicit assumption that science is all entirely formula-driven and linear, and art is all handwavy, is potentially harmful. All actual real-world science involves taking the existing knowledge, then using one's imagination to come up with a novel and useful way to combine it, apply it, modify it to acheive new things. There's nothing exciting about using Pythagoras' theorem to work out that a right and triangle with side of 3 and 4 units has a 5-unit long hypotenuse - that's been done before and nothing is really gained from doing it again. The excitement and advancement comes from applying this in new ways, to new problems, in order to really discover something

Coding is often about imagination - or rather, being able to assess all these dry principles and design patterns etc, in order to work out exactly how they're going to work in your case. A lot of the time, it's alsmost philosophical in that you have to ignore all the mainly irrelevant surface appearances, and drill right down to the core of the problem, what it is in the abstract.

I think that elegance in programming is pleasing not solely for aesthetic reasons (as e.g. a painting would be), but also because it reflects purity of understanding and fundamental strength in a relatively simple mathematical principle. If you can express a lot in a relatively short and highly readable bit of code, there's a lot of power there, and that's good to see.

Andrzej Doyle
-1: "science is all entirely formula-driven and linear" Who says that? None of the scientists I work with are linear at all. The good ones respect a formula, however.
S.Lott
agreed. I didn't want to imply science wasn't creative. The real reason programming isn't a science is that the two have different "deliverables". Science delivers knowledge, but programming delivers a solution to a problem.
interstar
@S. Lott - That was entirely my point, that it's a false dichotomy to think like that. I said just afterwards that it was harmful to hold such an opinion. :-)
Andrzej Doyle
+2  A: 

Science-versus-art, to me, is a false dichotomy. These two pursuits are entirely unrelated. The first is to do with collecting knowledge; the second with expressing one's sentiments. Therefore, the question, "is anything a science or an art" is practically always invalid.

Frederick
But I don't ask if programming is the one OR the other one. My question is "what is the prevalent aspect". Even I think there's not incompatibility between art and science, instead they maybe two differents aspect of the same thing...
tanathos
@tanathos: Yes, actually you did ask if it's science OR art. That's the text of the question. Do you want to revise the question?
S.Lott
+45  A: 

Programming is a craft.

You need to know your tools (i.e. languages, patterns, IDEs, design principles, etc.) and how to use them. This makes you a simple developer.

But you also have to have inspiring ideas to excel at your craft. This makes you a good developer.

Just like a cabinetmaker: Most are skilled at creating basic furniture, but there are some who love their craft and can add their inspiration to their designs to make excellent furniture.

Sebastian Dietz
+1 completely agree
eglasius
+1 I was thinking exactly the same just the second before reading it ;-)
Khelben
I agree, but I would argue that even most programmers who are creative and have inspiring ideas may still not be able to produce quality code and a great design, especially in a complex system. Example: You can learn to paint, sculpt and draw, but you may never produce anything nice, even if your creative! The same goes for a programmer! I think that just like artists are somehow naturaly talented at their art, some programmers have it and others never will.
Jeach
+1  A: 

Computer Science is a science. programming is a craft, or design discipline.

Javier
+7  A: 

Let's start with how wikipedia defines science:

Science (from the Latin scientia, meaning "knowledge" or "knowing") is the effort to discover, and increase human understanding of how the physical world works. Using controlled methods, scientists collect data in the form of observations, records of observable physical evidence of natural phenomena, and analyze this information to construct theoretical explanations of how things work.

According to that definition, programming is not a science.

But, even if you take a more broad view and drop the "physical phenomenon" part of the definition, getting something like:

Science (from the Latin scientia, meaning "knowledge" or "knowing") is the effort to discover, and increase human understanding

What you get still doesn't cover programming.

Programming is not the systematic search for knowledge. It's a craft, that people use to create things. It's a systematic method used to produce computer programs. That makes it much more like art, like say painting or welding. I doubt few people would consider welding to be a science.

The medium of programming is abstract mathematics, rather than say oil paints or metal. But that still doesn't make it a science.

Scott Wisniewski
Totally agree, even with a subjetive question you can get an objetive answer
Rulas
+3  A: 

Programming is more engineering than science. It's the application of scientific and other kinds of knowledge to solve a given problem. Applying art or craftsmanship to engineering achieves an elegant solution.

tvanfosson
A: 

I think, there is a strong architectual-aspect in programming (with Statik (the objects) and Dynamic (the interaction between objects) and tools and craft and bringing together many disciples and knowing what can be done, what has been done and what is worth a try to do)

Peter Miehle
A: 

The term "programming" is too broad to be regarded as just one thing. By way of (weak) analogy, people use computers in about as many ways as they use cars, so "driving" covers a wide range of activities and purposes.

There are now languages (e.g. Context Free) whose domain is the creation of visual images, either for fun or for serious artistic pursuit. There are languages for creating games, accounts payable systems, automated factories, and operating systems.

There are people in almost all of those domains who primarily do their coding as an 8-to-5 job, and people who have a passion for it.

There are also all levels of skills in the population of programmers.

So my answer to your question is "There are some who pursue it as each."

joel.neely
+1  A: 

It's neither, it is a tool (for e.g. science), and it is an art to master it.

As a tool for science it is indespensible as it can take analysis to much greater levels on complexity than any traditional tools can.

Fredriku73
+10  A: 

Computer Science is a science. As many have said before, Programming is not Computer Science.

The main components of our work also do not involve experiments. I can't think of the last time I had a "Control" and a "Test A", "Test B", etc.

So, it's not a theoretical science. It's not an experimental science. It's not science.

Programming is an art form. We take specifications (usually) and create what are basically literary works. We even have copyright, as authors and musicians do.

Sure... we have methodologies, frameworks, skills, algorithms, a vast set of things you've got to know to be any good. That just makes it a technically challenging art. In the end it comes down to creating a literary work.

Let's take a painter as an example, one that we all should be able to agree very much fits in the artist camp.

A painter does not usually have the same requirements that a programmer has. If you told a painter he needed to do a painting of your wife on a bench in a specific Rembrandt style, with her favorite horse in the background and little blue jays on a pine tree branch overhead... you've just created a specification. I can't see the difference between that and a standard app or web site spec.

A good painter will have acquired many specific skills (a sponge for tree leaves, certain types of brush swirls for this or that) that map to our toolkit skills like SQL for data queries, Gimp for icon or splash screen art, debugging, etc, etc.

Many probably even have grand (in their own head) frameworks or methodologies for how a proper painting should be contructed. (Best canvas, paint types and brands, angle and height from the floor, how to mix the paints and possibly additives to add gloss, longevity...)

Some for this sort of contrived grunt work may even have patterned stencils, stamps, etc for common contructs (code generators, anyone?)

They certainly have Design Patterns and Anti-Patterns. They're just usually not followed with the self-important posturing BS the way they sometimes are in our field.

Now, there's a lot of O(n), O(log n) stuff we're supposed to be thinking about. It's not much different than a sculptor who needs to know a^2 + b^2 = c^2, or how to construct a geodesic dome, etc etc to make whatever neat things he's trying to make this month.

If you actually expand a computer science theory, or try to understand it, etc... You've just taken a break from programming to work on computer science. It's no longer programming.

You can think that "any programmer who considers himself an artist is a disaster waiting to happen" if you want, and hide behind the intense technical mass of stuff you're supposed to know and apply... calling it all science.

It's not. At best, you're applying bits of a science. Most days, you're probably not even doing that.

I can see why you would say this... there are quite frightening "programmers" out there. I empathize. Believe me... I really do.

At the low end, a "code monkey" is not much different than a painter who's told EXACTLY how to do EVERYTHING. An authorized stamp for trees. One True Vendor he should get all supplies from. How to sit properly on the stool. In the morning, he should paint landscapes. Afternoons are for portraits. He's a "paint monkey", but still an artist. A very sad, pathetic excuse for an artist... but an artist just the same.

darron
+1  A: 

Donald Knuth says it's an art as in "artisan". Hard to argue with that authority.

duffymo
+1  A: 

Despite the deterministic way a computer programs runs, it doesn't follow, nor is it the case, that the process by which that computer program is created, is also a deterministic one.

By which I mean, it is not usually possible to follow a series of steps, each of which follows logically from the previous, and out at the end pops the computer program. I say 'usually', because of course there are some things that can be generated. I'm not talking about these, I'm talking about the finding of a solution to a complex problem.

I'm sure many people here will empathise with the sense in which the process of invention (of a computer program) often becomes a process of discovery, in the search for the "right" solution.

This sense of discovery is something we connect to essentially on an emotional, not a logical level, and so it's perhaps not surprising that it feels more like art than science. Artists, too, are looking for something that's "right" to them.

We have to think scientifically at times, but that doesn't make programming science. We have to think logically, but that doesn't stop us from bringing design creativity - and artistry - to bear on what we do.

ChrisA
A: 

Both.

Those who think it is like an engineering science branch, purely guided by discipline an the application of well known techniques are just as wrong as those who think its pure creativity. The world is not just black or white.

It is in fact more like doing physics than doing mathematics.

Imagine Einstein, when he though how it would feel to travel with light-speed, thinking about if the light-wave would look like frozen, static. Eventually, he threw away many of the "considered common knowledge" facts, gave up some of the old models for space and time, and eventually lead to relativity theory. Later, he found that he had not enough mathematical background and consulted others to help him. But it was a mixture of imagination (art) and application of known, disciplined techniques (science, engineering).

Thats very similar to what computer science often is - you do need new and clever idea as ignition spark, AND a solid mathematical background to make choices and prove things AND some craftmanship to eventually realize things. And an environment (language, IDE, company, money, society) to support you.

Any of the above mentioned skills alone will make you only average.

From my experience, it's usually the most uncreative ones, who end up becoming the worst nitpickers and worst project managers, which tell everyone that the process alone is the major factor. And that programmer's creativity is no longer needed when bubbles and arrows can be drawn at the green table. I have my doubts - we will see...

Of course, it also depends on which kind of application you are writing. There definitely are areas, where creativity is not needed and sometimes even hinders. Writing "just another webshop" using existing PHP platforms is probably not too much fun. In contrast, inventing a completely new way of doing things, like in Seaside, using continuations as a very intuitive control flow mechanism and to save back-button state is definitely very creative.

blabla999
+9  A: 

Debugging is a science.

Software development is a craft.

Application design is an art.

JacquesB
+1  A: 

Once the science is mastered, it becomes art.

Brian M. Hunt
In art they call this 'you've got to master the rules before you can break them."
Todd Moses
A: 

Well the source code of a program can be a work of art, but most code are not!

If you compare this phenomena with other stuff like, architecture you will notice that some buildings are also a work of art (but not art), but most house are not!

You can compare it with bridge building, and you will see the same pattern. Some are really wonderful, but most are just just ugly grey concrete thing that are quite practical.

And the great architects and bridge builders gets eternal glory, but guess what so do programmers. It is harder since most people only see the fruits from the code, the running program...

/Johan

Johan
A: 

If you think of the readability-maintainability of your code by other PEOPLE then how can this ever be reduced to a science. E.g. even the emotional tone of your comments can have an impact on your Team. In other words how to relate to other members of your Programming Team can't be realistically excluded from Computer Science. I searched-and-found a reference to Knuth within the other replies, but it's gotten to big for just one person, which makes it a different game.

pngaz
+3  A: 

There are definitely aspects of both science and art in computer programming. Many disciplines (such as electronics) are described as 'an imprecise science'. Conversely, I like to describe programming as 'an exact art'.

I have no idea where my programming ability comes from. I sit at the keyboard and "it just happens". Some things have rules and fixed ways of doing things, but in general when I write code I'm not following any fixed process, it is a creative act. Inspiration for algorithms and program structure all happens somewhere in my subconcious creative mind. In this sense, programming is an art. However, imperfections in the code lead to bugs and incorrect results, so the code must be exactly right. In that sense, it is a science.

I once heard software described as "The emotional interface to the machine" and I think there is some truth in that. Much of what goes into writing a computer program is based on emotion, intuition and gut instinct, although that builds upon a foundation of science and methematics.

Overall, I think the term "Exact Art" describes it best.

Tim Long
A: 

IT depends on whether the creator is an artist or not.

IF the creator copies other peoples works or art, he is not an artist;

But if the creator wants to develop a gift and something unique, then the creator has to be an artist on order to do that.

Koekiebox