Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
Software Development is a Creative Skill, Building Houses is a Technical One

Brad Wilson mentioned on the TDD mailing list that the waste and inefficiency within the software industry was akin to the house building industry. I'm sure in some respects he is right, but in a more fundamental way I disagree. 

An average layman off the street hiring a builder can ask them to build a wall. The average layman can see if the wall isn't straight, the average layman can see when bricks are not aligned, they can see when a house is built to a high quality finish, where attention has been paid to detail. They may not be able to see if the builder has been deceitful by using substandard materials or hiding shortcuts, but a few hundred pounds to a surveyor will tell them all they need to know.

Even the most technical of software management cannot tell if a basic 5 line piece of code is well written or not, let alone an application comprising many millions of lines of code. The best of them cannot even tell a "good" user experience from a "bad" one. It is almost accepted wisdom now that all developers write bad code, that all software is buggy, and that software projects never deliver what they promise.

It is this problem that needs to be overcome ... it is easy to spend a lifetime in a development career, without ever having written a single line of even average quality code. There is very little visibility to non-developers.

However, I assert the problem is that development is largely a creative skill, not a technical one. And creative skills are nearly impossible to quantify - you know when you like a piece of artwork, but you cannot say why in a way that means anything to anyone else. I cannot prove I am worth my daily rate, other than by people trusting me.

With that kind of stumbling block, the best we can do is to rely upon automated tests, continuous integration, and Agile methodologies to at least make us more accountable, even if we are still unquantifiable.

 


Posted 08-18-2008 7:26 AM by Jak Charlton

[Advertisement]

Comments

Thomas Koch wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-18-2008 4:28 AM

Hi Casey, in many ways I agree your statements above.

But to continue with your house building methaphor, you could say that we need larger building blocks. Modern houses are constructed out of large scale concrete elements, reducing construction time and also reducing the potential for error.

Likewise with the software industri. Bigger components, where you do configuration instead of code is also a solution to the problem of writing code. You see that all the time with systems like SAP, etc.

Cheers,

Thomas

Christopher Bennage wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-18-2008 9:09 AM

@Casey, I've had similiar thoughts. I like to compare software development to scoring a film. Maybe I'll blog about this later...

I've also found it useful to discuss it in terms of woodworking: some carpenters are building cabinets, some elaborate tree houses, and some are carving little wooden dolls. All of these activities are "woodworking" but the tools and expertise varies greatly.

@Thomas - I don't think larger blocks are the solution. Software factories do a role to play, but I often find that it's the cheap, low budgets houses that are constructed in this way, not necessarily "modern" ones.

Peter Ritchie wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-18-2008 12:41 PM

I disagree. Software development is also akin to house construction because they are both processes that cannot be fully defined before they begin.  They both need constant monitoring and input to decide if things are correct or not.

You need only to look at the definition of technical: "of or relating to technique or proficiency in a practical skill"

I find it scary to think of software development as being considered "creative".  This suggest to me someone who simply hacks together something in an nontechnical way to produce something that seemingly works.  They can observe it works, but can't quantify it and fundamentally don't know why it works.  Things like unit testing, CI and Agile are monitoring tools in response the empirical nature of the software development process, not because it's creative.

I believe it's a technical process because we have swathes of fundamental principles, patterns and generally accepted techniques that we must know how to use as good developers and architects.  "Creativity" to me suggest these things aren't used when developing software, i.e. no technique and not using practical skill.  It also reminds me of things like "creative accounting"--which seem to follow the generally accepted practices but actually misrepresent reality.

Are many developers being creative when practicing software development?  Yes, and that's a bad thing.

steven Ketcham wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-18-2008 1:55 PM

Viewing software development as a creative process does have some appeal. It does not mean there is a lack of structure or process. A novel, as a creative effort, can be characteried as a mystery or a romance. Individual sentences can be analysed and divided into various elements and so on. The disconnect with software development is that the user can only see the results produced by the software not the software itself. The novel hides nothing from the reader.

Jak Charlton wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-19-2008 3:42 AM

@Peter

House building is almost totally quantifiable before it begins.

Architects do the creative part, they do the design, they put in the "nice" things, they specify every last component the builder needs to use to make the house.

The builder just puts them together.

Software development is akin to the architecture part of house building, not the construction part.

And building architects have to fulfill multiple roles, they have to be technical and creative, they have to accomodate client's desires whilst maintaining building integrity and technical standards, and to maintain and manage costs.

As Steve McConnell says in Code Complete (to paraphrase) ... software construction is so cheap as to effectively be free, all the cost is in the design.

@Steve

A good novel hides everything from the reader, in the sames way as a good film.

A good novel creates a suspension of disbelief, if you ever stop to think how well constructed a sentence or phrase was then the author has failed as you are now aware of the technical aspect of their creation, when their objective was to only bring you into a different world.

Jak Charlton wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-19-2008 3:46 AM

@Peter

One specific thing:

"I believe it's a technical process because we have swathes of fundamental principles, patterns and generally accepted techniques that we must know how to use as good developers and architects"

Prove to me that any one of your patterns is better than my chosen method ... in a way that does not rely on us trading qualifications or experience.  Your definition of good is yours alone, mine is mine alone, we may or may not agree, but there is no proof your way is better or mine is better.

Peter Ritchie wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-19-2008 12:09 PM

@Casey.  Clearly you've never built a house :-).  Yes, there's a fundamental architecture about a house that can't change (or is very costly to change) once construction begins.  But every single decision isn't made or finalized before the ground is broken.  Building a house is a progressive project.  You could purchase before-hand all the materials needed to complete the house; but that's a time-consuming and costly option (most people building the house can't get funding for the entire thing up front).  The side-effect of this is that as materials *are* purchased they may not be available; having an effect on the actual work being performed--which means its *very rare* that the builder simply puts it together.  Plus once the house is visible the owners start to see how things look and feel and begin to make design changes; exactly the same with software.

Generally, patterns have a fairly specific context in which they are used.  Yes, you can skin a cat in many ways; but when you re-invent the wheel to implement something that is clearly covered by a known pattern, while it's a matter of opinion which implementation is "better", it's not about that.  It's about building on the work of others and accepting generally accepted principles and patterns.  When you ignore those (or don't bother to learn about them) you're wasting your client's time and money and not concentrating on the value that the project tries to address.  Likely if you're re-inventing the wheel you're not taking into consideration may of the design principles that so many existing patterns do.

In any given project what a designer/programmer should be "creative" about (and here I mean project-specific behaviour) is a fraction of the work of the entire project.  The infrastructure takes up a majority of the work of a project, there's no value in being creative here--it's just a series technical tasks.  Logging, persistence, exception handling, integration with the OS, communications, high-level architecture, etc.  All these are well-known problems with well-known solutions--there's no creativity in any of that.

Jak Charlton wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-19-2008 12:51 PM

>>>All these are well-known problems with well-known solutions--there's no creativity in any of that.<<<

No?   Which logging framework? Why? Where shoud it be called? Should it be used via AOP or IoC and DI, or a Singleton, or a static, or should it be a listener on the end of a message queue? Should that be MSMQ or ActiveMQ?  And that is just for logging, Persistence is an even more divisive and disputed area.

None of these are technical deicsions with any proof that one is better than the other - they are all just opinions.

Creativity allows you to see how to apply patterns or solutions to the problem you have - no technical skill can ever teach you that. Creativity allows you to see your way around problems, or to remove the problem from your way entirely.

If creativity was not a major factor, outsourcing would be simple, mechanical and would work - it is not. And the reason it is not is that there is no simple formula required to write software, and there is very little need of technical skill either. The required skill is creativity, which cannot be taught, cannot be scaled, and cannot be replaced by use of software factories, frameworks, code generation or tools.

Only problems solving ability matter in development, and problem solving is a creative skill.

Peter Ritchie wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-19-2008 2:14 PM

I view creative as being characterized by originality and expressiveness.  Picking something from a known set of options like a framework or a pattern is not creative.

I agree that *why* decisions are made are almost always based upon opinion.

I don't agree that applying known patterns is not a technical skill.  Where "technical skill" is knowledge and proficiencies required in the accomplishment any task.

Software is not simple because of its complexity, not because of any need for creativity.

Jak Charlton wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-19-2008 4:29 PM

>>Software is not simple because of its complexity, not because of any need for creativity<<

I would assert that actually software development is pretty darn simple. It certainly isn't complex.  I almost never write "complex" code. ... 99.9% of the time I just write the same old simple code ... the skill is in knowing which simple bit of code to write.

In fact, I would probably assert that most software is overly complex, and made so due to the lack of skill of those writing the code, both technical and creative.

Alastair Upton wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 08-21-2008 6:26 AM

I think that construction of any kind is a similar process. I believe that the underling issue with software development is that the builders (developers) are always trying to be architects (and also be creative) and many architects are actually senior developers rather than true architects. I think this problem is exascerbated by a lack of differentiation of, and respect for, these roles by external business users.

As with house building, architects add some creativity along with a broad knowledge of available materials and techniques to see that the customer's vision is implemented. And, of course, there is an element of fitting in amongst existing architecture.

On the building analogy you may believe that a wall is straight but plaster (the presentation layer) can hide a multitude of sins...

Don't get me going on my dislike of the word 'complex'...

ramya wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 09-08-2008 9:42 PM

Building houses may also be a technical job, but I refuse to accept that it is purely a technical job.

The reasons a lot of times it depends on your role when building a house, if your an architect or a laborer or both.

However I would like to point out that an ordinary mason when laying the bricks say for example...may sometimes use different color bricks and when putting them together uses his creative side to decide which color brick goes first. Its like creating a mosaic pattern, you know what you have to do...but if your creative then you would do a better job then someone who is not!! To me, doing a neat and finished job is technique but having the right combination of colors and creating something that doesn't simply look like a random mosaic work but like a piece of art is creativity....

Technique and creativity should go hand in hand, but then I have seen many who have great skill and technique but somehow do not have creativity. I strongly believe that technique is something that you can cultivate over time. It makes you good but not great. You can learn the technique of building a building but its a creative person who will lend that extra something to the building. This will explain alot of monotonous construction, not so attractive and substandard construction we see all around which makes people like Casey think that building ...buildings is about just getting a layman to build 4 walls punch in 2 windows have a door and there you have your house.

That way anyone who knows nothing abt computer programming cab simply log on to a website, get its source code, tweak it a little and by trial and error check out what changes and create his own code for a new website. Its a nobrainer in today's world. So I think computer programming/developing is similar to building, It can be as technique oriented as building but creativity....well not all developers have it.

Likewise you can never say that this building is the best solution to this site. You can never get 100/100 for that!!. Clearly building buildings ir designing buildings isnt a mathematical problem like 2+2 =4. A building can be achieved by many methods of construction, many materials, many ways the usage is thought of. But never can one person say this is the best solution. Which is what Casey is saying about software developing. You could use java, .net or whatever tool and get the solution and within java there may be many ways to derive ur output!! but hell building is the same. The architect/builder decides the material for construction- brick, concrete, wood, brick veneer and so your technique to waterprrof or how you fit your window ...everything changes.

so @ Casey when you say -

"No?   Which logging framework? Why? Where shoud it be called? Should it be used via AOP or IoC and DI, or a Singleton, or a static, or should it be a listener on the end of a message queue? Should that be MSMQ or ActiveMQ?  And that is just for logging, Persistence is an even more divisive and disputed area."

"I believe it's a technical process because we have swathes of fundamental principles, patterns and generally accepted techniques that we must know how to use as good developers and architects"

Prove to me that any one of your patterns is better than my chosen method ... in a way that does not rely on us trading qualifications or experience.  Your definition of good is yours alone, mine is mine alone, we may or may not agree, but there is no proof your way is better or mine is better.

or

None of these are technical deicsions with any proof that one is better than the other - they are all just opinions.

Creativity allows you to see how to apply patterns or solutions to the problem you have - no technical skill can ever teach you that. Creativity allows you to see your way around problems, or to remove the problem from your way entirely."

Exactly!!! which is what I have said abt using materials, methods of construction, etc etc.....thats what a good architect/builder does when he/she wants to build a good building and even then soneone else may still think its not the best solution.

ramya wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 09-08-2008 10:05 PM

Oh yes, go to hgtv.com to clear some of your misconceptions!

Speed Dating wrote re: Software Development is a Creative Skill, Building Houses is a Technical One
on 12-29-2008 5:40 PM

You are right. I only work with programmers who are creative. Technicality does come into play, but creativeness is the most important aspect.

About The CodeBetter.Com Blog Network
CodeBetter.Com FAQ

Our Mission

Advertisers should contact Brendan

Subscribe
Google Reader or Homepage

del.icio.us CodeBetter.com Latest Items
Add to My Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online
Subscribe with myFeedster
Add to My AOL
Furl CodeBetter.com Latest Items
Subscribe in Rojo

Member Projects
DimeCasts.Net - Derik Whittaker

Friends of Devlicio.us
Red-Gate Tools For SQL and .NET

NDepend

SlickEdit
 
SmartInspect .NET Logging
NGEDIT: ViEmu and Codekana
LiteAccounting.Com
DevExpress
Fixx
NHibernate Profiler
Unfuddle
Balsamiq Mockups
Scrumy
JetBrains - ReSharper
Umbraco
NServiceBus
RavenDb
Web Sequence Diagrams
Ducksboard<-- NEW Friend!

 



Site Copyright © 2007 CodeBetter.Com
Content Copyright Individual Bloggers

 

Community Server (Commercial Edition)