Thursday, 23 August 2007

Software development: art or science?

There's a ton of discussions about if software development / engineering is "art" or "science". I've always sided on the "science" side of the debate. There's no splashy colours, or impressionist applications, it's gotta be science.

Recently I heard an argument that really made me think. It went something like this: "Software development is like sculpting: you get a team of skilled craftsmen (people, whatever), give them a client and a huge block of marble. They use their tools to chisel away at the block until you have your sculpture."

That was one of the best analogy's that I've heard for making software.

So let's assume that it is an "art" (with quotes). Like art, you have some naturally skilled people, people who can be taught / mentored to be skilled, and others that no matter what you do, they won't ever be a star. And like art, so many of an application's qualities are difficult to quantify.

From now on you may address me as The Artist Formally Known As Jim.

1 comment:

  1. I find that software really is an artform. Or maybe better worded, as a "craft" like sculpting or woodworking. There has to be some natural talent for you to be a good developer. Some people need a little more guidance than others, but I haven't seen a good way to make people think the way a developer is supposed to think. And some people like you mentioned, who will never be good developers. These people are very frustrating to work with.
    One artistic concept that I feel is important is software development is what I like to call "knowing your shit". The more you know, like design patterns, programming languages, programming paradigms, technology in general, the more easy it is to think of solutions to your problem. To take a woodworking analogy, if the only tool you have is a hammer, everything looks like a nail. If you only know C, and have never used a database, then doing some project that requires data storage and retrieval might be difficult. Known the different database options that exist could make the project much easier and a lot more stable.
    One tool that I find in software development that beats all others at it's purpose is regular expressions. Regular expressions makes string parsing simple (once you understand them). What would have taken 100 lines to parse in any standard programming language, now takes only 5 lines of code. It's like using a scrollsaw to cut out an intricate design rather than using a reciprocating saw. Sure you could use either, but the end result will look much better, and will be much more appealing when using a scrollsaw.

    ReplyDelete