User Tools

Site Tools


software_that_has_the_quality_without_a_name

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
software_that_has_the_quality_without_a_name [2014/05/16 07:22]
yann [Abstract]
software_that_has_the_quality_without_a_name [2017/09/06 01:54] (current)
Line 11: Line 11:
 //​Yann-Gaël Guéhéneuc,​ 2014/​05/​16//​ //​Yann-Gaël Guéhéneuc,​ 2014/​05/​16//​
  
 +This article describes the author'​s progress from casual observer to expert in design patterns through learning and using real-world architectural patterns. The author start by stating that he used to dismiss refactorings and design patterns as "​nothing that you could not discover yourself"​. Then, while renovating/​expanding his house, he started studying Alexander'​s patterns and "​became tremendously interested in [Alexander'​s work]"​. He realised that the patterns "do not mandate a particular style, nor include superfluous decorations"​ and they are an "​approach [to] design"​ with "good solutions [...] that wouldn'​t constraint [the] implementation unnecessarily"​. Moreover, the patterns "give [...] a vocabulary to talk about how things are constructed"​.
  
 +From then on, the author introduces the idea of "​Quality without a name": "[a] thing or place has the quality without a name if it is comfortable,​ has evolved over time in its own terms, is free of inner contradictions,​ doesn'​t try to draw attention to itself, and seems to have archetypal qualities"​. Things that have the quality without a name seem to have 15 properties in common, according to Alexander'​s work. The author summarises these 15 properties:
 +  * Levels of scale: There is a balanced range of sizes. You don't have abrupt changes in the sizes of adjacent things. Elements have fractal scale.
 +  * Strong centers: You can clearly identify parts of the space or structure.
 +  * Thick boundaries`:​ Lines delimit things. In living systems, edges are the most productive environments (e.g., all the critters that live at the edge of the water).
 +  * Alternating repetition: High/low, thick/thin, shape A and shape B. Things oscillate and alternate to create a good balance.
 +  * Positive space: Space is beautifully shaped, convex, enclosed. It is not leftover space. Think of how a Voronoi diagram has cells that grow outward from a bunch of points, or how a piece of corn has kernels that grow from tiny points until they touch the adjacent kernels.
 +  * Good shape: The sails of a ship, the shell of a snail, the beak of a bird. They attain the optimal shape for their purpose, which is beautiful.
 +  * Local symmetries: The world is not symmetrical at large. But small things tend to be symmetrical,​ because it is easier that way. Your house is not symmetrical,​ but each window is.
 +  * Deep interlock and ambiguity: The crooked streets of old towns. Axons in neurons. It is hard to separate figure and ground, or foreground and background. Two strong centers are made stronger if a third center is placed between them, so that it belongs to both.
 +  * Contrast: You can distinguish where one thing ends and the next one begins, because they don't fade into each other.
 +  * Gradients: Things fade into each other where they need to. Concentrations in solutions, snow or earth banks, the wires that support a bridge. The way bandwidth decreases as you move away from the backbone.
 +  * Roughness: The world is not frictionless and smooth. Irregularities are good because they let each piece adapt perfectly to its surroundings,​ rather than being an exact copy that may not fit as well.
 +  * Echoes: Things repeat and echo each other. Things are unique in their exact shape, but the general shapes repeat over and over.
 +  * The void: Sometimes you get a big blank area for quietness of form. A lake, a courtyard, a picture window.
 +  * Simplicity and inner calm: Things are as simple as possible, but no simpler.
 +  * Non-separateness:​ Everything depends on everything else. You can't separate a fish from the pond and the aquatic plants. You can't separate a column from the base of the building.
 +
 +The author goes on with Alexander'​s idea of transformations,​ which preserve the structure of the things, as refactorings preserve the behaviour of a software program. He then gives an example by Richard Gabriel to transform a ''​PhoneCall''​ class to create two strong centers, then extract the latent center in the middle, and then reach a design where multi-way calls, conference calls, can happen.
 +
 +The author summarises the fundamental process to apply structure-preserving transformations:​
 +  - Start with what you have - an empty lot, or an already-built building, or a program that looks ugly and is hard to use.
 +  - Identify the centers that exist in that space. Find the weakest center or the least coherent.
 +  - See how to apply one or more of the fifteen structure-preserving transformations to strengthen that weak center. Does it need to be delimited? Does it need to be blended with its surroundings?​ Does it need more detail? Does it need to be de-cluttered?​
 +  - Find the new centers that are born when you apply the transformation to the old center. Does the new combination make things stronger? Prettier? More functional?
 +  - Ensure that you did the simplest possible thing.
 +  - Go back to the beginning for the next step.
 +
 +The author recalls that Alexander does not like destroying things to build new ones. Similarly, we should refactor code rather than scrap it. Also, Alexander does not like detailed, up-front design because "you cannot predict absolutely everything that will come up during construction or implementation"​. Instead, we must "​continually evaluate what [we create] against real users and real use cases"​. Finally, the author concludes that "​Quality without a name" is really a (mysterious) synonym to "​living structure",​ i.e., things "that are build according to that method"​.
 +
 +This article is interesting because it put Alexander'​s consequent work into perspective and summarises Alexander'​s main ideas and finding. It also relates real-world architecture with software design and makes a good case for reading books about refactorings and design patterns.
software_that_has_the_quality_without_a_name.1400224924.txt.gz · Last modified: 2017/09/06 01:54 (external edit)