TITLE: What Is It Like to Make Software? AUTHOR: Eugene Wallingford DATE: October 15, 2004 2:57 PM DESC: Is making software more like gardening than engineering? Why would that matter? ----- BODY: Earlier this week, my students and I discussed a chapter from The Pragmatic Programmer. A few students wrinkled their noses at Dave and Andy's use of gardening as a metaphor for software development. I know lots of folks who don't like this and other "soft" metaphors for making software. For most folks, engineering and architecture still make the most sense. At one level, of course, software development is like engineering. Software developers design and build artifacts in response to human needs. They base their designs on a scientific and mathematical understanding of the world. They strive for processes that are verifiable and repeatable, so that they can reliably build artifacts that meet their specifications. But, as I admitted to my students almost in a whisper, I like the gardening metaphor. Design, programming, refactoring, and debugging all have reasonable analogs in gardening, and even better is the mindset of "cultivating" a system over time. It's an organic metaphor, and that feels right to me. We do make software, but software isn't really like a bridge or an auto. The abstractness of software makes it more like a legal argument or a scientific theory. As a graduate student, I built models of arguments and theories and tried to understand how people create them. There's a lot of value in taking an engineering viewpoint on these tasks, but it doesn't always seem much like how people do them. Of course, the relationship between art, science, and engineering is a popular topic among reflective practitioners of all three. In just the last week I ran across an article by a physicist talking about superstition in scientific method and an article by an artist talking about the mundaneness of artistic craft. It seems that many seemingly different activities are less different in the doing than they seem at first glance. While I appreciate the gardening metaphor and think that it can help us understand something about what we do, I don't think it suffices as a model for how we make software. None of the metaphors I've heard of do. That's why I really like this quote from Richard Gabriel:
Over the years I've tried to make the point that programming (even in its "hacking" form) is not precisely like anything else that people do, but is like everything that people do all at once: Programming is not engineering, but programmers do engineering, programming is not art, but programmers need to be artists, etc. The totality of the activity of programming is not like any one thing people do, but because people are people, we bring to bear all our ways of doing things - alone, in groups.
We are just beginning to understand what it is to build software. Metaphors can both help and limit us in our discovery. -----