Sunday, August 29, 2010

Are programmers problem solvers or just builders?

Again, it all began with a tweet. Well, almost.

A few days ago, I read some forum where someone described programmers as "problem solvers", and how you have to really like solving problems all the time to love programming. Some responses were a bit intimidated by that perspective. "Problems" all day long - bah!

To me, this sounds quite like a normal reaction. People want to do something positive in their life, particularly when this is about work - the most time consuming occupation one generally has. So I began thinking about that - Are programmers "problem solvers"? In my opinion, not really.

Of course I'm taking the "problem solving" in a very mathematical sense. Not everyone may agree with that definition, but that is how I understand it.

When I think about programming something, I'm not often doing that to solve a problem in the mathematician sense. I'm not searching for a solution. Instead, I'm rather working like an architect, putting together pieces to form a home. An architect is not "solving a problem" when he provides a house for a family but rather "fullfilling a need". I rather see programming as lego building. If you ask someone to build a lego house, some will do something very basic and ugly with a few bricks on non-matching colors and scales, and other will do a fantastic medieval castle. Same for programming. This is quite different of maths were the proof and result is, mainly, right or not. That doesn't mean that programming is more simplistic, rather that it is a producing task rather than it is a solving one. The solving part is actually more part of the computer science, and less of the programming, or software engineering.

There is another reason why I think that programmers, while they tend to like qualify themselves as problem solvers, are not so much such. If they were, wouldn't they enjoy fixing programming defects and debugging all day long? Of course most of us prefer writing code - that is, building something new, assembling, creating.

I also got a good comment on Twitter where someone asserted that programmers are also partly artists, and I think this is also true. Hackers program sometimes for political reasons. Some to produce new graphic effects. The creativity component should be integrated here.

So if you're beginning programming, and find this is some hard task - don't get discouraged, because this is actually an interesting and funny task that is rarely as frustrating as a hard math assignement!


  1. In short: Programmers should not only see the problem, but also the bigger picture. ;)

  2. To me good code is like art, or better poetry. I personally don't see myself as a "problem solver" but rather partly engineer as well as artist. To me the difference becomes apparent when thinking about algorithms: there are the people figuring out an algorithm, as well as those implementing it, most of the time the best implementation is not done by the guys developing the algorithm itself. And to come back to my first statement, looking at an algorithm nicely implemented with a lot of understanding of the language and software engineering can actually read like poetry to me.
    Just had this experience when searching for a Hilbert curve implementation, finding a piece of C Code doing all calculations in needed in about 10 loc, while my first try was much longer and slower. Read like a poem to me.

  3. Yesterday I stumbled across a word from Fred Brooks in The Mythical Man Month speaking about "growing, not building, software". Could be fitting also...

  4. "growing software" - I like to compare software development to the taxation system: If you just keeping adding on to it, without considering the bigger picture, the software will become just as difficult to manage as the taxation system.