Everyone's talking about methods and concepts helping in making the development of sofware easier and more fruitful. Design Patterns are supposed to help as well. But there seems to be a discrepancy between academical research activities and practical use of patterns in pofessional software development. In academia, patterns are a hot topic producing uncountable publications and creating highly-paid chairs. In industry, my observations and interviews indicate a *slightly* different picture: Nearly none of the object-oriented developers uses patterns. And if, then the easiest of patterns to be known. Frameworks injected in a company's software product deliver Design Patterns to some extent. One reason might be that framework developers are usually more competent than "ordinary" developers or programmers doing their job.
Side note: IMO, a developer only using one ore more patterns without knowing them cannot be counted as a person knowing the applied Design Patterns in any case. The reason for this is the definition of Design Patterns: They are a proven solution to a recurring problem. And a proven solution must be explicitely known to someone, otherwise it may be proven "globally", so to say, but not locally, i.e. in his mind. Well, this is sort of philosophically, anyway.
SAP world introspected
SAP is a huge, integrated enterprise software system allowing to manage whole global playing companies. I display my thoughts on SAP regarding design patterns here as it contains a typical software architecture (grown and in consequence of historical development) and it is well known to me thru my work as a consultant.
In case of SAP developers the situation is even worse. Having programmed with ABAP (the SAP-built in lanbguage) all night and day, ALMOST NO ONE of them basically knows what a Design Pattern is. Am I wrong? Then give me a comment on this blog. But most probably my assumption should be correct.On the other hand, patterns play an important role in NetWeaver, as for WebDynpro the concept of UI patterns is being introduced to develop applications more intuitively.
Getting on it
I'll tell you something concrete about my strong assumptions being covered by many interviews, references and personal impressions on several software projects:
- 90% of all developers don"t know about the existence of Design Patterns.
- 10% of all developers use Design Patterns.
- Only 1% of all developers (or one tenth of the 10% mentioned above) invent new Design Patterns or variations from known ones.
My sources were: colleagues, students, a questionaire performed by a university with about a hundred persons and a talk with a manager of a modelling software product who was involved in many interviews with developers. I don't claim to have the best sources but they are an indicator and I strongly believe what I'm writing.The journey into success
As John Vlissides (member of the Gang of Four, GoF) said, there are six phases to climb the hill of being able to successfully (in our words: profitably) use Design Patterns. After having understood what they are, you begin to work with them, play with them. After a while you know more than two or three patterns. After that you even understand why they are implemented in their specific way. But only the last step brings you into a position embracing you to use them to your advantage. Before that everything you do is - more or less - a waste of time (or boondoggle, like this word).
The concept behind Design Patterns has been proven useful. It has been adapted from the well known architect Christopher Alexander, who invented the concept for use in architecture. Now we are searching for ways of creating mechanisms and tools to help us to cope with Design Patterns more effectively. The effort in learning them up to the point that enables us to use them as a daily tool is not acceptable. The community of developers needs something to overcome this antagonism. Here, we need academia to lay ground and industry to sponsor projects and give feedback and new impulses as well!
What do you think of design Patterns? Which of them do you use? Which of them do you know by heart and which of the,m must you look up in a pattern book or another resource?
Tell me by dropping a comment!
Here are some links in addition to the one at the top of the article concerning Design Patterns:
- Links to many resources, including basic descriptions
- IBM Developerworks: Pattern categories
- Object Mentor: Excellent articles
- Microsoft"s page about Patterns
- Introduction to Design Patterns
- Patterns in a Nutshell