Every artistic endeavor strives to capture some slice of the world around us. You might be trying to create as realistic a portrayal as possible, or maybe you’re after a highly abstract portrayal that tries to evoke some emotion.In the world of software (an artistic endeavor if I’ve ever seen one), we create highly-tailored portrayals that are suitable only for the purpose they were constructed.1 Take two or more programs that are in the same problem domain – human resource software, databases, blogging software, etc. None of them will be compatible because they represent a single designer’s (or maybe a couple) view of a problem domain. And every one has a different view of the problem to be solved and how to solve it.
Take a simple term – say a street. What it is it? Have you ever been on a street that ends, and then starts up in a few blocks? Is that the same street? How about a street whose name changes – is it still the same street? Does a street include boulevards,
highways, freeways? Does a street cross city, county, state boundaries? Do you and I live on the same street, although I live in the United States and you live in Canada?
Most of us just want to bury our heads in the sand when faced with such questions – thinking about them is painful because there is no right answer and you’re immediately led to deep philosophical questions about how we perceive the world around us. And most books and papers on the subject are highly technical, and of very little use to people who need to create software by yesterday.
Fortunately, there is a fantastic book on the subject, called Data and Reality, that is deeply grounded in how these issues affect software design. Written by William Kent, it addresses issues that come up every day in design. What is the difference between an identifier and a name? What is a type or category? What is the difference between an attribute and a relationship? For that matter, what’s the difference between types, attributes and relationships? What are the strengths and
weaknesses of the hierarchical, network and relational models? Don’t expect any easy answers – they aren’t any.
Don’t let the publication date, 1978, fool you. The questions the book raises are as valid today as then. In fact, I’d bet they’ll be just as valid one thousand years from now. Luckily the book was reprinted in 2000, so go pick up your copy now before it goes out of print again.
Let me leave you with one of my favorite passages from the book (page 10, 2000 paperback edition):
We seem to have little difficulty with the concept of “one person” despite changes in appearance, personality, capabilities, and, above all, chemical composition…When we speak of the same person over a period of time, we certainly are not referring to the same ensemble of atoms and molecules. What the is the “same person”? We can only appeal to some vague intuition about the “continuity” of – something – through gradual change. The concept of the “same person” is so familiar and obvious that it is absolutely irritating not to be able to define it. Definitions in terms of “soul” and “spirit” may be the only true and humanistic concepts, but significantly, we don’t know how to deal with them in a computer-based information system. It is only when the notion of “person” is pushed to some limit do we realize how imprecise the notion is.
Data and Reality
1I can’t help but think of software products as Mount Everests on a fitness
landscape that are infinitely thin. Veer just slightly off their intended purpose and everything comes crashing down.