Architecture is an expression of form and function whose product is in creating practical spaces for people. What I particularly like about early architecture is the results of practical experiments with creating open spaces that have a roof over them. For example, the next time you're in a covered stadium, warehouse, convention center, or other space with open areas, take not of how the design manages to hold the root up over your head. While a church, with its high cathedral ceilings, uses the actual shape of the structure to transport the weight of the roof to the ground, designing a space that has a flat roof and open space beneath it is much more difficult because the designer does not want the space to be full of pillars. The theater I visited uses an innovative approach to address the problem of holding a balcony up over the main seating area without introducing columns that obstruct the view and without shortening the theater to support the weight of the balcony. The entire structure (the stacked theater) is supported by a set of columns that start below the theater and continue right up to the top. Besides supporting part of the main floor's weight, the balcony hangs off the columns in a cantilever fashion thus allowing the main seating area below to remain unobstructed. There's a lot of discussion regarding parallels between software architecture and building architecture and while a there are a lot of similarities, the two disciplines are very different from each other. Building and civil architecture are based on the constraints imposed by materials such as steel and concrete and must be able to stand given loads under certain conditions. In other words, building architecture is a discreet, well understood domain as a result of the media we use to express or embody the architecture. Software architecture attempts to add form to something that is intangible. Our imagination is practically limitless; as a result, so is software architecture. I think that once the industry overall imposes constraints on software by packaging software in the form of components, controls, and other "packages" then software development will shift from being a craft to a matter of assembly and developers like us have to adapt. Just some thoughts that occupy my day.... Essam - Author, JScript .NET Programming
...and a bunch of articles