I don’t know whether it’s true that 90 percent of the programmers are crap (but it might be, as Sturgeon’s Law says that “90 percent of everything” is). However, there’s always room for improvement, and I have been thinking about which areas you can improve your skill in.

I drew a mindmap the other day, and I identified many things: communication (between humans), psychology, creativity (generating ideas), testing (sustainability, quality), observing (people, doing their work), experience (studying patterns, and past solutions; exercising), writing (prose, poetry, non-fiction, whatever), design (principles), discovery (of solutions). There are clearly many things you can study to improve as a programmer. Then there are the obvious things, such as reading about the programming language, the platform, and the tools you’re using.

Take creativity for example: There are numerous books on creativity, that deal with how to generate more and better ideas. I wanted to read about creativity to find out whether programming could be said to be a creative activity – and now I can’t believe that I wasn’t sure about this; of course it is! Every aspect of software development is creative. Creativity is about solving problems by finding better solutions. In some areas, ideas that are fresh are – not by definition better, but the freshness matters a lot – especially if you’re developing new products or services. In software, however, I find there’s a tendency to only apply known solutions from the past – or at least not to think that much about whether there might be better ways to solve the problem than what first comes to mind; creativity books often say that the first ideas that come to you are stale, and that you need to get a few ideas out in the open to be able to come up with new ones.

Like I said, every aspect of software development is creative, because it is about solving the problems of your client; it is about finding good solutions to implementing features you have identified together with your client; now and again you run into problems that have to do with meeting your deadline; now and again you find symptoms of bugs in your code; the newly thought of feature might be a departure from how you saw the system earlier in the project, so you’ll have to find out how to evolve it in the new direction, and so on. So don’t tell me it isn’t creative.

Related to creativity is experience. Creativity is as much about relying on your experience as breaking free from it. If you’re fresh as a programmer, one way you can contribute is by daring to say what you think, and to tell the team about your ideas – because as a programmer with less experience than others, at least you’re not hung up on it, like some of the old timers are. I was once in a project where there was a very experienced team member, and some people – even relatively experienced ones – didn’t dare to say what they thought out of humility. Inexperienced people sometimes come up with brilliant ideas because their vision isn’t blurred by past experience (again, it’s the notion that the first ideas that come to you are stale).

In another project I was in, there was a guy who spoke very loudly at meetings, always keen to show off his experience – or at least to seem experienced. I remember working on something with him where we did some refactoring, and I had considered doing a Replace Type Code with State/Strategy. During a coffee break, we talked it over and when I mentioned the Strategy pattern, he looked around to see if anyone was listening, then whispered a confession: that he didn’t know what the pattern meant. Don’t be that way: no matter how many decades of experience you have, there will always be things you don’t know – and there’s no shame in asking questions.

You need experience, and you need to see clearly despite it. You build experience by doing, but unfortunately your regular work might either not offer big enough challenges for you to learn, or the project doesn’t allow for trying different approaches than – again, the first ones you think of; the stale ones. When faced with deadline pressures, perhaps you don’t dare to take chances; you want to do what seems safe.

Anyway, people have been suggesting that you should practice. Dave Thomas, for example, suggested this, and has also created some exercises (or katas, as he calls them, which I believe is a term used in martial arts). Ron Jeffries suggested this within the framework of Extreme Programming, with what he calls etudes (also see this article).

Got to go.

The above was posted to my personal weblog on May 22, 2003. My name is Peter Lindberg and I am a thirtysomething software developer and dad living in Stockholm, Sweden. Here, you’ll find posts in English and Swedish about whatever happens to interest me for the moment.


Posted around the same time:

The seven most recent posts:

  1. Tesugen Replaced (October 7)
  2. My Year of MacBook Troubles (May 16)
  3. Tesugen Turns Five (March 21)
  4. Gustaf Nordenskiöld om keramik kontra kläddesign (December 10, 2006)
  5. Se till att ha två buffertar för oförutsedda utgifter (October 30, 2006)
  6. Bra tips för den som vill börja fondspara (October 7, 2006)
  7. Light-Hearted Parenting Tips (September 16, 2006)