I was reading Design patterns page on Wikipedia. And more particullary "Criticism" section. Could you point me to some articles or books about shortcomings of design patterns?
Most of the criticisms of design patterns that I have come across relate to a distaste for the structuring and labeling of what they consider to be just good object oriented practices. Most patterns boil down to programming to interfaces, and other SOLID principles. The feeling is that when we teach patterns we cause developers, especially junior developers to try to cram all problems into the set of patterns that they have learned, which can create more obtuse and cumbersome problems than if they had taken a more 'straight forward' approach.
I tend to agree with the sentiment that once you begin to learn patterns you tend to over use them, however, typically you very quickly move out of that stage, and into a much more productive and professional software career afterward.
As a bonus, here is a bit of mild criticism from Jeff Atwood and some critical insights from Mark Dominus
One big criticism against design patterns is about how much "generic" many design patterns really are. For instance, the Strategy Pattern implementation seems to be more relevant (and complex) in languages that lack lambdas/first-class functions (compare the Java vs. Ruby, or even vs. the C# "functional" approach, here).
But I think this argument does not deny the fact that design patterns do exist, and that they are a very good, more language-agnostic way of understanding software architecture. Even if some design-pattern has an easier implementation in a given language.
Of course, I do agree that most enterprise design patterns would not fit in a pure functional language. But I believe the functional world has its own set of design patterns too (like the Monad).
Design patterns were hyped a lot about ten years ago; it seems to me that most of the criticism is about overarchitecting applications and applying all the patterns you can think of wherever you can. This heated debate is pretty boring when you take the rant factor out - yes, too much of anything is not good and to inexperienced programmer with a hammer everything looks like a nail.
From time to time, somebody will discover that something he's been doing for the whole time has a name and comment that it doesn't deserve to have a name (missing the point that design patterns are about naming sometimes obvious things so that you can talk about them).
Apart from that, you're basically left with the fact that some languages have a few patterns built-in, and some other don't, and academic debate about how with time some patterns become programming language features.
I haven't seen much valid criticism related to design patterns beside that. They definitely exist, sometimes they are useful, you don't have to know all of them when somebody wakes you up at 3 AM, and that's about it. :)