http://www.perlmonks.org?node_id=68075

I was just contemplating some of the code I've been writing lately, and thinking back tonight on some of the projects I've been working on made me realize a few things that I never noticed before.

I used to do quite a bit of traditional art; by this I mean, drawing, painting, even a little sculpture and wheel-thrown pottery. I know this is sort of tangential to the focus of PerlMonks, but bear with me, as part of my meditation needs this bit of background information to make sense.

In my studies, I studied under several artists who made a large impact on me, both in terms of the work I did and the more abstract philosophy of art, which has as many different styles and themes as Perl, even. ;-)

On one particular occasion, my instructor showed me the difference between the additive techniques and philosophies of creating artwork, and the subtractive school of thought on the subject.

Think of a marble block. No one would argue that the block does not contain within it an infinite number of possible sculptures, and yet, some artists claim that they are guided by the block, to an almost predetermined form, as if the marble had captured and engulfed the sculpture the whole time, until the artist came along with a chisel and freed it from the stone.

This is the subtractive method; bits and pieces are worked away from the form until the underlying sculpture is revealed. The beauty of this method lies in the transformational process; taking something known and revealing a new side, that was always inherent within the object but had been somehow unseen.

On the other hand, the sculptor who works with clay, is using an inherently additive method to create new works. By adding more clay, the object can be extended and formed in new ways. If the structure is built with care, and formed by hands that are trained in the ways of the clay, entirely new sculptures and forms can result in patterns unique to the creator.

Now, before you decide that I have gone off the deep end, consider this. Within CPAN lie a great many sculptures; some are used by every programmer upon occasion, (i.e. CGI, DBD, etc) to create new works, and some are used very rarely, and only when it is absolutely necessary to do so. A great many programs that are written by competent Perl programmers may use a given module (additive technique), but only those features of that module that they deem necessary and/or useful will make it into their final code. (subtractive.)

Another way to look at this would be the example of how, during the first stages of writing an application, much time can be spent on the simple task of data modelling. When an application is in the earliest stages of being written, only a very few things may be known about the final model, and perhaps the coder wants to get started as soon as possible on the program logic and user interface portions of the code. The poor programmer, rushed for time, might choose to over-model the data on the side of too much information (very additively, I must say), knowing that they can go back later and just drop table a bit here, alter row there, and voila, the masterpiece is back in perfect balance and harmony.

In any case, I was just drinking a cup of coffee tonight, knowing that I was going to be up coding for a while, when these thoughts occurred to me, so I thought I would share them with the rest of the Monks. Maybe I am on to something, no? Or, maybe I am going off the deep end, maybe I have spring fever. Either way, it is sort of fun to try out a new metaphor once in a while.

Replies are listed 'Best First'.
Re (tilly) 1: Artistic Method
by tilly (Archbishop) on Mar 30, 2001 at 01:48 UTC
    I think it is valuable to reflect on the process of programming, just as you reflect on the process of creation in art. However I don't think that the parallel carries on too well from there.

    The difference is that with physical artwork, you are creating a concrete something. It has form, mass, and these attributes are intrinsic to the experience.

    By contrast programming has no real form or mass. If I write:

    perl -MLWP::Simple -e 'getprint("http://www.perlmonks.org/index.pl?nod +e_id=36197")'
    How big is that program? It is one line, right? But no, I pulled in LWP::Simple. Which pulled in more. And if I am going to talk about that, I pulled in Perl. And Perl used the operating system. Plus I used machines and networks over a good chunk of the US. Some of which include a webserver and database in (IIRC) California.

    Does it even make sense to ask how big it is? Probably not. What makes sense is to ask how big that functionality was for me.

    The answer is one line.

    Were I to name 2 opposing pulls in programming, I would have to name building on what was done before, and reorganizing or reconceptualizing what was already done. At any given time these dynamics oppose each other. The first is a building dynamic. The second is creative destruction. Between the two of them you (hopefully) find solutions and then boil them down to easily repeated patterns that allow you to solve hard problems with ease.

    Being from math I see parallels there. For some food for thought see The path to mastery. Like art, what you don't see is often as important as what you do...

      Ah, yes, and when I look at that line of code, I see just as much subtlety and nuance as I do when I look at a Japanese brush painting. Your code means exactly what you intended, it is correct the first time, and you have found the harmony that occurs when everything is in balance.

      Most of the best one-liners I've seen started as much more than that, and were eventually expressed by the programmer in a program that completely disguises the amount of study and care that went into mastery of that code. Your one-liner looks simple, no? But it is most certainly not. Others who have studied your form, either in practice, or appreciation, can see that.

        I agree that is a very well formed program. But the work that went into it wasn't mine. If you want to put that on the shoulders of one person, that person would probably be Gisle Aas. (Who in turn depended on others.)

        That is an amazing thing about programming. People can and do build off of other people's work. I can take that example, read it over the phone to someone, and in a matter of minutes they can tailor it to their needs.

        Now people often remark that Perl is known for amazing one-liners. But few ask why it is.

        I would argue that it is because Larry Wall did a very good job of reconceptualizing what people need to know to write useful programs, and did a good job of allowing people to contribute to that and then build off of each other's work.

Re: Artistic Method
by stefp (Vicar) on Mar 29, 2001 at 18:16 UTC
    This discussion of additive versus substractive property of art methods leads me to connex remarks.

    I feel that a program or module I write is mature when I start to remove uneeded material because I am able to factor out material in subroutines for example.
    I note that great artist are able to convey a lot with very little material. For example, Pisasso was able to make very expressive drawing out of a few pencil lines.
    Some artistic media are better than other to convey a lot with very little. But often it requires more training or genius.

    There is also academic styles or media that require the strict observance of rules. Usually nothing stands out and the artist personality has little place to express itself. With academic styles or media, if we could mesure quality, the standard deviation from the average is way smaller than in more "artistic media"

    If we translate these considerations to computer languages, we can say that python is an academic language because there is only one acceptable way to write something while in Perl there is many expressive way to convey similar meanings. The problem is that Python guaranty some minimal program quality while Perl does not. And management does not like surprise, it wants consistency. I could have peeked other language as examples, but we are on perlmonks.abbey after all.

    BTW: a good article about the contrast between Perl TIMTOWTDI and python.

    == stef

Re: Artistic Method
by rass (Scribe) on Mar 29, 2001 at 17:07 UTC
    Hmm. I'm afraid I disagree with this one. It remind me a lot of this, which seems to go a bit too far with the evangelising of Perl. I'm not saying this is what you're doing here Dragonfly, but I do think some people get a bit carried away whilst browsing through PerlMonks.

    To me, Perl is a tool. Plain and simple. I like the chainsaw analogy, but for a different reason : it's fun to use, just like chainsaws are. I really don't enjoy seeing (more and more) posts meditating via metaphor and conjecture that to me has nothing at all to do with Perl. I think a good meditation in this section would be some kind of experience enjoyed through learning a new trick in Perl, not how what you learned in Art Class might apply to programming if you squint your eyes and look at it from an obtuse angle...

    Forgive me if you take this as a bit harsh - it's not meant to be. I am merely continuing the Spirit of PerlMonks :

    Chucking my two cents into the ring

    Thanks for listening.

    cheers,
    rass

      Oh, I agree: Perl is a tool, much as a brush and paints are the tools in art class. I'm just trying to point out that you can have more than one approach to painting or programming, and that the lesson of additive vs. subtractive methodologies applies equally well to programming as it does to art.

      I am not trying to evangelize, either; if you're reading this it's because you're here at PerlMonks, not What-Language-Should-I-Use-Monks. And I figured that since this wasn't code, I could safely post it in Meditations instead of Snippets or Craft.

      As for the link you posted, well, I'm sorry that you think this is all just mindless blathering about how great Perl is. Perhaps you could read it again and tell me in which parts specifically you think I am being a Perl zealot like the other poster was. ;-)

Re: Artistic Method
by coreolyn (Parson) on Mar 29, 2001 at 19:46 UTC

    There was a study some years ago when the programmer/IT shortage began to be noticed (sorry I can't quote/link it). Anyway, the study noted that many of the IT people were coming from liberal Arts background (and particularly Music majors) not Computer Science. At that point in time (early 90's?) Computer Science people were daring accountant types with an education in COBOL/Fortran.

    My point is that there will always be a rift between the academic programmer (functional) and the artistic programer (creative). Perl seems to provide a middle ground for the two types. We are only scratching the surface of what these machines will do for us. Both types have their place; The artistic programmer that will find the new things to do, and the functional will get it done right.

    I for one enjoyed your contemplation.

    coreolyn - Would a JAPH by any other name obfuscate as sweetly?
      Don Knuth noted several times in recent interviews that some of his best students came from music backgrounds, and speculated that it was because they had good experience in reading, writing, understanding, and parsing the abstract visual symbols of which sheet music is comprised. Also, he said that some of the students who had created musical compositions (and not just played an instrument) did very well, and thought that perhaps it was because they understood much of the theory that goes into the creative process, and not just the technique (or syntax).

      I think both viewpoints are valid, and there is a time and a place for code virtuosity as well as theory.

Re: Artistic Method
by toadi (Chaplain) on Mar 29, 2001 at 15:39 UTC
    Mhh,
    I upvoted your post. But maybe you should take another cup of coffee and take a rest :)



    --
    My opinions may have changed,
    but not the fact that I am right