Before writing code, we used the archaic but apropos writing instructions. That is because writing instructions is literally what we did, uh... and still do.
If I used Twitter, and you followed me, you'd find that on most days,
Bob is slinging instructions.Metaphors abound for the stuff that happens between digital nothingness and an app one can demo. A sampling from blog posts Why Software Development isn't Like Construction and Tending Your Software Garden borrow metaphors from several industries attributable to various software luminaries (see table).
Metaphor | Industry | Remark / Attribution |
Building an app | Construction | Software is soft, buildings aren’t (McConnell) |
Creating an app | Theology | It's a science (Gries, 1981); It's an art (Knuth, 1998). |
Growing an app | Farming | Hunt and Thomas, and others |
Accreting an app | Oyster Farming | e.g., system accretion (McConnell); oysters make pearls |
Driving an app | Transportation | "like driving a car"" (Plauger and Beck) |
Producing an app | Entertainment | "like filming Snow White and the Seven Dwarfs" (Heckel) |
Teams freshly introduced to agility might feel they're divining an app; not unlike a dowser might try conjuring up Sahara groundwater from the nearly imperceptible twitches of his divining rod.
I am partial to the Farming metaphor. Are you? I have started using grow instead of build in professional conversations - whenever I can remember.
In keeping with the post Simple Design or Swiss-Army Knifing, I pledge to strive to minimize my natural tendency to over-fertilize (i.e., I will deny the impulse to shovel on piles of steaming manure - one method, one purpose).
I would rather say "throwing" than "growing". Growing implies the software knows what to do given rich soil and a little water and all we have to do as farmers is plant it in a way that easy to harvest.
ReplyDeleteThrowing leaves the control in the hands of the skilled potter. You can add or remove clay as the piece requires or with a twitch of the wrist destroy the work and start again.
"If builders built houses the way programmers build programs, the first woodpecker to come along would destroy civilization." --Gerald Weinberg
ReplyDeleteThere are lots of other metaphors that explain software development:
ReplyDelete* Trekking/Hiking: http://blogs.agilefaqs.com/2005/04/03/software-development-a-trekkers-way/
* Driving on Indian Roads: http://blogs.agilefaqs.com/2007/07/14/driving-on-indian-roads-and-software-development/
* Coking: This is an old metaphor, but very very relevant.
* Rock Climbing: http://www.codinghorror.com/blog/archives/000830.html
* Craft/Martial Arts (more on learning and feedback aspects)
* Book Writing/Composition/Poetry
* Painting - Iterative and Incremental
And so on...
There is a typo: Its Cooking. I've blogged about this topic : http://blogs.agilefaqs.com/2009/05/29/software-development-analogies/
ReplyDelete