Related link: http://www.artima.com/intv/garden.html
Lately, I have been thinking about useful metaphors for programming. What other activity accurately reflects the real work of software development? I think quite naturally, many developers look to architecture and engineering for inspiration. Perhaps many of us have even been inspired by the architectural underpinnings of design patterns. However, I recently came across this article on artima.com: http://www.artima.com/intv/garden.html. The article recounts an interview with Andrew Hunt and David Thomas, authors of The Pragmatic Programmer: From Journeyman to Master. In this excerpt, they compare software development to gardening:
There is a persistent notion in a lot of literature that software development should be like engineering… We paint a different picture. Instead of that very neat and orderly procession, which doesn’t happen even in the real world with buildings, software is much more like gardening. You do plan. You plan you’re going to make a plot this big. You’re going to prepare the soil. You bring in a landscape person who says to put the big plants in the back and short ones in the front. You’ve got a great plan, a whole design.
But when you plant the bulbs and the seeds, what happens? The garden doesn’t quite come up the way you drew the picture. This plant gets a lot bigger than you thought it would. You’ve got to prune it. You’ve got to split it. You’ve got to move it around the garden. This big plant in the back died. You’ve got to dig it up and throw it into the compost pile. These colors ended up not looking like they did on the package. They don’t look good next to each other. You’ve got to transplant this one over to the other side of the garden.
Now, there’s an analogy I can identify with. Back to the garden I go. Check out the rest of the interview on artima.com.