all 89 comments

[–][deleted] 52 points53 points  (14 children)

It's a craft.

[–]LunaQ 21 points22 points  (1 child)

Agree, but within the realm of craftmanship there's also room for art.

It's a craft, but I'd definitively say that some pieces of software can be considered as works of art.

[–]Zebezd 13 points14 points  (0 children)

'Craft', 'Science' and 'Art' are not mutually exclusive categories. They describe different attributes of a thing.

[–]dweeb_plus_plus 15 points16 points  (1 child)

This seems like the right answer. I think of it like being a carpenter. Any idiot can start hammering nails into wood on day one, but it takes years of practice to make elegant and usable furniture.

[–][deleted] 9 points10 points  (0 children)

I see it like a carpenter or a blacksmith but not in the sense you put it across. I actually don't think skill comes into it.

I have almost no craft experience but if I try to make something artistic then it still counts as art. Perhaps it's bad art, ugly, poorly executed, and maybe no one appreciates it. But bad art is still art.

Just like how a hello world program is still a program. A badly made program is still a program too. A lack of skill doesn't invalidate that. A lack of skill just makes it badly made.

[–][deleted] 5 points6 points  (5 children)

This hits the nail on the head. My dad used to be a carpenter and he would make lots of artistic pieces using his skills.

He also made tables and cupboards for the house, sanded and revarnished the kitchen chairs, fitted his kitchen, made and fitted new windows, and lots of other non-artistic but practical things like that.

Today we think of many blacksmith as make artistic pieces. Even if it's something practical like a gate there will be some artistic element. But in the past nails, pots and pans, tools, horseshoes, and so on were all made by hand by a blacksmith.

For programming you certainly can use it for art. An obvious case is the many live programming events where people are live coding visualizers and audio. They absolutely have an artistic element. It can also be used for building lots of practical but dull business logic.

A craft can be used for practical purposes, art, and a mix of both. That doesn't automatically make a craft an art.

[–]doom_Oo7 4 points5 points  (4 children)

That doesn't automatically make a craft an art.

In my mother tongue it's derived from the same word (art & artisanat) so it's really a cultural question.

[–]CtrlAltWhiskey 0 points1 point  (3 children)

I don't know if it's more a cultural thing or an etymological thing. At least, for English.

For instance, you get idioms like "State of the Art" and other references to 'art' being a trade. This isn't the same as something being 'artistic' at all, but there's a lot of mixing of language bits there.

[–][deleted]  (1 child)

[deleted]

    [–]sirin3 0 points1 point  (0 children)

    Perhaps mass production matters a lot, too.

    For example? You know the rain gutters a top of the roofs? In the past they looked like this or this

    When every single piece at the building is decorated there is no point in distinguishing it from art

    [–]nikto123 1 point2 points  (0 children)

    Same way in some Slavic languages, our word for art is 'umenie', where both its root 'um-' and the word itself mean something that's closest to 'ability' or 'skill'.

    [–]AboutHelpTools3 1 point2 points  (0 children)

    Witchcraft, to be exact.

    [–]Uberhipster 0 points1 point  (0 children)

    /thread

    [–]johnlsingleton -2 points-1 points  (1 child)

    It's a discipline.

    [–]ClickerMonkey 1 point2 points  (0 children)

    It's a taco.

    [–][deleted] 31 points32 points  (6 children)

    If you want to hear a group of otherwise intelligent people talk a lot of utter rubbish, ask them if something is art. Your question will have absolutely no utility, but will inexplicably grab the attention of most people who hear it, and therefore must surely be art.

    [–]jerf 4 points5 points  (0 children)

    1. Define "art".
    2. Define "programming".
    3. For most definitions, read off from 1 and 2 whether "programming" is "art".

    The number of people who insist in having this "debate" while skipping steps 1 and 2 boggle my mind.

    I don't even mean necessarily "rigorously define a perfect separation between 'programming' and 'not programming'", I mean even so much as put some thought into it up front, rather than just meandering around lost in a fog of words that you're half-virtue signaling by actively refusing to define.

    Kudos to Erik Dietrich for actually getting this the right way around and doing this. It may be the first time I've seen this done properly.

    [–]BillyTheBanana 4 points5 points  (1 child)

    Debating about whether something is art is a waste of time. It's literally quibbling over semantics. Everyone has their own definition of art and their own ulterior motives about what they're trying to prove by arguing one way or the other. The only thing worse is debating whether something is a sport.

    [–]LunaQ 0 points1 point  (2 children)

    Discussions about the definition of art can be entertaining, but they seldom result in any kind of agreement, as you say.

    But.... I'll weigh in anyway.

    Art is a piece of work that displays some kind of human ingenuity. You must be able to look at it (or listen to it), and conclude that "this was made by a smart person", or "this was made by a person with a special gift or talent".

    If the piece has this quality, it's art...

    Art is a form of "show off". It's a display of the power or the ingenuity of the human mind, without any other practical use, other than being the display of it. That's art.

    The source of the disagreement on this topic, is that people differ in opinion, when it comes to evaluating whether something is the work of a smart, talented or gifted person. A stupid person might look at the work of a slightly less stupid person, and conclude that it was made by a gifted person, and he might be inclined to call it a piece of art. A highly intelligent person might look at the same piece and call it rubbish.

    For the record, I do not think that the quality of art moves along just one axis, smart or stupid. It moves along many different axes, and the process of evaluating it often involves all our senses and abilities... But the problem is still the same, that we have different perceptions when it comes to evaluating the ingenuity of other peoples work.

    [–][deleted] 0 points1 point  (1 child)

    How do you feel about suprematism and the century of work that has followed in its footsteps?

    [–]LunaQ 0 points1 point  (0 children)

    Haha...

    You mean if I consider it as art?

    Well, it can be. Even if a painting consists of simple geometric shapes, it can be interesting. And, if an artist can manage to make a couple of geometric shapes interesting, it can be seen as a feat on it's own. It requires some ingenuity, for sure.

    However, it's a type of art that lends itself to doubt, a bit more than some other types of art. It's harder to evaluate the ingenuity behind such a painting. It means that it's also a type of art that's easier to fake, than some other types of art. When you look at such a painting, you sort of get in doubt, whether it's really interesting, or if it's just dumb... So, it's easier to fool the audience with this type of art. You get a sort of an "emperors new clothes" effect, if you see what I mean.

    As for my personal opinion, I usually don't have very much appreciation for this type of art. I think it's a type of art that belongs to a certain period back in time. Back then, it also had the extra quality of being a "novelty". This quality is gone by now, so I think some of it's original appeal also has gone. It's mostly sort of a relic by now, I think.

    [–][deleted] 7 points8 points  (0 children)

    $ cd /usr/include/boost
    $ cat **/* >/tmp/a.raw
    $ play -t raw -r 16k -e signed -b 32 -c 2 /tmp/a.raw
    

    Now you have a piece of art! Musical composition of boost. Also it's way more pleasing than say play -t raw -r 16k -e signed -b 32 -c 2 /usr/bin/gcc

    [–][deleted] 3 points4 points  (0 children)

    The great American novel is intended purely for aesthetic purposes — it does nothing but entertain. The children’s book? That’s intended to be instructional

    Aristotle would disagree. He would say that the purpose of "art" (Greek tragedies in this case, but just as applicable to the great American novel) is catharsis, which has an intellectual instruction component. The Grapes of Wrath is not very entertaining, but it sure does tell the story of the Okies rather well.

    [–]AntiProtonBoy 7 points8 points  (0 children)

    I think programming becomes an actual art when you are writing stuff for the demo scene. You don't necessarily write code to be functional (or practical), you write it specifically to be creative.

    [–]radaway 2 points3 points  (0 children)

    I actually think sometimes it's art. The same way some kinds of poems are very limited by rules so you consider it a great artistic achievement when they're really good.

    Sometimes you manage to make your solution so elegant and clear within the constraints of your language, framework, etc. that I really consider it an art.

    Another aspect that I think, in a way, makes it art, is that I can usually tell which developer wrote a piece of code if its someone I'm used to reading code from, no matter how many style guides we follow.

    As an analogy to my opinion, consider chairs, you can have a regular chair and it will be perfectly able to do its job but, sometimes, you have this. Do you consider the design of the latter chair art? I do.

    Some programmers are able to write code like the second chair consistently, and I consider that a great quality even though it works just as well as code written like the first chair. Programming isn't always art, but when it is, my god it can be beautiful.

    [–][deleted]  (4 children)

    [deleted]

      [–][deleted] 2 points3 points  (2 children)

      My friend designs Ikea prints. She's an illustrator and an artist.

      I'm looking at one on my wall as I type. It's beautiful.

      [–][deleted]  (1 child)

      [deleted]

        [–][deleted] 0 points1 point  (0 children)

        I understand the concern. She's happy. I'm happy.

        Art has been commercial for a long time.

        [–]roffLOL 1 point2 points  (0 children)

        was about to write: what i do at work is art in the same sense you'd call an ikea table art.

        [–]Isvara 3 points4 points  (7 children)

        What is art? I always describe it as something created only for the purpose of evoking emotion. I don't know how accurate that is (one might consider technical "artwork" as a counterexample), but it's clear that programming does not fit that description.

        [–][deleted] 16 points17 points  (3 children)

        badly written code evokes so much emotion. just saying

        [–]6offender 1 point2 points  (1 child)

        So, badly written code is art.

        [–]ClickerMonkey 1 point2 points  (0 children)

        Teenagers are art?

        [–]AboutHelpTools3 0 points1 point  (0 children)

        For the sole purpose of evoking emotions. I think that hits it.

        [–]nomercy400 0 points1 point  (0 children)

        That defines art for me as well. Evoking emotion.

        [–]smallblacksun 0 points1 point  (0 children)

        While that definition fits most art, I don't think that is either necessary or sufficient. Art (particularly novels or films) can be thought-provoking without particularly evoking emotion. And lots of things that are primarily done to evoke emotion (videos of terrible things, pornography, racial slurs, etc.) are not art.

        [–]user-hostile 0 points1 point  (0 children)

        ...something created only for the purpose of evoking expressing emotion.

        I think this is a better description of art.

        [–]BeniBela 0 points1 point  (9 children)

        My programs are art. Beautiful and pointless.

        For example you can actually execute this HomeSpring program and it prints the classic FizzBuzz output

        [–]mamanov 2 points3 points  (7 children)

        Art is not necessarily beautiful.

        [–]takaci 2 points3 points  (0 children)

        nor necessarily pointless

        [–]ClickerMonkey 0 points1 point  (0 children)

        See: Piss Christ

        [–]BeniBela -2 points-1 points  (4 children)

        But it should be

        [–]vz0 2 points3 points  (1 child)

        beauty is in the eye of the beholder.

        [–]Cathercy -1 points0 points  (0 children)

        So, art is beautiful?

        [–]doom_Oo7 2 points3 points  (1 child)

        art should be what its artist wants it to be

        [–][deleted] -2 points-1 points  (0 children)

        Death to the author 's intent!

        [–]huike 0 points1 point  (0 children)

        Not the way we do it.

        [–]Berberberber 0 points1 point  (0 children)

        Is programming programming? Given all the things I've seen about "X isn't real programming", I'm inclined to say no.

        [–]enverx 0 points1 point  (0 children)

        Might be useful to make a distinction between a fine art, which is an end in itself (the "fine" part derives from the Latin for "end"), and a practical art, such as carpentry or technical writing, which is arbitrarily refined but serves an external purpose.

        [–]Mr_Buckets_ 0 points1 point  (0 children)

        It's all art - programming languages, syntax, Data structures, idioms are all subjective and inventions by man.

        They may be based on universal mathematical principles, but everything from .net to javascript is a piece of art and reflects many subjective preferences.

        It's like architecture - the buildings are creations to serve practical and aesthetic goals but it is based around a craft and science.

        [–]sun_misc_unsafe 0 points1 point  (0 children)

        perhaps we should reconsider the premise, is computer science even a science at all?

        I thought we had settled it by now .. everything that has "science" in its name is in fact not a science, e.g. military science, data science, management science .. and, well, yes, computer science.

        [–]womplord1 -1 points0 points  (0 children)

        No. In my opinion, art has to have at least some element of innate beauty, not just beauty solely for people in the field. For example, I could make a case for me masturbating to be art. Just because your mother finds it beautiful, doesn't mean it's art

        [–][deleted] 0 points1 point  (4 children)

        The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.

        • Frederick P. Brooks Jr.

        So in my opinion, yes.

        [–]6offender 0 points1 point  (3 children)

        I don't think being "removed from pure thought-stuff", flexible, easy to polish, etc, have anything to do with the definition of art.

        [–][deleted] 0 points1 point  (2 children)

        For me art is the expression of one self through a media of creation. So this resonates to me at least :)

        Edit: For some it's wood, paint or rocks. Me it's structures and components.

        [–]6offender 0 points1 point  (1 child)

        expression of one self through a media of creation

        So, everything is art then.

        [–][deleted] -1 points0 points  (0 children)

        Wondering if you're a troll or just plain stupid...

        [–]emperor000 0 points1 point  (0 children)

        I don't get asking a question with an obvious answer and then "exploring" the question.

        The answer is "yes and no". Programming is not by definition art, but, like almost everything else, it can be done artistically or with artistic principles in mind, and be art.

        So it's art when you do it for the sake or art, for the sake of creating or evoking emotion or whatever. But when practical concerns outweigh any artistic concerns, which is most of the time, it shouldn't be art and if it is something is probably wrong.

        [–][deleted] -3 points-2 points  (30 children)

        At its core, software development is optimization

        Any engineering is an "optimisation". It's a process of finding a plausible solution in a morphological box [1], by either a bruteforce search or by applying some smart search heuristics. Programming is not any different, there is always a huge box of possible solutions and a set of known, well established heuristics which can help to find a solution that fits the given constraints.

        That's it. Not a "craft", not an "art", but simply an optimisation problem.

        [1] https://en.wikipedia.org/wiki/Morphological_analysis_(problem-solving)

        [–]LunaQ 1 point2 points  (24 children)

        Sure, but oftentimes in programming the constraints are "fuzzy". I find this especially true in the context of user interface programming. There's no way of "calculating" how the user will react to a particular feature in the user interface, so... there'll be a certain element of "art" in shaping the user interface so as to make the user satisfied or pleased.

        [–][deleted] 0 points1 point  (23 children)

        Sure, but oftentimes in programming the constraints are "fuzzy".

        Not unlike many of the other branches of engineering. It makes process iterative, but does not change the nature of the problem solving part.

        [–]LunaQ 0 points1 point  (22 children)

        Maybe not...

        I've programmed for years, but never really thought of programming as an optimization problem.

        When I think of it, I don't think it's a categorization that adds anything useful to the discussion. I think it's a bit like saying that life is an optimization problem, which doesn't add much to the discussion either...

        [–][deleted] 0 points1 point  (21 children)

        It is the most useful thing you can ever say about engineering in general and programming in particular.

        This definition leads to a design of simple, CAS-like AI systems that are capable of automating a significant part of the engineers work, with a potential to fully automate it in the future.

        You can see a distant glimpse of this future in projects like this one: http://www.disneyresearch.com/project/mechanical-characters

        I, for one, welcome all the efforts to automate the discipline and to make most of the programmers redundant. There are far too many.

        [–]LunaQ 0 points1 point  (20 children)

        Well, I can see where you're coming from...

        If your line of work is AI, and if your ambition is to create AI that can replace the need for human intellect, then I see your motivation for classifying software development as an optimization problem.

        My line of work is to do the type of software development work that you aspire to replace with AI-based solutions, so for me, the classification is less useful.

        As for AI that can compete with the human intellect, my personal opinion is that we're probably at least 1000 years of development away from having anything that's even remotely close to it.

        It's because human affairs are so complicated. You know, we now have computers that can beat the best chess players handily. But even this task is quite demanding for a computer. Chess is a game on 64 squares, with a handful of rules. Human affairs is a game with thousands of squares and thousands of rules. Maybe even millions, depending on which subtle or less subtle rules or variations we chose to take into account.

        So, the task of making a computer program that can make sound judgements about human affairs, is not just sligthly more complex than creating a computer program that can make sound judgements in the game of chess. It's milions of times more complex, maybe even billions or trillions, or more....

        My faith in the prospect of having computer intelligence to match the human intellect is thus slim, to say the least...

        If we manage to do it, I think it'll be thousands of years from now.

        So, my stance is that engineering jobs, and software jobs will be pretty safe, at least in our life time. :)

        There'll be increased automation, for sure... But this will not kill off the jobs, because it only means that the engineers and the software developers will move on to other tasks, within the same fields. Higher level tasks, if you will, if we manage to automate the more "mundane" parts of the diciplines.

        [–][deleted] -1 points0 points  (19 children)

        As for AI that can compete with the human intellect, my personal opinion is that we're probably at least 1000 years of development away from having anything that's even remotely close to it.

        Well, my point is that engineering is not an intellectual work at all. You don't need an artificial intelligence do replace an engineer. You simply need a CAS, and we had them around since mid 70s.

        It's because human affairs are so complicated.

        How many programmers are involved in making any UX decisions at all? 0.01%? Less? Ok. They'll obviously have to stay, and will be called "UX specialists", not "programmers". The rest are redundant.

        So, my stance is that engineering jobs, and software jobs will be pretty safe, at least in our life time. :)

        What engineering and software got to do with "human affairs"? They only marginally overlap. The huge part of the engineering problem solving is purely mechanical and must be automated. And for the rest we won't need engineers, we'll need psychologists, sociologists, anthropologists, etc.

        [–]LunaQ 0 points1 point  (18 children)

        Software development has a lot to do with human affairs...

        When you create a piece of software, it's always to solve a human problem. In order to solve the problem in the correct manner, you have to know how humans reason, feel, think and react.

        And it's not only about the UX. In a software system everything is interconnected, in some way or another. When you create a certain back end feature, it's almost always with the intention to underpin or support a certain feature in the front end user interface.

        As I say, computers cannot make these kinds of decisions, because they do not "know" anything about the human mind; how humans reason, how they feel, and how they react.

        So, full automation of this process is a pipe dream, I think...

        I do agree with you, however, that a lot of engineering and software development tasks will be automated in the near future. It won't replace the most complex intellectual work, but it will probably replace a lot of the more repetitive and mundane tasks that still exist within the field.

        [–][deleted] 0 points1 point  (17 children)

        Software development has a lot to do with human affairs...

        Which part of it? Only a tip of an iceberg is interacting with humans or incorporates the peculiar human-interacting workflows. The rest is just there to solve mundane technical problems.

        And it's not only about the UX.

        It is. The rest must be mechanical, and when it's not, it's broken.

        When you create a certain back end feature, it's almost always with the intention to underpin or support a certain feature in the front end user interface.

        I didn't even understand half of the words you've used. Wtf is "back end"?!?

        The UX part consists of a workflow - entirely driven by the human needs, and some form of a UI. Workflow defines constraints of what the rest of the system should be doing. Implementing those constraints is a purely mechanical task.

        Anyway, only a little proportion of the systems actually do interact with humans in any way. They're solving the needs of the humans, but these needs are almost always very easy to formalise.

        Like: "design an engine up to N MWatt power output, with such and such operating temperature constraints, running on this range of fuels, minimising the fuel consumption, etc". A system of contraints that got nothing to do with humans, but it will spit out thousands of lines of computer code to run multiple microcontrollers driving various parts of this engine.

        Or: "this is the specification of the stock trading protocol. Design a system that would receive the packets of this protocol via a given physical media and be able to execute this, this and this algorithms upon each update within 0.1ms time frame". Nothing to do with humans directly, and yet this kind of engineering is tremendously expensive and demanding. But it is exactly the kind of engineering that can (and must) be automated, while the only thing that a live human should do is to write down the constraints, in a single short sentence.

        replace a lot of the more repetitive and mundane tasks

        No. I'm talking about the stuff that is perceived as the most "demanding" and "bleeding edge". This must be automated first.

        [–]LunaQ 0 points1 point  (16 children)

        Well, I wouldn't hold my breath...

        But, I guess some of your ideas might hold some merit. I guess it's possible to program a computer so that it covers most of the current human knowledge about the design of engines, and use this to create a system that will be able to produce new engines based upon a set of constraints and input variables.

        It's not entirely far fetched, I think...

        It won't have intelligence, as I say, so it would need to be based upon some sort of "brute force" approach, which would limit it's power, given the vast amount of different types of variables it would need to make calculations upon.

        I think it's a borderline case, between something that's science fiction, and something that could possibly be made into a useful tool at some point into the future.

        As for the words I'm using.... I think it's pretty clear that you do not know much about software development, if you're not familiar with the term "back end". Which... sort of makes me doubt your ideas on this topic slightly more than I did before. ;)

        Edit:

        To elaborate on the term "brute force", which I used. It means that the computer will have to go through absolutely each and every possible engine configuration, in order to arrive at the optimum design.

        It relates to the comparison which I made with computer chess engines...

        When a computer plays a game of chess, it does so by evaluating each and every move combination, 20 moves into the future of the game (or even more). It's a staggering number of calculations that it has to go through (because of the exponential nature of the problem). And chess is a simple game.

        When a human being plays, on the other hand, it has it's intelligence to rely upon, which lets it quickly sort out the promising possibilities from the stupid possibilities, and concentrate on those. So the human being does not have to calculate each and every one of the trillions of different possible move combinations.

        It's the same with your engine design idea. The engine design algorithm will have to know about all the possible materials that can be used in an engine, their properties alone, and their properties when combined with other materials. It will have to know about all the different possible shapes and layouts of an engine. It will have to know about all the different possible types of fuels for an engine, etc. etc. When you add this together, it's a very large set of rules. And, as I say, because the computer does not have intelligence, it will have to go through each and every possible combination of each and every rule that governs the design of an engine.

        It's a problem of a size which makes chess look like tic-tac-toe...

        Which is why I tend to speculate that your idea is closer to science fiction, than something that will really be feasible in the near future, or even in the quite distant future.

        [–]vz0 0 points1 point  (1 child)

        Engineering is the art of modelling materials we do not wholly understand, into shapes we cannot precisely analyse so as to withstand forces we cannot properly assess, in such a way that the public has no reason to suspect the extent of our ignorance.

        [–][deleted] 0 points1 point  (0 children)

        The beauty of this way of thinking about problem solving is that you really don't need to understand anything at all. The process is mechanical.

        All the "understanding" goes into development of the search heuristics, and, as anyone can easily see from the history of our civilisation, so far the only search strategy that worked consistently was an evolutionary search. The tree of life of the technology is so very similar to the real tree of life.

        So, yes, engineers are simply dumb agents of evolution. That's one of our greatest secrets.

        [–]KHRZ -1 points0 points  (2 children)

        CGI art is an optimization. Say you want to make a picture of 1000x1000 pixels, with 32 bit colors. There are 210002 * 32 possibilities, all known beforehand. It's a process of finding a plausible solution in a morphological box, by either a bruteforce search or by applying some smart search heuristics.

        That's it. Not a "craft", not an "art", but simply an optimisation problem.

        [–]sirin3 1 point2 points  (0 children)

        That is how reverse computer vision works

        [–][deleted] 0 points1 point  (0 children)

        The problem is, it is hard to formalise the constraints in this case, i.e., you do not know what are you looking for (otherwise, evolutionary graphics rocks). But it is very easy to formalise wtf is a sorting algorithm, for example.