Code camouflage


More knowledge of code masterpieces is said to stimulate creativity of programmers. This might be true, but a more important effect will be that it will stimulate imitational behavior. Mimicry is the cheapest and most reliable way of producing software.

Buildings

A building does have a well known, limited number of purposes: it’s going to be a home, a library, a congress hall or something like that. The building will have a large set of features, common to a building (like a roof and a front door), and a small set of specific features common to its purpose. The design of a building can be pretty detailed, because the big questions have been answered many times before.

We can’t build software like we would build a building. We have been engineering buildings since we left our caves to wipe out the Neanderthals. The founders of object technology are (if they stayed around for an average lifetime) probably still going strong.

So far, we haven’t found a limited set of purposes for software. The purposes of software vary enormously, are not strictly defined and their amount grows every day. Even the software that somebody did build before, is at the most in its sixth or seventh version; what happens next is that it gets replaced by a new piece of software, with different features. Nearly every piece of software is more or less new. On a certain level, it has to be reinvented for each and every new purpose.

This is where creativity comes into play. Let me define what creativity is, first. Hereby I officially declare creativity to be defined as the stuff that is needed to invent something new. I know it’s an insufficient or maybe even bad definition, but just assume for a moment that it is correct.

We can conclude from this definition that software development is a much more creative process than the usual engineering practices. That sounds good, doesn’t it? The bad side of the story is, that for every known purpose hundreds of products are released. Each and every one of them has been put together in a very creative process. That’s just a waste of resources, if you think about it.

Does the age of programming fully explain this? I don’t think so.

Where are the great pieces of code?

Many of the high quality software products have been built for companies in a commercial environment. These companies don’t usually like to expose their materials and share their knowledge. But it seems more like developers don’t want to see. Even achievements of the open-source community, although available, aren’t widely studied.

A developer somehow doesn’t look at great pieces of software, brilliant architectures or beautiful designs. Like everyone else, we just see the product, if we are lucky. We only see a GUI in nice colors that does stuff. We don’t long to see the structure behind it (well, it’s compiled, but that’s not always an excuse). The names of their genius creators just find their way into oblivion, as we all try to reinvent the wheel coding a new piece. The artists get paid for their creative achievement in money. Their art, however, won’t last longer than the average lifecycle of a software product.

Look at the famous artists of our time. Many of them went to a prestigious arts college. Like programmers do for programming, the artists learned the basic techniques of painting, writing or making sculptures. But unlike programmers, they also studied the achievements of other great artists. They have to do this, because artists have a predisposition for being original: as an artist, you don’t want to invent anything that anyone else has done before. It would be irrelevant to do so. Another reason is, that other people’s work inspires to do great deeds. It takes more than a grammar book to become a poet.

Master of Fine Software Arts

People like Richard Gabriel, Distinguished Engineer at Sun Microsystems, plea for a program at universities to become Master of Fine Software Arts. Some major universities are interested, too. In this program developers would study their literature: the achievements of their predecessors in programming. This program would train the future code poets.

But do we want programmers to be artists? Creativity in coding is probably not intrinsic to coding, but just a necessity caused by the way developers educate themselves today. Software has a purpose, other than solely “l’art pour l’art”, or the software just because of the software. Unlike art, it’s used to build tools rather than it is a vehicle for expression. Therefore, coding shouldn’t be an art, but rather pure craftsmanship. After all, we build much more reliable bridges, houses and libraries than we build software (statistically, that is). I wouldn’t want to cross a bridge that crashes as often as the average operating system.

This is not a new conclusion, though. Many people have thought about this. The technical solution of using patterns is very fashionable and cost effective. In fact, applying patterns is a really good way to keep the artists away from code at its most detailed level. There might be more to it: the proposed Master of Fine Software Arts program can help, too.

Imitation is a sure bet

At school, students are taught to imitate. If you imitate the things your teacher shows you well enough, the reward will come in the high grades you will get. At university, this required mimicry is a little subtler. You are supposed to convince your teacher that you don’t imitate, but that you have some fundamental understanding of what’s going on. The result is that you become a subtle mimicry master. After all, imitation is a sure bet, while originality could result in anything between total victory and enormous disaster.

Originality is highly unstable, and can hardly be planned for. This doesn’t sound like a fundament for a proper business case, does it? Art is risky business; craftsmanship is economically much more effective and a lot more predictable. A business doesn’t usually need code that stands out. It needs code that fits the plan.

A large-scale Master of Fine Software Arts program will decrease the level of necessary creativity in coding, rather than increase it. To learn about other people’s accomplishments will have the effect that a lot of solutions will be standardized.

True originality only comes in situations where there is no reference. If reference is supplied in any way, imitation helps to get to the simplest, cheapest, known solution for a problem. The Master program will supply reference, and stimulate imitational behavior. It takes art to show craftsmen their templates.

Sander Nagtegaal, 2003

You are trying to view the newsticker in a browser that doesn't support it. I am sorry.