I’m trying to lay my hands on a copy of the book A Pattern Language: Towns, Buildings, Construction
right now.
Meanwhile, I’m going to conjecture about how a pattern language might be better constructed so as to significantly improve the ability for the person who wants to create some software to communicate with the person who wants to build some software about the (and I’ll use this word loosely) architectural vision of the software to be created.
In other words, it’s all well and good for patterns to be used in the design and construction of software. I’m not saying the Gang-of-Four got it wrong when they began identifying patterns for use in the design and building of software. In fact, if I recall, they specifically admonish readers not to stop with their patterns but to build upon them and create an ever larger vocabulary of patterns.
Turns out this can be very difficult to do. But let’s try, anyway, and see what we come up with.
Typically, software is classified by the people who create it. That is, we have embedded systems and operating systems. We have enterprise information systems, applications, games, libraries, frameworks. Certainly we have others. I’m most familiar with enterprise information systems (EIS), but I’ll maintain that the technique I’ll try to apply can also apply to other classes of software.
Within each of those classifications are further classifications. Within EIS, we have database management systems, messaging systems, logging systems, operations management systems, … you get the point.
I’m going to play with the building construction analogy to see if it works.
Operating systems are like public infrastructure. Roads, bridges, levees, fresh water, drainage and sewage, sanitation, etc.
Embedded systems are like private, miniature versions of the public infrastructure, along with the buildings connected to that infrastructure.
Enterprise information systems are like corporate facilities and all the means of connecting them together. Large skyscraper headquarters buildings, warehouses, factories, campuses, distribution centers, leased office spaces, shopping centers, retail stores, and of course fleets of cars and trucks, jets, helicopters.
Applications are like houses, apartment buildings, hotels, garages, mobile homes, recreational vehicles, campers, and tents.
Games are like amusement theme parks, theaters, arcades. cruise ships, restaurants, casinos.
Libraries and frameworks are like laws, rules, standards, traditions, building codes, common practices, policies.
Social network applications are like television, cable, radio, telephones, walkie-talkies, intercoms, and the post office.
So, if I were going to try to describe the application I think my wife was trying to describe, then it would need to feel like I was trying to describe some kind of structure in which people would live and keep their stuff.
Was she describing a hotel or a tent? There’s a very large difference in the scale and scope of the two, even though functionally they both serve similar purposes.
She said she’s spend $20,000 to have it made. You can’t really by a house for $20,000, even in this economy. And yes, I know I’m comparing apples to oranges. But $20,000 indicates not just what the market price is for property; it’s the value that we place on whatever we’re getting. I’ll leave alone for the moment any calculations of rate of return; I’ll have to come back to that later.
For $20,000, you could probably get a used pickup truck with a camper mounted on it, or an exceptionally nice tent. Neither one is quite exactly what you want to spend $20,000 on, though, right? The pickup truck camper will be tiny, cramped, and have been designed and built for someone else. The tent, nice though it may be, is still a tent with thin walls, only so much protection from the rain or predators, or places to hang your pictures. And don’t forget it’s still not connected to drains or sewers, or even electricity (although, for $20,000 you’d think it would come with a generator—and even that will be noisy).
I’ll keep sussing out the metaphor tomorrow.