It seems like only the lazy haven’t criticized patterns yet. Let’s take a look at the most typical arguments.
Kludges for a weak programming language
The need for patterns arises only when people choose a language or technology lacking the necessary level of abstraction. In this case, patterns become the kludge that gives the language the much-needed super-abilities.
For example, the Strategy pattern can be implemented with a simple anonymous (lambda) function in modern programming languages.
This point of view was first voiced by Paul Graham in his essay titled Revenge of the Nerds.
More about this standpoint: Wiki
They lead to inefficient solutions
Patterns try to systematize approaches that are already widely used.
This unification is viewed by many as a dogma and they implement patterns “to the point”, without adapting them to the context of their project.
If you have a hammer in your hand, things around start looking as nails
This is the problem that haunts many novices who have just familiarized themselves with patterns.
Having learned about patterns, they try to apply them everywhere, even in situations where simpler code would do just fine.