I’m sure many of you know Christopher Alexander. He is an architect and also the guy who proposed patterns which eventually evolved into Design Patterns in Computer Science. He has a nice talk about Patterns during the opening talk of OOPSLA. You can find the speech here.
After this introduction, what is this entry then? It’s actually my two cents about what Alexander is talking about. It’s also my homework for the school :). So if you are interested follow up. I might be wrong about the things I have written, or you may not agree with me, that’s OK. I would love to discuss it with you, without starting a “flame war” of course. Especially if you are a pattern fan, you might not like what I’m saying. So if you are still with me, there you go.
Christopher Alexander is an architect whose ideas influenced not the world of architecture, but the world of computers most. It’s important why the idea of patterns is embraced by the computer society and what Alexander really described as a Pattern.
When we look to Wikipedia for the definition of a pattern, something like this greets us:
“A pattern, from the French patron, is a type of theme of recurring events or objects, sometimes referred to as elements of a set of objects. These elements repeat in a predictable manner. It can be a template or model which can be used to generate things or parts of a thing, especially if the things that are created have enough in common for the underlying pattern to be inferred, in which case the things are said to exhibit the unique pattern.*
The important part of this explanation is the part that a pattern is something that repeats continuously.
With this in mind, let’s look at the problems of the software developers of that time: Software Design (We can argue still that the problem is not solved today either). Software Design is not something that can be learned in a school without practice; yet as we perceive Software as a science and as an engineering, we think that It can be taught similar to Mathematics. Thanks to this thinking approach many looked for the “silver bullet” or a formula to the design where you enter your inputs and get the ultimate “right” response. We knew that there was no such thing, yet we, as “engineers” did not accept this idea.
Alexander, in his Patterns, describes that, every design is different, there are so much different parameters so that no single design can be right or wrong. But the things we encounter during a design are generally problems that repeat. We, as software developers, remarked that, each design was kind of different according to the different requirements, yet some problems remained and kept catching on us each time during a different design session. It was something that repeated, just like a “pattern”.
We solved all these repeating problems and called them patterns. For us a pattern was a solution to a specific problem in a specific context. Similar to the Patterns, it provided us a kind of a template, a blueprint or simply a guide to perform better in a certain circumstance. It provided a coherent communication between developers because everyone understood what a “Singleton” was. Yet our main goal was to perfect our mental product.
Patterns of Alexander had a higher goal. They had a moral aspect too. We, as software developers or engineers, do we have such a goal or even an intention when using patterns? One might argue that, of course we do because while making our product better we help people being more productive we help humanity in an indirect way. But let’s face it, it’s not our intention or goal, it’s just a consequence that can be trivial for many of the software products.
We, as engineers, achieve to reach a balance between science and economics, a balance between theory and practice. We want to achieve the “best” product in terms of technology that is affordable. We are not immoral guys of course, but we care more with our products then we care people.
We did not embraced Patterns, we embraced the idea that there is no ultimate formula to software, there are only patterns, or mistakes that repeats and they have a solution. We created a knowledge repository with patterns. We shared our knowledge of problem solving not as “my experiences in the field” but as “shiny new patterns”.
Patterns, as I perceive them, are specific solution to specific problems. They are mostly templates. They are not a methodology, they can’t be! They do not tell what you should do or what you can do, they just tell you this: Do you have this problem, solve this way, everyone agrees on it, tested and true, this way you solve your problem truly, it’s the best way to solve this problem too.
I know that many will disagree with me that patterns are not templates. But actually they are. Why are we not calling them templates then? Because of our perception of the patterns. A pattern consist of a specific problem and a specific solution with a context! Templates, as we perceive them, are solutions to ambiguous problem (or a wide range of problems, unlike a pattern). Define the template with a specific problem and it becomes a pattern.
I agree to Alexander that we do not perceive patterns as Patterns. He opened our eyes that maybe Software is not a science but it’s something else -a craft perhaps. We started to think outside the “box of science” and we found many formulas for different situations.
I doubt we can ever help Alexander to create his living world. As a Free Software “believer”, I cannot think of a Software controlling its users. Software is just a channel to express our ideas or realize them. It’s there to be shaped to what shape we want it to be. We cannot and should not force people according to “beliefs we think it’s right”. We cannot shape people to be what we want them to be. It will be against our Code of Ethics as engineers.
I’m sure that Alexander did not mean you should “abuse” your users, he only had good intentions. But let’s face it, the “manipulative power” of many softwares like Google’s search engine or Facebook or something else is already “shaping” what people think about something. Privacy, ethics and copyrights are trivial things right now. And many of software developers do not even intend to manipulate others. It came as a consequence not as a goal. What could have happened if we intended do manipulate people?
We should rethink, as Alexander described, what is our impact to human society and life. Are we creating a “better” world just like Alexander wanted us to “lead” humanity? Or are we just creating new “weapons” that deal lethal blows to human societies personal rights?
As conclusion, I want to thank to Alexander for showing us the “real deal” about Software, for opening our eyes to accept that Software is not a science, yet anyway, but a craft still and for warning us about the impact of our products. But I hope we will never use this “manipulative power” of software to abuse people. I hope that Alexander’s call to help him make a better world, is not misunderstood as create a “better” world for yourself. Software is just a mean, not the goal. It’s just pen and paper not the article itself. And you should be careful on how you use them, because sometimes pen can be sharper then a sword.