The concept invented by Christoph Alexander for architecture has been taken up and adapted by the software industry. One of the first publications on software pattern was Design Patterns: Elements of Reusable Object-Oriented Software in 1993. Followed by Patterns of Software, Tales from the Software Community by Richard P. Gabriel in 1996. [1] In the article of design pattern a pattern is defined as a solution to a recurring problem in a particular context. (Gamma et al. (1995, page 2-3) ) Dirk Riehle and Heinz Züllighoven define a pattern as mental concept which derives from our experience. Only through past experience can we recognize patterns at all. The recognition of patterns always takes place in retrospect. If there was a good solution to a problem, if we know this solution, if the concept of the solution fits our new problem, we can use it. To do this, it can and in most cases must be adapted and can be improved. A pattern is therefore a template for future solutions based on solutions that have already proven themselves. If the context of the pattern does not fit the context of use, there is a mismatch and adapting the pattern to the new concept could be more work and also more expenses. [2]
A solution which has proven itself through practical application, usefulness and repetition can become a pattern. To meet the requirements of a pattern the solution must be useful, applicable in the similar context and reused by others.[3]
Dirk Riehle and Heinz Züllighoven describe three general pattern types:
Conceptual patterns
Conceptual patterns are a kind of mental model of the work situation and the corresponding system. They are used to understand the user and his tasks. They must be abstract enough to be applicable to other situations, but not too specific, otherwise they cannot be reused. In my opinion, this can be compared to pattern of process, closely related to creating scenarios in the UX process.
Design patterns
Design pattern in software design have nothing to do with surface design, it describes the intent of a pattern and explains problem and solution which can be solved with the pattern. They show the structure and construction of the code and contains objects, classes, inheritance, aggregation and relations. A Framework on the other hand consists of design pattern and components. A pattern is more a best practice, a framework is collection of components based on design pattern. Both concepts follow the same purpose, which is the reuse of former solutions to save time for development.
Programming patterns
A programming pattern is closely related to the specific programming language. It is about programming styles in certain programming languages. [3]
A lot of approaches tried to make software development easier less time consuming, like higher-level programming, languages, object-oriented programming, faster computers, design methodologies, compilers, debuggers, editors, programming environments, automatic programming and artificial intelligence. In 1996 programming was still something not a lot of people are able to do.
Richard Gabriel explains a common problem of this industry by comparing it to craft of building bridges. Bridge building has a long history and profound methods and technologies the engineers can draw upon. These advantages do not exist in software design, and with constantly evolving technology, software engineering must also constantly adapt. [4]
Also the reuse of code, which was supposed to speed up the development process, was not yet mature at that time. Developers had to have a central repository, they had to find the right piece of code, which had to be documented to understand not only the purpose but also the code itself. It is often easier and faster to write the code yourself then to search, find and understand code to reuse it. [5]
A solution for this can be found in design pattern. If programmers know a certain pattern they understand it more easily and can work with it faster. Gabriel compares it with the structure of language – if people know the most common patterns they can use it. [6] A problem can be solved with more than one pattern, so it needs a certain context to work effectively. Using a pattern is also not just copying because it will not work with certain circumstances. [7]
- [1] Understanding and Using Patterns in Software Development, Dirk Riehle and Heinz Züllighoven, 1996
- [2] Understanding and Using Patterns in Software Development, Dirk Riehle and Heinz Züllighoven, 1996, P. 2-3
- [3] Understanding and Using Patterns in Software Development, Dirk Riehle and Heinz Züllighoven, 1996, P. 4
- [4]Patterns of Software, Tales from the Software Community, Richard P. Gabriel, 1996 [preface p. 12-13]
- [5]Patterns of Software, Tales from the Software Community, Richard P. Gabriel, 1996 [P. 3-4]
- [6]Patterns of Software, Tales from the Software Community, Richard P. Gabriel, 1996 [P. 26]
- [7]Patterns of Software, Tales from the Software Community, Richard P. Gabriel, 1996 [P. 46-47]