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...)


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.


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.


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


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.


Debugging is a science.

Software development is a craft.

Application design is an art.


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.


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.


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.


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.


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.


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.


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


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.


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


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.


Once the science is mastered, it becomes art.


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)


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."



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.


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...



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.


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.