I was reading "Coders at Work" and have faced the fact that some of the professionals interviewed in the book are not so enthusiastic about design patterns.
I think that there are 2 main reasons for this:
Design patterns force us to think in their terms. In other words, it's almost impossible to invent something new (maybe better).
Design patterns don't last forever. Languages and technologies change fast; therefore, design patterns will eventually become irrelevant.
So maybe it's more important to learn how to program properly without any particular patterns and not to learn them.
EDIT: The point also was that usually when people face a problem and they don't have much time, they try to use a pattern. This means copying and pasting existing code into your project with minor changes in order to get it working. When it's time to change or add something, a developer doesn't know where to start because it's not his code and he's not deeply familiar with it.