According to Steve McConnell “Code Complete” there are plenty of metaphors out there:
- David Gries : programming is a science https://www.springer.com/gp/book/9780387964805
- Donald Knuth : programming is an Art https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming
- Watts Humphreys : programming is a process https://en.wikipedia.org/wiki/Watts_Humphrey
- Kent Beck and P.J. Plauger : programming is like driving a car https://warwick.ac.uk/fac/sci/dcs/research/em/teaching/cs405/em_dev_reflections/kentbeckdriving/
- Alistair Cockburn : programming is like playing a collaborative game https://blog.codinghorror.com/software-development-as-a-collaborative-game/
- Eric Raymond, cathedral and bazaar https://firstmonday.org/article/view/578/499
- Andy Hunt and Dave Thomas : programming is like gardening https://www.artima.com/intv/garden.html
This last view seems to be shared by many ( https://signalvnoise.com/posts/591-brainstorm-the-software-garden , Jeff Atwood likes it too https://blog.codinghorror.com/tending-your-software-garden/ and I feel close to him on really many things) and I tend to see it more close to what software development is today : a continuously changing (growing) artifact, not totally manageable, that requires constant maintenance (here the building metaphor fails a bit), designed and redesigned over time like a garden, subject to seasons (“lots of new requirements” season, “robustness and reliability” season).