Tuesday, May 8, 2018

The Basics

  1. We use the word software to indicate instructions that some person has placed inside of an artifact that we call a computer (sometimes 'hardware'). We have created computers to follow these instructions, and so we also say that computers are machines, we say that the act of designing and building of machines is engineering, and that the writing of software is programming. As the field became more self-conscious, some programmers began to differentiate themselves with titles such as architect, developer, designer, etc.
  2. The software on a computer has been differentiated by custom and ease of human understanding. Operating systems allocate machine resources to applications. Applications are written with the help of other applications, such as translators of computer languageslibraries and frameworks that provide helpful functionality from within a computer program, and providers of services that can interact in a slightly more distant fashion from the application.
  3. I'm going to focus on the difficulty of building a coherent, beautiful, elegant, simple, flexible, and robust application. This appears to be the central problem that  both the individual and the industry continue to be faced with.
  4. As a model of productive creation of beautiful artifacts, I'm going to continue to apply my training with architect and urban designer Christopher Alexander, author of A Pattern Language, to the problem of re-founding a culture of computing.
  5. To begin with, I must make it clear that these qualities and properties can only, at the moment, be judged with the use of a particular faculty of the human mind, the one that can distinguish artifacts and processes that have what we call living structure. See this article for an explanation of the natural science outline of living structure.
  6. Given that we are using ourselves as a meter (using the classic method of impression from experimental psychology) to judge artifacts composed of symbols that only have meaning for humans and 'meaning' for human machines, we must be rigorous in understanding that code only has meaning in a human context, even though it has some effect (a different one, really) in the natural world. So, the meaning of any part of a program is in our head, albeit as a constructed term, and we're using another mental faculty to judge program beauty.
  7. In applying this meter to judge the quality of something, Alexander found it essential to create good unfolding sequences to understand and make natural human artifacts possible. In other words, if the thing we make unfolds in the right order, it is more likely to impress us as beautiful.
  8. And so I will here continue to explore what unfolding means in the context of writing a program, in a way that is helpful at producing superb results.